首先声明,本文内容主要是针对编程相关的内容,即是本文讨论的是编程重点。有些这里说不是重点的内容可能在面试时一样要通过八股文重点准备。本文档是可以评论的,有什么想法大家可以在评论区留言。可能听起来有些矛盾,但事实就是面试造火箭,工作拧螺丝。该文档持续更新,最新的链接在语雀。首先声明,本文内容主要是针对编程相关的内容,即是本文讨论的是编程重点。有些这里说不是重点的内容可能在面试时一样要通过八股文重点准备。可能听起来有些矛盾,但事实就是面试造火箭,工作拧螺丝。*************学习过程中主要存在的误区C++ Primer的书籍能学半年数据结构算法 跟风刷题23种设计模式学习过程中没有侧重点Linux编程,啃全部的《UNIX环境高级编程, 812页》或者《Linux/UNIX系统编程手册 1176页》计算机网络抱着课本啃,比如抱着《计算机网络(第8版) 谢希仁 484页》为什么说要先快速掌握核心的知识,是因为只有通过写项目才能把各种知识真正串起来,写项目中遇到一些之前没有遇到的语法或者技术点,可以再去查书籍和博客。0 校招该如何准备尽量至少提前半年准备,见过不少985的网友,在7/8月份才开始准备找工作,然后连C++新特性、Linux系统编程、网络编程都不了解的,读研两年时间都花在导师给的任务上,出现找算法工作力不从心,找开发工作又没有准备的尴尬状态。校招时间:3、4月就开始实习投递7、8月就开始提前批了9、10月校招高峰期11月大公司基本上招完了,只剩中小一些的公司12月 只剩小公司了第二年3、4月春招,有些朋友大公司寄望补录(从目前的就业形势看,大公司补录的机会极少,因为这个时候以及开始招实习生了)所以一定要提前准备好 3、4月实习投递、7、8、9、10月的校招高峰。如果秋招错过了怎么办?那也不要摆烂,准备好项目,春招继续投,后续也可以投社招岗位的。 1 C++相关C++基础c++面向对象之封装、继承、和多态C++ STL重点先重点掌握容器的使用:[string容器][vector容器[deque容器][stack容器][queue容器] [list容器] [set/ multiset 容器] [map/ multimap 容器] 容器算法可以先以了解为主。对于不同容器的内部实现,后续看八股文的时候再深入。C++ 新特性重点智能指针(先重点掌握shared_ptr)左右值引用(但不用太沉迷)、mov、forwardthread、condition、mutex、atomicfunction、bindfuture、aysnc、promise、packaged_task可变模版参数(variadic templatesdecltype / auto实现一个C++11的线程池实现一个C++11的线程池 差不多就可以把C++常用新特性串联起来。不建议把c++14、17、20等等特性都一次学完。(注意,可以大致先了解下有什么新的特性就行)2 数据结构算法校招是不是一定要刷力扣大公司、中小公司对算法要求区别:字节、腾讯、美团、百度、阿里这些公司是要好好刷题的,200道起像深信服这级别的公司对算法要求没有那么搞,大部分还是数组、链表、排序、查找、二叉树等算法题。像瑞芯微、全志、联发科这类的芯片公司,对于算法这块也是考核常规的数组、链表、排序、查找、二叉树等算法题建议:先平衡自己的能力,确定可以冲哪一类的公司,不要无脑地把大量的时间花在刷题上;网上搜索对应公司历年的面试题,有针对性地做准备,不要跟风冲自己能力不及的公司;3 设计模式常见设计模式23种,也不要全部重点去看,工作一般常用的就五六种,可以先重点看常用的设计模式,其他的以了解为主,常用的设计模式:单例模式 工厂模式 策略模式 观察者模式 责任链模式 组合模式但需要做些扩展,比如单例模式可以到准备八股文的时候再进一步复习,前期学编程先别纠结那么多各种细节,即使花了时间,面试前还是得准备。4 Linux系统编程如果Linux没有基础,可以先学习Linux常用命令,但不要无脑照着 《linux菜鸟教程命令大全》来。对于shell编程,有个入门经验就行,主要是知道shell脚本的作用,大致理解脚本的运行逻辑就行。重点放在Linux api编程上。写代码不要用vim写,不要用vim写,可以使用vscode远程连接Linux系统写代码。多进程目前进程间通信大部分都是用的socket,即使大部分的进程间通信学习的时候不用作为重点内容,常见的主要是pipe。重点掌握的内容:fork父子进程exec系统调用僵尸进程进程回收进程间通信重点掌握pipe,其他不要花那么多时间,但八股文还是要背诵,比如喜欢问哪种进程间通信效率高掌握进程的基本信号处理方式多线程Linux系统里多线程最为重要,大部分程序都会使用多线程。重点:线程创建、销毁、退出等待信号量互斥锁,工作中主要使用互斥锁,但面试读写锁也会被问到条件变量自己实现一个消息队列(生产线程、消费线程、队列、互斥、阻塞、唤醒等)在消息队列和stl的基础上,实现一个线程池信号注意进程信号、线程信号的处理重点:信号发送、信号处理、信号屏蔽特别需要留意的是网络编程相关的信号:大部分书籍里提到的信号还是得好好看,信号内容相对也比较少因为大部分开源项目会对这些信号(部分)设置,一定要理解其作用。(可以在网络编程的时候再重点理解)其他比如mmap等,这个也是需要重点掌握5 Linux网络编程和原理网络编程核心基础核心是实现tcp客户端和服务端的通信udp 客户端和服务端的通信注意阻塞和非阻塞select/poll/epoll实现服务端的io多路复用(客户端其实也可以使用select/poll/epoll)Linux网络编程要掌握到什么程度网络编程核心基础 -> reactor网络模型 -> 构建业务。顺序:实现reactor网络模型,实现echo业务然后接入线程池,实现echo业务构建http业务构建webserver添加日志(注意日志性能)虽然很烂大街,但reactor网络模型是Linux开发的核心知识,可以把之前学到Linux编程串联起来。Linux网络编程进阶多线程、多线程、epoll+线程池不同reactor网络模型的区别不能单只学会epoll+线程池的reactor网络模型,也要进阶学习其他reactor网络模型。百万连接该怎么处理怎么实现单机百万连接,是否需要优化操作系统参数,每条tcp链接占用多少资源udp可靠性设计如何实现udp可靠性传输,可以帮助我们理解网络传输原理,这个需要深刻理解tcp的基础上才能实现。网络原理是不是要看教科书重点是理解tcp、udp传输原理。(这个需要多看一些八股文,计算机书籍讲的是比较一般的)http1.0 1.1 2.0 3.0websocket等。看书补充:可以看看  图解HTTP + 图解TCP/IP + 图解网络硬件 系列书籍。6 通信协议设计为什么要掌握通信协议设计其实tcp、udp本身就属于通信协议设计,目的是让发送方和接收方 能够按照一定的格式发送和处理数据。我们讲的通信协议设计,比如微信, 发消息如果一个人连续发送多条消息,服务器怎么识别?有些朋友说间隔时间那么大,但如果我们是用代码做测试?连续调用send(消息1), send(消息2), 如果"消息1和消息2"有粘包,服务器是收到"消息1消息2",那怎么拆分?客户端和服务端该如何沟通要实现客户端和服务端的沟通,就需要两端约定好通信协议。常见序列化协议 json > protobuf >  xml等序列化的核心:把程序对象转为字节序列,以便后续再把字节序列还原为对象。为什么要序列化,比如一个对象里有很多变成字段,比如name和address,如果不做序列化如何发送给对方。{  "name": "darren",  "lastName": "Jai",  "address": "长沙岳麓区 高新区麓谷企业广场",  "age": 25,  "password": "admin@123"}7 日志库日志性能和什么有关系注意fwrite和write的区别。追求吞吐量:缓存后批量写入追求实时性:每笔数据调用write写入。什么是同步、异步日志同步日志:指当输出⽇志时,必须等待⽇志输出语句执⾏完毕后,才能执⾏后⾯的业务逻辑语句异步日志:⽇志输出语句与业务逻辑语句并不是在同⼀个线程中运⾏,⽽是有专⻔的线程⽤于进⾏⽇志输出操作。如何实现日志的高吞吐量写入?8 持续更新中要做什么项目?学习一定要有侧重点,20%是开发最常用的知识需要先掌握
点赞 18
评论 1
全部评论

相关推荐

zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务