灵魂三问:
2020年你涨薪了吗?
2020年你的技术提升了吗?
对于2020年的自己是否满意?
“金三银四”即将到来,作为一年的跳槽季,这是找工作换工作的最佳时机,对于不满现状的朋友考虑在这个时间跳槽,但是看看招聘网站,要求玄的要死。面试几轮之后更是没有深没有浅。经过一段时间的接触之后,内心十分着急,又不知道怎么办,就是没有一个具体可执行的计划。这样下去导致最坏的结果可能是今年的跳槽可能变成了换坑,跳槽是职业生涯有续线性的增长,无论收入还是title或者平台,换坑是从这个坑跳到另外一个坑,从而进入一个恶性循环,给长期职业发展带来很不利的影响,个人能力的成长长期维持在同一水平线上下浮动。
计划的意思是了解当下市场招聘环境的变化,并且根据对自己技术势力的综合评估对当前的市场行情的预估之后,分析技术差距罗列的一个学习列表,具体细节的实施,学习效果的验证,要花费多长时间来完成他,每天要投入多少精力学习等等,根据不同的情况来自己把握。
首先给大家分享一份对标腾讯T8(原2.3)职级的技术栈,供大家查漏补缺
c/c++ linux服务器开发学习地址:c/c++ linux服务器高级架构师
一、精进基石
1、数据结构与算法
2、设计模式23种(没有全部列举)
3、工程管理
视频学习地址:设计模式很难吗?看mark老师如何吊打设计模式
二、高性能网络设计
1、代码实现
2、方案分析
视频学习地址:linux多线程之epoll原理剖析与reactor原理及应用
三、基础组件实现
1、池式结构
2、高性能组件
3、开源组件
视频学习地址:150行代码,手把手写完线程池(完整版)
四、协程的原理及实现
五、基础开源框架
1、skynet
2、zeromq
3、dpdk
视频学习地址:为什么dpdk越来越受欢迎,看完以后,让人醍醐灌顶
六、中间件开发
1、mysql
2、redis
3、nginx
4、mongodb
5、dfs
视频学习地址:16万行Nginx源码,就该这么读
七、linux内核
1、进程管理
2、内存管理
3、文件系统
4、设备驱动
视频学习地址:5个方面分析linux内核架构,让你对内核不再陌生
八、性能分析
九、分布式框架
视频学习地址:去中心化,p2p,网络穿透一起搞定
其次,跳槽找工作肯定是需要面试的,在这总结一些面试题供大家参考(因为是C/C++的,而鹅厂是cpp的主战场,所以总结的是鹅厂的一些面试题)
【文章福利】小编还总结了很多其它一线互联网大厂的面试题,有需要的朋友可以加群812855908领取
C/C++
const
多态
什么类不能被继承(这个题目非常经典,我当时答出了private但是他说不好,我就没想到final我以为那个是java的)
网络
网络的字节序
网络知识 tcp三次握手 各种细节 timewait状态
tcp 与 udp 区别 概念 适用范围
TCP四次挥手讲一下过程,最后一次ack如果客户端没收到怎么办,为什么挥手不能只有三次,为什么time_wait。
对于socket编程,accept方法是干什么的,在三次握手中属于第几次,可以猜一下,为什么这么觉得。
tcp怎么保证有序传输的,讲下tcp的快速重传和拥塞机制,知不知道time_wait状态,这个状态出现在什么地方,有什么用?
知道udp是不可靠的传输,如果你来设计一个基于udp差不多可靠的算法,怎么设计?
http与https有啥区别?说下https解决了什么问题,怎么解决的?说下https的握手过程。
tcp 粘包半包问题怎么处理?
keepalive 是什么东东?如何使用?
列举你所知道的tcp选项,并说明其作用。
socket什么情况下可读?
nginx的epoll模型的介绍以及io多路复用模型
SYN Flood攻击
流量控制,拥塞控制
TCP和UDP区别,TCP如何保证可靠性,对方是否存活(心跳检测)
tcpdump抓包,如何分析数据包
tcp如何设定超时时间
基于socket网络编程和tcp/ip协议栈,讲讲从客户端send()开始,到服务端recv()结束的过程,越细越好
http报文格式
http1.1与http1.0区别,http2.0特性
http3了解吗
http1.1长连接时,发送一个请求阻塞了,返回什么状态码?
udp调用connect有什么作用?
操作系统
进程和线程-分别的概念 区别 适用范围 它们分别的通讯方式 不同通讯方式的区别优缺点
僵尸进程
死锁是怎么产生的
CPU的执行方式
代码中遇到进程阻塞,进程僵死,内存泄漏等情况怎么排查。
有没有了解过协程?说下协程和线程的区别?
堆是线程共有还是私有,堆是进程共有还是私有,栈呢
了解过协程吗(我:携程???不了解呜呜呜)
共享内存的使用实现原理(必考必问,然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?)
c++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高道低分配,堆从低到高分配)
ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意.bss段)
使用过哪些进程间通讯机制,并详细说明(重点)
多线程和多进程的区别(重点 面试官最最关心的一个问题,必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)
信号:列出常见的信号,信号怎么处理?
i++是否原子操作?并解释为什么???????
说出你所知道的各类linux系统的各类同步机制(重点),什么是死锁?如何避免死锁(每个技术面试官必问)
列举说明linux系统的各类异步机制
exit() _exit()的区别?
如何实现守护进程?
linux的内存管理机制是什么?
linux的任务调度机制是什么?
标准库函数和系统调用的区别?
补充一个坑爹坑爹坑爹坑爹的问题:系统如何将一个信号通知到进程?(这一题哥没有答出来)
Linux系统
linux的各种命令 给你场景让你解决
Linux了解么,查看进程状态ps,查看cpu状态 top。查看占用端口的进程号netstat grep
Linux的cpu 100怎么排查,top jstack,日志,gui工具
Linux操作系统了解么
怎么查看CPU负载,怎么查看一个客户下有多少进程
Linux内核是怎么实现定时器的
gdb怎么查看某个线程
core dump有没有遇到过,gdb怎么调试
linux如何设置core文件生成
linux如何设置开机自启动
linux用过哪些命令、工具
用过哪些工具检测程序性能,如何定位性能瓶颈的地方
netstat tcpdump ipcs ipcrm (如果这四个命令没听说过或者不能熟练使用,基本上可以回家,通过的概率较小 _ ,这四个命令的熟练掌握程度基本上能体现面试者实际开发和调试程序的经验)
cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握
awk sed需掌握
gdb调试相关的经验,会被问到
MongoDB
关于大数据存储的(mongodb hadoop)各种原理 mongodb又问的深入很多
Redis
Redis内存数据库的内存指的是共享内存么
Redis的持久化方式
Redis和MySQL有什么区别,用于什么场景。
redis有没有用过,常用的数据结构以及在业务中使用的场景,redis的hash怎么实现的
问了下缓存更新的模式,以及会出现的问题和应对思路?
redis的sentinel上投票选举的问题 raft算法
redis单线程结构有什么优势?有什么问题? 主要优势单线程,避免线程切换产生静态消耗,缺点是容易阻塞,虽然redis使用io复用epoll和输入缓冲区把命令按照队列先进先出输入等等
你觉得针对redis这些缺点那些命令在redis上不可使用? 比如keys、hgetall等等这些命令 建议用scan等等 这方面阐述
你觉得为什么项目中没有用mysql而用了es,redis在这里到底起到了什么作用?因为架构上这里理解不清楚,最后回答自己都觉得有漏洞了
你觉得redis什么算有用? 有用? 是说存进去了还是说命中缓存?最后把缓存命中率是什么说了一遍
你们这边redis集群是怎么样子的
平常redis用的多的数据结构是什么,跳表实现,怎么维护索引,当时我说是一个简单的二分,手写二分算法,并且时间复杂度是怎么计算出来的 (2的k次方等于n k等于logn)
MySQL
你们后端用什么数据库做持久化的?有没有用到分库分表,怎么做的?
索引的常见实现方式有哪些,有哪些区别?MySQL的存储引擎有哪些,有哪些区别?InnoDB使用的是什么方式实现索引,怎么实现的?说下聚簇索引和非聚簇索引的区别?
mysql查询优化
MySQL的索引,B+树性质。
B+树和B树,联合索引等原理
mysql的悲观锁和乐观锁区别和应用,ABA问题的解决
项目性能瓶颈在哪,数据库表怎么设计
假设项目的性能瓶颈出现在写数据库上,应该怎么解决峰值时写速度慢的问题
假设数据库需要保存一年的数据,每天一百万条数据,一张表最多存一千万条数据,应该怎么设计表
数据库自增索引。100台服务器,每台服务器有若干个用户,用户有id,同时会有新用户加入。实现id自增,统计用户个数?不能重复,好像是这样的。
mysql,会考sql语言,服务器数据库大规模数据怎么设计,db各种性能指标
算法
堆栈
有序数组排序,二分,复杂度
常见排序算法,说下快排过程,时间复杂度
有N个节点的满二叉树的高度。1+logN
如何实现关键字输入提示,使用字典树,复杂度多少,有没有其他方案,答哈希,如果是中文呢,分词后建立字典树?
hashmap的实现讲一下吧,讲的很详细了。讲一下红黑树的结构,查询性能等。
快排的时间复杂度,冒泡时间复杂度,快排是否稳定,快排的过程
100w个数,怎么找到前1000个最大的,堆排序,怎么构造,怎么调整,时间复杂度。
一个矩阵,从左上角到右下角,每个位置有一个权值。可以上下左右走,到达右下角的路径权值最小怎么走。
四辆小车,每辆车加满油可以走一公里,问怎么能让一辆小车走最远。说了好几种方案,面试官引导我优化了一下,但是还是不满意,最后他说跳过。
MySQL的索引,B+树性质。
十亿和数找到前100个最大的,堆排序,怎么实现,怎么调整。
布隆过滤器
hash表解决冲突的方法
跳表插入删除过程
让你实现一个哈希表,怎么做(当时按照Redis中哈希表的实现原理回答)
设计模式
对于单例模式,有什么使用场景了,讲了全局id生成器,他问我分布式id生成器怎么实现,说了zk,问我zk了解原理不,讲了zab,然后就没问啦。
除了单例模式,知道适配器模式怎么实现么,有什么用
分布式架构
CAP BASE理论
看你项目里面用了etcd,讲解下etcd干什么用的,怎么保证高可用和一致性?
既然你提到了raft算法,讲下raft算法的基本流程?raft算法里面如果出现脑裂怎么处理?有没有了解过paxos和zookeeper的zab算法,他们之前有啥区别?
rpc有没有了解
最后再送你一句来自丘吉尔的名言:
“成功不是最终的,失败也不是致命的,开始的勇气才是最重要的!
来源:oschina
链接:https://my.oschina.net/u/4264305/blog/4948213