中高级程序员需要掌握哪些技术:
中高级程序员需要掌握哪些技术:
能够流畅的使用Shell脚本来完成很多自动化的工作;awk/sed/perl 也操作的不错,能够完成很多文本处理和数据统计等工作;基本能够
装大部分非特殊的Linux程序(包括各种库、包、第三方依赖等等,比如MongoDB/Redis/Sphinx/Luncene/SVN之类的);了解基本的Linux服务,知道如何查看Linux的性能指标数据,知道基本的Linux下面的问题跟踪等
在第一阶段的基础上面,了解复杂一些的Nginx配置;包括多核配置、events、proxy_pass,sendfile/tcp_配置,知道超时等相关配置和性能影响;知道nginx除了web server,还能够承担代理服务器、反向静态服务器等配置;知道基本的nginx配置调优;知道如何配置权限、编译一个nginx扩展到nginx;知道基本的nginx运行原理(master/worker机制,epoll),知道为什么nginx 性能比apache性能好等知识;
在第一阶段的基础上面,在MySQL开发方面,掌握很多小技巧,包括常规SQL优化(group by/order by/rand优化等);除了能够搭 建MySQL,还能够冷热备份MySQL数据,还知道影响innodb/myisam性能的配置选项(比如key_buffer/query_cache /sort_buffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit等),也知 道这些选项配置成为多少值合适;另外也了解一些特殊的配置选项,比如 知道如何搭建mysql主从同步的环境,知道各个binlog_format的区 别;知道MySQL的性能追查,包括slow_log/explain等,还能够知道基本的索引建立处理等知识;原理方面了解基本的MySQL的架构 (Server+存储引擎),知道基本的InnoDB/MyISAM索引存储结构和不同(聚簇索引,B树);知道基本的InnoDB事务处理机制;了解大 部分MySQL异常情况的处理方案(或者知道哪儿找到处理方案)。条件允许的情况,建议了解一下NoSQL的代表MongoDB数据库,顺便对比跟 MySQL的差别,同事能够在合适的应用场景安全谨慎的使用MongoDB,知道基本的PHP与MongoDB的结合开发。
在大部分中型系统里面一定会涉及到缓存处理,所以一定要了解基本的缓存;知道Memcached和Redis的异同和应用场景,能够独立安 装 Redis/Memcached,了解Memcahed的一些基本特性和限制,比如最大的value值,知道PHP跟他们的使用结合;Redis了解 基本工作原理和使用,了解常规的数据类型,知道什么场景应用什么类型,了解Redis的事务等等。原理部分,能够大概了解Memcached的内存结构 (slab机制),redis就了解常用数据类型底层实现存储结构(SDS/链表/SkipList/HashTable)等等,顺便了解一下Redis 的事务、RDB、AOF等机制更好
除了第一阶段的能力,安装配置方面能够随意安装PHP和各种第三方扩展的编译安装配置;了解phpfpm的大部分配置选项和含义(如 max_requests/max_children/request_terminate_timeout之类的影响性能的配置),知道mod_php /fastcgi的区别;在PHP方面已经能够熟练各种基础技术,还包括各种深入些的PHP,包括对PHP面向对象的深入理解/SPL/语法层面的特殊特 性比如反射之类的;在框架方面已经阅读过最少一个以上常规PHP MVC框架的代码了,知道基本PHP框架内部实现机制和设计思想;在PHP开发中已经能 够熟练使用常规的设计模式来应用开发(抽象工厂/单例/观察者/命令链/策略/适配器 等模式);建议开发自己的PHP MVC框架来充分让开发自由化, 让自己深入理解MVC模式,也让自己能够在业务项目开发里快速升级;熟悉PHP的各种代码优化方法,熟悉大部分PHP安全方面问题的解决处理;熟悉基本的 PHP执行的机制原理(Zend引擎/扩展基本工作机制);
能够设计大部分中型系统的网站架构、数据库、基本PHP框架选型;性能测试排查处理等;能够完成类似:浏览 器 > CDN(Squid) > Nginx+PHP > 缓存 > 数据库 结构网站的基本设计开发维护;能够支撑 每天数百万到千万流量基本网站的开发维护工作;
重点:除了基本的LNMP程序,还能够在某个方向或领域有深入学习。(纵深维度发展)
1. Linux:
2. Nginx:
3. MySQL/MongoDB:
4. Redis/Memcached:
5. PHP:
6. C/C++:
7. 前端:
8. 其他领域语言学习:
9. 其他专业方向学习:
10. 系统设计:
系统设计在第二阶段的基础之上,能够应用掌握的经验技能,设计出比较复杂的中大型系统,能够解决大部分线上的各种复杂系统的问题,完成类似浏览器> CDN > 负载均衡 >接入层 > Nginx+PHP > 业务缓存 > 数据库 > 各路复杂后端RPC交互(存储后端、逻辑后端、反作弊后端、外部服务) > 更多后端这样的复杂业务;能够支撑每天数千万到数亿流量网站的正常开发维护工作。
算法:
1 画一个10个节点的二叉树,并写出它的先序,中序,后序遍历结果
2 什么是哈希算法,列举一个哈希算法
3 简单描述最短路径算法
4 100万个节点的二叉树,查找一个元素最多需要查找多少次
PhP:
php+nginx方式和 php+apache 方式运行有什么不同
Php中用self::和static::方式调用静态方法有什么区别
列出2种php开发框架,并说出他们的区别
Mysql:
优化相关主要参数有哪些
Niginx
Nginx中如何创建缓存
建立负载均衡
缓存:
如何自己搭建一个缓存服务?
其他:
如何做压力测试
负载均衡的方式有哪些
如果1M的内存,100G磁盘,要分析1G的xml并输出成数组,要怎么做
如果发现user-agent的值为 “baidu spider”的cc攻击,如何防护
如何搭建日活跃千万次的app后台
如果有100万并发,抢购10个商品,有10台服务器,如何搭建这个抢购功能