【随便起的名字】

闲话

这个标题我不知道怎么写好,所以暂时不写题目,很像那种写作文先写内容后写题目的人。暂且认为我就是这种人吧。

面试

面试情况

首先说一下实习的感受,不是很严格的计算,实习了也近两个月了。出去实习是我2019年最后一个愿望,它的确实现了。三轮技术+一轮HR,一周不到就拿到了Offer,而且是我第一次面试,说实话第一次就拿到Offer,我着实有点吃惊,然后后边又面了
(1)微软苏州,这个电话面了一次,然后后边因为时间不合适,而且只有两个月的寒假实习生计划,最后放弃了。
(2)Face++,这个也是因为时间原因,需要至少6个月的实习时间,但是我还得回来上课,就也没面了。
(3)时代复兴,这个过了两面,第三面现场面没去,因为当时已经拿到了字节的Offer,之所以面这个是因为它在武汉,想着距离学校近一点。最后受到大佬们的启发,肯定要去大公司啊,就决定去了字节。
最后:有好多人问了我为啥不去试试阿里,腾讯,这个因为我投简历的时候已经是12月底了,人家早就招满了,所以简历都没地方投。并且,我个人不是很喜欢腾讯,因为里面没有我想做的东西。阿里是很喜欢,但是估计能力不够。

面试准备

这大概是写这个的核心要点。其实面试校招或者实习生,要求不是很高,当然,如果你遇到了很坑的部门、面试官,非要搞你,炫技之类的,那只能自认倒霉了,但是一般来说很少有人这样搞,因为大家都是这样过来的。我总结了几个大点
数据结构和算法:这个其实是最重要的,很多人都挂在了这上面。一般来说,面试肯定会有题目让你写的,这个大家都在刷leetcode,我觉得不错。当然如果你有ACM经验,这一方面大可不用太担心。没有的可以重点关注一下:
(1)排序算法:快排,堆排序这两个必须得会写。其他的,复杂度知道就行,然后有一个线性时间选择的算法,其实也很简单,这个我推荐学一下,因为有的人真的会问。
(2)搜索算法:dfs和bfs这个得会,不严格的说,所有问题都可以用搜索来解决。比如迷宫路径,最短路等等。
(3)DP/贪心:DP这个当然是基本的模型要会,LIS/LCS/LICS,各种背包等等,很常见,贪心这个田忌赛马的题目要会写
(4)字符串算法:KMP(这个不难),实在不会先写个暴力然后再说你会KMP,也行。字符串hash,这个太长用了;字典树,这个也很多;然后其他的比如马拉车或者回文树,这个也有,但是不会怎么问。
(5)各种数据结构:BST得会写,单调栈/队列,优先队列,哈弗曼树,常见的都得会写。
(6)然后就是一些技巧了,双指针,扫描线,数学知识,二分查找,等等。
应该来说,如果这个解决了,后边的问题都是不大的,因为后边的不会可以背下来,但是这个没法整,只能多练习。很多人都是挂在了这上面。
数据库:这个我认为是第二重要的,为什么不是语言基础呢?因为你去了公司不一定就是你熟悉的语言,比如我个人在学校写项目天天都是JAVA,但是到了公司让我写go,虽然一开始很不爽,但是写着写着发现go真好用。
重点:这一张我认为是我们大多数人的短板,因为课程和生产实际脱离了,我们在学校练习用的都是SQL Server/Oracle,很少用MySQL,但是公司大多都用的MySQL以及在MySQL上的拓展。所以这个可能是我们最不熟悉的。先推荐一本书《高性能MySQL》
(1)MySQL的结构,插件式引擎,这个能说出来两三个引擎的特点就行,比如Innodb,MyIsam之类的。
(2)索引,这个太重要了,把索引彻底弄明白,《高性能MySQL》里面有详细的讲解,比如Innodb为什么用B+树,为什么不用B树,B树和B+树的区别,为什么不用红黑树,这个我被真是的问到过。
(3)查询优化:啥时候建个索引,多表联合查询的时候怎么降低查询次数,怎么避免全表扫描
(4)MVCC:这个只是Innodb引擎实现的,其他的我不是很清楚。MVCC原理,实现方式,存在问题。
(5)MySQL怎么实现高可用,怎么主从复制/读写分离,分表分库的原则。MySQL做负载均衡
(6)事务:事务的ACID,事务的四种隔离级别,Innodb默认的实现以及对每种级别的支持都是怎么做的。这个一般来说都会问到的。
(7)数据库的各种锁。
数据库大概就是这些了。
语言基础:这个需要根据职位判定,以JAVA为例子
(1)java语言基础,自动装箱、拆箱,各种关键字
(2)java面向对象技术
(3)java多线程技术
(4)java网络编程技术
(5)java集合类,这个HashMap一定要知道咋回事
(6)框架。
(7)虚拟机技术
对于框架,我其实学了不少,但是记得的基本没有,学习框架的目的是为了学他的思想,解决问题的方案,比如我在学Spring时就会觉得,它的思想就是提供一种无侵入式的拓展程序功能的方法。
网络和操作系统:网络其实还是挺多的
网络
(1)TCP和UDP的区别
(2)TCP的握手机制
(3)怎么实现靠传输
(4)TTL是啥,心跳包的作用
(5)链路是怎么完成转发的
(7)TCP的流量控制/拥塞控制/慢启动
操作系统
(1)进程,线程,以及协程
(2)用户态,内核态。
(3)进程调度算法
(4)内存页面置换算法(LRU要会写)
(5)页式存储、段式存储,段页式存储,缓存/多级缓存。
(6)文件系统,什么是软连接?硬链接。
(7)死锁的产生和解除,pv操作等。
然后操作系统这个,其实推荐一本书《Unix 编程艺术》,我看了一点,没怎么看完。这个还会问到你Linux,个人觉得没事就学学Linux,学学Makefile怎么写,shell怎么写。关于Linux的,不多说了,因为我也是半瓢水,不是很懂。

加分

其实上面的东西懂了,基本上就可以了。但是,好像所有学完计算机的都明白,即使不明白,学学也明白了。所以还得有点亮点。这个可以根据自己的兴趣学一学
机器学习:这个各种算法可以学一下,因为实习嘛,你说你会点机器学习,挺顺应潮流的,但是如果你和我一样只是半瓢水,就别写简历上了,因为万一人家问到了,不会了就很尴尬。
MQ:这个用的还是很多的,推荐一个MQ:Kafka,这个设计的思想其实好懂,现在用的很多。最好写几个小的Demo感受一下,一些基本的定义要一清二楚,比如producer/consumer,Topic,Brokers, Partition之类的,做到会用,原理基本明白,就可以。
JAVA虚拟机:这个可以说是java的基础部分,但是也可以很深入的了解,推荐《深入JAVA虚拟机》这本书我基本上看完了。比如虚拟机中的内存划分,垃圾回收/垃圾回收算法/垃圾收集器;对象布局;虚拟机中的线程是怎么执行的,类加载,常用的虚拟机参数,虚拟机优化的常见策略。我觉得这个还是很有用的。
Redis:这个一般都会问,因为用的十分的广泛,Redis的集群搭建,Redis怎么高可用,Redis和MySQL配合使用,缓存穿透/雪崩/击穿,和ZooKeeper结合,Redis持久化,RDB/AOF原理,主从同步,哨兵,分布式锁,与Memcache的区别。
RPC RPC调用基本上是必须的,所以熟悉一下RPC框架很好,比如Dubbo,Thrift。这个暂时可以知道其中的原理,比如Dubbo里面用的Netty,这个我之前专门深入学过,也看过源码,奈何一直没人问我,都忘完了。
分布式和微服务 微服务的思想,Docker技术,微服务协调技术的代表作:zooKeeper。这些都有所了解,主要是解决的问题和设计的思想,其实怎么用不需要很关心。分布式数据库,cap理论。
大数据相关 其实要说现在的一个比较资深的后端,不会点大数据都不好意思了。我看带我的大哥,天天在用Spark,Hbase,Abase这些。这也是我下一步学习的内容

深入一个点

上述的东西,如果能深入一个点,就很厉害了。基本上就差不多了。其实实习或者校招,项目经验不会怎么问,但是还是可以看看别人的项目经验,学习一下。

实习学到的东西

业务代码也是不容易的

之前一直说自己写CRUD,但是做好这些也不简单,比如你用框架,了解背后原理吗?写接口有没有考虑它需不需要被设计成幂等的,代码是不是简洁?上线能够保证不天天报警?所以这些都是挺需要学习的

技术需要沉淀

即使掌握了很多技术,但是还是需要从业务做起,只有把小数据量,低并发的做好了,才有可能去做大数据,高并发的事情

不断学习

其实到公司,也没做多少东西,但是学了很多概念和新的处理问题的思路。也见识了一下新的技术。比如Kafka是我去公司学的第一个新东西(当然不算go语言),然后是zooKeeper,全文搜索引擎ES,以及一些很basic的技能:git。

最后

(1)在学校里很爽,虽然武汉现在不知道啥时候能去,但是我相信我一定会更加珍惜在学校的时光。
(2)2020的工作不是很好找,提前做准备,未雨绸缪总是好的。

发布了373 篇原创文章 · 获赞 52 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_41863129/article/details/104527704