做者:Yt201907162132712 连接:www.nowcoder.com/discuss/208… 来源:牛客网c++
一.C和C++语言基础 参考书籍:《C++ primer》,《effective C++》,《STL源码解析》,《深度搜索C++对象模型》程序员
extern关键字做用 static关键字做用 volatile是干啥的 说说const的做用,越多越好 new与malloc区别 C++多态性与虚函数表 纯虚函数如何定义,为何对于存在虚函数的类中析构函数要定义成虚函数 析构函数能抛出异常吗 构造函数和析构函数中调用虚函数吗? 指针和引用的区别 指针与数组千丝万缕的联系 智能指针是怎么实现的?何时改变引用计数? C++四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast 内存对齐的原则 内联函数有什么优势?内联函数与宏定义的区别? C++内存管理 STL里的内存池实现 STL里set和map是基于什么实现的。红黑树的特色? STL里的其余数据结构和算法实现也要清楚 必须在构造函数初始化式里进行初始化的数据成员有哪些 模板特化 定位内存泄露 二.数据结构与算法 这一块考察范围太广,主要靠多刷题。面试
Hash表算法
Hash表实现(拉链和分散地址) Hash策略常见的有哪些? STL中hash_map扩容发生什么? (1) 建立一个新桶,该桶是原来桶两倍大最接近的质数(判断n是否是质数的方法:用n除2到sqrt(n)范围内的数) ; (2) 将原来桶里的数经过指针的转换,插入到新桶中(注意STL这里作的很精细,没有直接将数据从旧桶遍历拷贝数据插入到新桶,而是经过指针转换) (3) 经过swap函数将新桶和旧桶交换,销毁新桶。 树数据库
二叉树结构,二叉查找树实现; 二叉树的六种遍历; 二叉树的按层遍历; 递归是解决二叉树相关问题的神级方法; 树的各类常见算法题(blog.csdn.net/xiajun07061…); 什么是红黑树? 红黑树与AVL树的区别 Trie树(字典树) 链表编程
链表和插入和删除,单向和双向链表都要会 链表的问题考虑多个指针和递归 (1) 反向打印链表(递归) (2) 打印倒数第K个节点(先后指针) (3) 链表是否有环(快慢指针)等等。 栈和队列设计模式
队列和栈的区别?(从实现,应用,自身特色多个方面来阐述,不要只说一个先入先出,先入后出,这个你会别人也会,要展示出你比别人掌握的更深) 典型的应用场景 海量数据问题数组
十亿整数(随机生成,可重复)中前K最大的数 十亿整数(随机生成,可重复)中出现频率最高的一千个 排序算法浏览器
排序算法固然是基础内容了,必须至少能快速写出,快排,建堆,和归并 每种算法的时间空间复杂度,最好最差平均状况 位运算安全
布隆过滤器
几十亿个数常常要查找某一个数在不在里面,使用布隆过滤器,布隆过滤器的原理。布隆过滤器可能出现误判,怎么保证无偏差?
三.网络与TCP/IP 参考书籍:《图解TCP/IP》,《TCP/IP详解 卷一》,《图解HTTP》,《HTTP权威指南》
TCP与UDP之间的区别 (1) IP首部,TCP首部,UDP首部 (2) TCP和UDP区别 (3) TCP和UDP应用场景 (4) 如何实现可靠的UDP 详细说明TCP状态迁移过程
(1) 三次握手和四次挥手状态变化; (2) 2MSL是什么状态?做用是什么? (3)三次握手为何不是两次或者四次? TCP相关技术
TCP客户与服务器模型,用到哪些函数 UDP客户与服务器模型,用到哪些函数 域名解析过程,ARP的机制,RARP的实现 Ping和TraceRoute实现原理 HTTP
http/https 1.0、1.一、2.0的特色和区别 get/post 区别 HTTP返回状态码 http 协议头相关 https与http的区别?如何实现加密传输?加解密方式? 浏览器中输入一个URL发生什么,用到哪些协议? 安全相关
SQL注入 XSS CSRF SYN洪水攻击 APR欺骗 四.数据库 主要参考书籍:《数据库系统概念》,《高性能MySQL》
SQL语言(内外链接,子查询,分组,汇集,嵌套,逻辑) MySQL索引方法?索引的优化? InnoDB与MyISAM区别? 事务的ACID 事务的四个隔离级别 查询优化(从索引上优化,从SQL语言上优化) B-与B+树区别? MySQL的联合索引(又称多列索引)是什么?生效的条件? 分库分表 五.Linux 主要参考书籍:《现代操做系统》,《APUE》,《UNP》,《LINUX内核设计与实现》,《深刻理解LINUX内核》
进程与线程
进程与线程区别? 线程比进程具备哪些优点? 何时用多进程?何时用多线程? LINUX中进程和线程使用的几个函数? 线程同步? 进程间通信方式
共享文件映射mmap mmap创建进程空间到文件的映射,在创建的时候并不直接将文件拷贝到物理内存,一样采用缺页终端。mmap映射一个具体的文件能够实现任意进程间共享内存,映射一个匿名文件,能够实现父子进程间共享内存。 常见的信号有哪些? 虚拟内存的做用? 虚拟内存的实现? 操做系统层面对内存的管理? 内存池的做用?STL里内存池如何实现? 进程空间和内核空间对内存的管理不一样? Linux的slab层,VAM? 伙伴算法 高端内存 进程调度
Linux进程分为两种,实时进程和非实时进程; 优先级分为静态优先级和动态优先级,优先级的范围; 调度策略 交互进程经过平均睡眠时间而被奖励; 死锁
死锁产生的条件; 死锁的避免; 命令行
与CPU,内存,磁盘相关的命令(top,free, df, fdisk) 网络相关的命令netstat,tcpdump等 sed, awk, grep三个超强大的命名,分别用与格式化修改,统计,和正则查找 ipcs和ipcrm命令 查找当前目录以及字母下以.c结尾的文件,且文件中包含”hello world”的文件的路径 建立定时任务 IO模型
五种IO模型 select,poll,epoll的区别 Linux的API
fork与vfork区别 fork和vfork都用于建立子进程。可是vfork建立子进程后,父进程阻塞,直到子进程调用exit()或者excle()。 对于内核中过程fork经过调用clone函数,而后clone函数调用do_fork()。do_fork()中调用copy_process()函数先复制task_struct结构体,而后复制其余关于内存,文件,寄存器等信息。fork采用写时拷贝技术,所以子进程和父进程的页表指向相同的页框。可是vfork不须要拷贝页表,由于父进程会一直阻塞,直接使用父进程页表。 exit()与_exit()区别 exit()清理后进入内核,_exit()直接陷入内核。 孤儿进程与僵死进程 Linux是如何避免内存碎片的
共享内存的实现原理 系统调用与库函数(open, close, create, lseek, write, read) 同步方法有哪些? 六.设计模式 单例模式线程安全的写法 STL里的迭代器模式,适配器模式 七.分布式系统 map_reduce原理 负载均衡 CDN 相信你可能经历过这些:
已经工做两三年了,每一个项目都会加班加点尽心尽力去完成,薪资增加幅度却不如人意。
据说年后离职的老同事,跳槽刚拿下高薪offer,年薪直奔50万了。
因为如今的公司接触不到新技术,对本身的市场竞争力无比焦虑,将来职业道路怎么走?
这个凛冽寒冬,你终于明白,如今的工做机会不多,薪资很难有较大涨幅,IT工程师的薪资是技能决定的,是时候去提升技能,提早规划将来职业发展路径了。
如今竞争这么激烈难道真的准备转行吗?能送的了外卖,搬得了砖吗?
做为it从业者,谁不忙,谁不加班。你说你没时间,家人能理解,领导和市场是不会理解你的。那如何提高技术,保值提高本身的价值,若是在有限的时间高效的提高?咱们一块儿来看看过来人的经验。供你们参考一下。
成为一名c++Linux开发工程,不一样于其余语言,由于它的保值性,因此不少时候就像是在温水煮青蛙,等你反应过来的时候,你已经丧失掉了反抗的能力。
在Lee哥十余年的开发生涯中,这一点深有体会。而让Lee哥坚持下去的动力,主要源于3个方面。
一、 不断增值本身,拥有更多选择权
若是将技术比作一棵树,每学会一门语言,就点亮树上一个果实,你会得越多,技术树的果实就越多,价值就越大。当技术树的果实积累到必定程度,你就能纵向往高阶技术方向晋级,职业发展之路更上一层楼。
二、 互联网没有温馨圈,止步不前即是退步
计算机技术更新迭代快、新技术层出不穷,若是想要成为一个优秀的c/c++Linux后台工程师,就要作好随时学习的准备,并锲而不舍,这样才能跟上互联网突飞猛进的发展节奏。
三、 学习是面对竞争、度过中年危机的最好方法
it工程师是高薪职业,近年来互联网的高速发展下,更是一度成为抢手的热门职业,以致于投身到这个职业的人愈来愈多,千军万马过独木桥,想要不掉队,惟有努力学习,成为互联网公司高薪争抢的中高端工程师,才能不惧寒冬。
目前互联网寒冬让不少互联网人清醒了,众多大企裁人、招聘需求收缩,主要仍是针对基础岗、温水煮青蛙给煮死的那波人,中高端工程师在市场上依然紧缺。
怎么选择自个人提高路线就很重要。
互联网公司主流技术选型 不少作c/c++Linux后台开发的程序员有时候就感到很困惑,说不想提高吧,在公司来回就是那三板斧。说想提高,一是担忧本身时间不够,看书啥的,坚持一段时间以后,项目一来,就断了,再想继续的时候前面的有有点忘记了。而是怎么高效的学习,要学的一想大多了,望而却步。
这7大模块就是在进阶架构必要掌握的技能点了,就像打怪升级,技能点都没有点满的话,boss你一碰就会挂掉。
因此但愿这里的整理能真正帮助到想要从程序员进阶为高级架构师之路的朋友。
1.组件编程配置专栏
包括zerMQ,Redis,MySQL,Nginx,ZooKeeper,MongoDB.
2.工程化管理专栏
包括工程架构,代码管理。
3.网络IO专栏
包括IO复用,IO框架,IO类型。
4.Linux系统专栏
包括系统命令工具,网络参数工具,日志监控工具,参数监控工具。
5.实战专栏
包括项目需求,工程代码,功能测试,产品发布。
6.开源框架专栏
包括网络,协议,并发,媒体,语言,数据,压缩,国际化,安全,日志。
7.调试与性能专栏
但愿你们能用心理解,整理不易。Lee哥最后也想说,职场也好,人生也罢,都是一个不断变得优秀的过程,在这个过程当中,会不断的遇到挫折与困难,一个个须要咱们去翻越的山峰。只有坚持前行,才有机会看见更美的风景。
学好技术+面试分析,软硬兼施,才是全面提高的良方。