| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> PHP - 2021年终总结 -> 正文阅读 |
|
[PHP知识库]PHP - 2021年终总结 |
概述技术领域没有银弹,各行各业的人想要持久的生存都需要学习,学习本身是一件有趣的事,难点在于把学到的知识融入到现在公司的业务和体系中,让项目落地,重新定义和改革之前的架构体系,这个过程是复杂的,新旧体系的交替,人员的流动等等,这个过程可能会遇到各种各样的问题,没有数据证明的项目落地都差那么点意思,不够精准和严谨,专业程度会遭到质疑。 2021年技术圈的变化:
不管什么年代,实力都是王中王,保持学习的习惯对一个手艺人尤为重要,持续学习和思考是职场人最珍贵的品质。 多想多思考,才能从根本上提高效率。有总结的能力、有宏观的角度、有兼顾细节的耐心。 编程语言没有什么语言是最好的编程语言,语言只是语法和解决问题的侧重点不同,比如PHP就擅长Web领域,Go专门解决并发的问题,本质上没有什么不同,都是实现某一个业务(功能)的工具,实现的一种手段。 PHP从初入职场至今,主要从事的就是PHP语言的编程开发,其他的学习都围绕着这条主线,从开始的基本编码、到扩展、编入第三方插件,由浅入深层层递进。 PHP语言虽然不及前几年那么火爆,但是还是有很强的生命力,简单高效,易扩展,开源,有强大的社区是语言生命力的保证。 SwooleSwoole两个扩展是具有划线的两个扩展,和之前的扩展不同,它在启动时,预编译代码、启动线程池也加入了协程这个网络处理结构。常驻内存型的分布式 PHP 框架,专为 API 而生,摆脱传统 P运行模式在进程唤起和文件加载上带来的性能损失。 Hyperf 和Easyswoole是Swoole的扩展框架,我主要用的是Easyswoole,基于websocket做了一个消息推送服务。 后端存储业务大体分为两种,一种主要是消耗计算力为主的CPU密集型,一种是主要消耗内存和缓存的I/O密集型业务,存储也分两种一种是关系型数据库,一种是内存型数据库,他们有着各自的优缺点。 Mysql比如说执行一条Sql语句,要明白这条语句发生了什么,查询语句和更新语句有本质的不同。Mysql还有个不同的点在于,Sql语句的执行,很大程度又取决于存储引擎。 Mysql的存储结构是Betree结构,在每一层都有指针链接,由页和叶子节点按顺序存储,查询语句,是经过链接器、分析器、执行器和优化器,返回查询结果。更新语句更多的是依赖redoLog和Binlog日志来完成。 查询的语句使用explain测试,如果有不按预期执行的语句,检查配置文件,配置文件的参数,决定了后续的计算和算法。 InnoDb和Myisam的存储不同在于,Myisam索引存储的是物理地址,InnoDb存储的是实际数据,少了回表的执行过程。 Mysql的最大杀手是并发查询,在执行脚本任务的时候,最后可以加上主键的条件,Order by ID ASC 在加上一个 WHERE ID > ID 的条件。 如果链表的速度比较慢,可以把少的部分单独查询出来,做字典拼接处理,在我之前的博客里写的很清楚了,百万级数据查询优化笔记 有叙述具体的方法,在这就不赘述了。 RedisRedis更像是一个被一个大的对象包裹的数据结构,支持丰富的数据结构,但是Redis是单线程,如果执行失败需及时释放。 Redis的计算方法依赖于配置的参数,字符串是一种算法,数字是一种算法,对不同的长度也有不同的算法。 要注意缓存的回收与一致性,这是一定会遇到的问题。 并发与性能先说说我之前失败的一个例子,Http的请求量过大,直接打在Mysql上,开始还能反应过来,半个小时后,挤压的超时太多,直接把Mysql压垮了。复盘后我重新修改了接口逻辑加了两个小时的缓存,在过期时1-3000s随机过期,后来经过Jemeter压测得到了30/s的峰值。 主要通过容量预估和压力测试两个部分来说明这个点。 容量预估容量预估的核心是计算,把峰值的QPS计算到具体的每秒多少,容量预估就是对Cpu、内存的精确计算预处理能力。就像物理学家通过模拟计算预测引力波、黑洞、等多种天文现象。 项目开始之前应该问相关同事的历史记录和情况,进行容量预估和方案设计。思路有时候比结果更重要。 压力测试项目完成对项目进行压力测试主要是测试会不会因为高峰流量到来的情况,压力测试有两个关键的点,访问最优点和访问最大值,压力保持在最优点以下。还需要预留点伸缩空间。 容器和微服务单机系统时代,最开始的互联网公司都使用单机系统就足矣满足用户的需求,随着互联网的高速发展,单一的系统不能满足场景的多样化需求,由单一系统逐渐演变成分布式系统。 容器的兴盛把微服务变成了一种可能,微服务主要是针对之前的分布式系统做的对比和区别,把单一的功能封闭在自己的范围内,加强了系统的稳定性,高效便捷、快速熔断的特点。 真正的微服务,最核心的其实是 如何做好服务间的最小粒度切分,其实这个 服务切分是属于架构规划上的范畴。 Docker容器对于Docker进行了3次大规模的学习,掌握基本的原理和操作命令,Docker是很好用的工具,快速部署服务。 单独搭建部署应用服务、Docker php安装扩展步骤详解、Docker 环境下部署高可用集群实践 其他总结++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1.程序设计时要充分考虑界值、是否存在、最大最小的情况,便于程序可控 1.高性能 就是最合理的使用了Cpu和缓存 1.性能问题的本质,就是系统资源已经达到瓶颈,但请求的处理却还不够快,无法支撑更多的请求 JavaScript 中对象独有的特色是:对象具有高度的动态性,这是因为 JavaScript 赋予了使用者在运行时为对象添改状态和行为的能力。 未来有个同事跟我说了一个很好的办法,就是看到代码时,在你大脑里运行一遍,看看是否存在非预期的结果,常常优化自己的老代码,获得新的进步。 对于每一个明天都属于未来,决定未来的是每一个现在。 GoGo和Linux私房菜(服务器架设篇)是我2022年学习的重点,要严谨认真,要继续加油~ 参考文档/课程
|
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/14 14:42:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |