非科班java秋招总结和学习路线建议
前言
今天是2020年10月27日,下午在华为南研所完成了三方,正式签约华为,部门是消费者BG的流程IT和质量运营部门,岗位是软件开发工程师,评级是14级A,虽然薪酬和期望的还有点距离,但是考虑到今年消费者BG的处境确实比较惨,招聘人数相比往年确实少了很多,能进我top2想进的公司,还是比较幸运的。既然做出了选择,那么也没有什么好遗憾后悔的,以后好好工作。争取早日实现财务自由。
讲讲今年秋招的收获吧,当然比不了什么大佬,但是我觉得对于一个双非本,985硕,半路出家的学生来说,我觉得还是挺为我感到自豪的。希望以后一直有找工作这样的拼劲去学习,工作。
杭州大华,号称血汗工厂,17k×(12~14),白菜价。
南京中兴,无线电具体什么部门不记得了,17.5k,走的优招,奖金什么的也忘了,当时就是去估计个身价,外加找个理由拒绝。
南京紫光展锐,camera软件开发,给的sp,20k,奖金几个月没细说,好像一般是1.5~2个月??,考虑了两天拒绝了。
南京一加,在我华为签约之后还没跟我谈薪,也是牛皮,具体开多少不知道,估计总包24~27w?
接下来就是我想去的top2之一,上海美团到店部门,给了sp,24k×15.5,总包37w,今年美团是真的香,但是还是给拒了,选择了华为,具体原因我后面说。
还有几个研究所什么的,我就不说了。
另外呢,这里我还想点名几个公司,是真的牛皮,笔试完之后也不给你挂(事实上应该是没挂的),但是就是拖着不给你面试,搞不懂啥意思?,你说你不想要我就直接挂我简历不就行了吗,这种操作不是浪费我时间吗。包括京东,阿里,腾讯,小米,360。其中腾讯最牛,5道算法题,A出来4道,愣是没给我面试机会,小米也是,笔试就不难,想找个hr的联系方式都没有,现在我的状态还是笔试中。
另外,我想表扬华为的一点是,我从来没想到华为的流程,是我面试的所有公司里,流程走的最快的(不包括提前批的字节,它也很快)。三天连着面,非常爽,我同门他一天连着3面,这更爽。其实对于面试而言,一天全部面完其实是最好的,因为战线拉太长,背的东西都很容易忘。不知道为啥看面经有的人就是一天连着面的,但是我从来没有过这种待遇,不知道为啥,可能是我不够优秀?
准备经历和学习路线
今年疫情,说起来真的挺幸运的,因为不用去学校,也没老师管,给了非常多的时间可以自由学习。我是从4月底开始正式准备的,说早不早,说晚也不晚,我认识的同学有的从寒假就开始准备了,很强。我是因为过完年后写了师兄布置的国家自然科学基金的一部分,后面又接着准备开题,所以拖了很久。如果大家可以的话,还是越早准备越好。甚至可以春招就开始投,练练面试的感觉。
当时一开始的话,就准备的是java后端开发方向,虽然过程中也学过一点前端的知识,但是主要精力还是java基础以及后端。之所以选择java,还是觉得市场的需求比较多,机会比较大吧,但是对于后来者,我却不是很推荐这个,因为我觉得java现在真的是“内卷”太严重了,而且以后只会越来越卷,原因很简单,因为java用起来比C++简单很多,虽然后端的内容和知识点一点都不比C++相关的工作少,甚至多很多,但是单纯就java的使用来说,确实是简单了很多,举几个简单的例子,首先java里面是没有指针的,但是指针的操作在C++里面,绝对是一个难点和重点,另外java也不需要使用者自己申请和释放内存,这都是java自己内部完成的,但是C++却需要程序员自己完成这些活,还有很多类似的例子。而一个语言越简单,就导致他入门的门槛就越低,越多人会去选择使用它,所以导致java现在的使用率这么高。但是,你简单,别人也简单啊,别忘了,现在网上各种java辅导班,一大堆,所以竞争非常激烈。因此,如果大家找工作之前用的C++,那么我还是推荐找C++开发相关的工作,首先岗位较多,虽然没有java那么多,但是也不少,另外“内卷”程度,远远比不上java。
聊走题了,我当时看的第一本书是《java程序员面试宝典》,这是一本面向面试的总结类书籍,为什么选他,因为java语言我在本科的时候就用过,当时毕业设计使用java自己开发了一个安卓的app,所以我觉得对我来说java并不需要从头学起,太浪费时间了。然而上来就看这本书,最终的效果其实不好,首先因为安卓编程用到的java知识比较少,第二这本书已经比较过时了,里面讲的java web相关的知识,比如jsp,struts什么的,其实都是古董了,现在根本没什么公司还用这些东西了,面试根本不会问这些(反正就我的面试经历来说,从来没问过)。并且如果你没有接触过java web项目,直接看这些,就跟天书一样,根本看不懂,所以当时第一步走的,回过头来看,并不正确。另外,当时还做了一个比较错误的选择,那就是:一开始没有刷算法题,而是选择了刷选择题(??),而且刷了一个月,刷了800多个选择题,沃日,,,我都没搞懂我当时脑子里在想啥,,,,所以我大概耽搁了一个月在这两个回头看来一点用都没有的事情上面。
因此,这给大家两个教训:
- 选择题没有任何必要去刷,直接刷算法
- 《java程序员面试宝典》这本书现在来看并不推荐,看也只要看第四章,java基础知识
后面我看完了《java程序员面试宝典》发现好像还是学的不太懂,所以又准备再去看看java基础,万幸,找到了一个网站,how2j(不是广告啊,我啥都不贴了,自己搜去吧),又把java基础跟着这个网站学了一遍,感觉比第一轮好多了。同时,我还买回来几本经典的java并发相关的书:《Java并发编程的艺术》,《深入理解Java虚拟机》第三版,《深入理解Java虚拟机》这本书好厚一本,我都没想到我能啃完,每天就带着看,内容讲的也是相当的好,非常的细致,秋招最后,JVM应该是我掌握最好的一门知识点了,只要问道里面的知识点:垃圾收集器,各种锁及优化,volatile和synchronized什么的,我都能跟面试官扯个10几分钟,所以这本书必看!!!《Java并发编程的艺术》也是必看的,多线程相关的知识,以及线程池,并发容器等等知识点,都非常重要,这里面讲的也都很好。
学习完了java基础,我们还要继续补完java技术栈,接下来还需要了解计算机网络相关的知识,因此,我买了《计算机网络(第七版)》,也是非常厚的一本书,但是从网上的面经来看,其实重点就是那几章节,比如第一章,然后网络层,运输层,应用层,和网络安全等等,此外还买了一本《图解http》,一个从日文翻译过来的书籍,里面内容比较基础,适合入门理解,但是感觉用处不是非常大。我觉得计算机网络相关的知识点还是比较集中的,主要还是靠面经总结+看书。
后面就是java开发里面的又一个重头戏了,那就是数据库,现在用得比较多的还是MySQL数据库,我买了都很推荐的《MySQL必知必会》,这本书其实是对SQL语言的一个入门介绍,非常适合MySQL入门了解,写的非常好,然而面试基本没问到,,,然后就是买了《高性能MySQL》,这本书非常多人推荐,然而我总感觉里面的语句读起来不是很通顺,可能是因为翻译过来的吧,读起来的感觉不是很好,也只读过前面几章,主要是第一章的锁,事务,以及MVCC,还有第五章介绍各种索引。这里告诉大家一些看书的窍门,因为有些知识点的书籍,内容实在是太多,就比如《高性能MySQL》,非常非常厚的一般书,基本不可能在这么短的时间内看完,只能挑重点看,那怎么挑重点呢,很简单,看面经,看面试官经常问的,你看的多了,就知道大家问的重点在哪,着重去理解记忆即可。在后期,我还买了《MySQL技术内幕InnoDB存储引擎》这本书,这本书是国人写的,因此读起来感觉就比《高性能MySQL》要好很多,非常流畅,而且讲的也很深入,十分推荐。最后就是《Redis设计与实现》,这本书基本上你学习Redis就一定得买,因为讲的真的是太棒啦,各种底层原理利用代码以及示意图的形式,让你非常快速地就能去理解,这本书我也是看了60%~70%的样子,前面的关于Redis底层的数据结构的内容是一定得看的,面试被问道好几次,另外关于持久化的内容也必须要看。
最后,也是最重要的,那就是算法,算法这个问题大家一定得重视,因为短时间内很难提升,必须得靠大量刷题才行,而且刷一遍还不行,得刷2~3遍,其实大家后面会发现,写算法题的时候,编程根本不是问题,编程上的技巧不多,也就是各种map,set,各种排序方法,以及各种循环等等,难的就是一个思路,或者说是思路里面的某一个点,这个点一打通,就豁然开朗了,但是思路里面的这个难点,大多数人第一次做这道题的时候,很难想到,即使想到,也是因为曾经遇到过类似的问题。另外,我们从一个很功利的角度来看,当面试时遇到相同的题目时,你能不能再写出来?我觉得很多人还是会卡在第一次被卡的地方,这怎么解决?我觉得短期之内只能反复刷,增强记忆。
因此,我在这里结合我的学习路线,给大家一个入门算法的建议路线,首先,算法里面最基础的就是计算时间复杂度以及各种排序算法,二叉树等等,这部分比较基础的内容,你别看他基础,在初期理解起来也是非常不容易的,因此我不是很推荐一上来就看算法书,或者直接刷leetcode,我觉得这样的学习曲线太陡峭了,因此,我比较推荐看看一些算法的基础班视频,至于怎么选,大家随意,我自己看的是左神的算法基础班,我觉得他真的讲的非常非常非常非常细致了,但是看视频这个过程是真的难熬啊,我看的视频一集3个小时,看了快10集吧,每天带着看一点。
看完基础班之后,你对算法已经有了一个很基础并且很肤浅的认识,包括算法里面关于二叉树的各种问题,各种排序算法,贪心算法,以及动态规划等等。后面就要加深理解了,我在当时选择的是继续看左神的进阶班,但是回头来看,对于我自己来说,我觉得可以有更好的选择,原因有二:
- 进阶班难度较高,看视频的速度会进一步减慢,耗费时间较多,对于时间紧张者不建议
- 就我面试的经验来说,进阶班题目遇到的频率较低,也可能是我是非科班出生,所以面试官的题目不会太难
因此,对于和我一样的非科班的后来者,我的建议是有选择的看进阶班视频,如果时间紧就跳过,就比如进阶班里面的KMP算法,manacher算法,现在想起来都还是我的噩梦啊,套路性极高。因此我的建议是,看完基础班就可以刷一些简单的算法了,因此可以去刷《剑指offer》,网上有java版本的答案,可以搜一下。剑指offer里面的难度我觉得还是比较简单的,但是面试考的频率还是很高的,因此非常适合已经有了一些算法基础的人,去加深一下难度,拓展一下知识面的广度。当刷完剑指offer之后,就可以刷leetcode了,直接刷高频100题,同时带着看看前面的基础班题目以及《剑指offer》的题目,保证不会因隔了太久导致忘记。
最后,关于算法,还有一点建议,leetcode的解答区的有个叫labuladong的作者,我觉得他的解答写的也很不错,他自己有个主页,上面根据题目的类型,把一些相似题都归类到了一起,这些题目的解法也很相似,可以跟着他的归类来刷,这样效率会提高很多。
此外,我当时看面经的时候,还看到有人被问到了Spring框架相关的知识,并且还看到有的面经的作者,各种看Spring的源码,然后面试的时候,直接当面手撕Spring,,,,但是就我来说,好像被问到Spring相关的知识点非常少,就问到过一两次好像,也不深,当时也买了《看透Spring MVC源码分析与实践》,看了七七八八,讲得不错,然而根本没有被问到过,当时看了这个面经作者把Spring当做自己的一个核心竞争力,因为一旦面试官问道这个,他可以跟面试官扯10几分钟(这里提一个小技巧:你自己说的多,面试官自然就问的少了,比较时间就那么多,还得做算法,是不?)我又去买了一本《Spring 解密》,老厚的一本书,最后一页都没看过,,,,因此Spring相关知识点,我觉得大家不需要花太多的时间。有时间的话,另当别论。
最后,除了看上面的一些书籍之外,我还经常关注一些微信公众号,java之道,三***敖丙,好好学java等等,这些公众号上也会经常发一些面试问题以及技术问题,里面的答案只要你理解了都可以作为你的回答的模板。
因此,总结一下,java后端开发主要需要了解的知识点包括但不限于:JVM,java基础,java并发,MySQL数据库,Redis,算法等等。
面试经历以及面经
这次的秋招我一共投了接近40家公司,有些公司直接把我简历就刷掉,有几个公司笔试挂掉了,有几个公司笔试过了,就是不给面试,有几个公司笔试过了,说没有适合岗位,剩下的就是拿了offer的或者面试挂掉的。
总体来说,今年秋招我觉得真的是很难的,一方面疫情原因以及中美贸易战科技战原因,很多公司生存就很困难,招聘的人数相比往年必然缩减,但是很多互联网大厂还扩招了??,所以说“危机”就是危险和机遇共存啊。另外一方面,又是因为疫情,很多原本去国外的留学生今年只能留在国内上网网课或者延期去国外,跟我们国内应届生一起在国内找工作了,人家的学校各种全美top,世界top什么的,竞争力非常高,又加剧了内卷的程度,所以,感慨一句,真的是太难了!!!
我投的公司:
中兴 | 华为 | 苏州空天院 | 京东 | 招商银行网络科技 | 海尔创吧 | 字节 | oppo | vivo | 广联达 |
网易 | 网易互娱 | pdd | 美团 | 奇安信 | 中移物联网 | 思杰 | bilibili | 农业银行 | 360 |
华为 | 百度 | 快手 | 腾讯 | 滴滴 | 阿里 | 28所 | 55所 | 南瑞继保 | 地平线 |
小米 | 中车四方 | 大华 | 一加 | 深信服 | 浪潮 | 趋势科技 | 紫光展锐 | | |
可以看到,我投的公司基本上都是南京及其周边的(或者山东的,然而山东我想投也没地方投,互联网企业太少了),像很多深圳的互联网企业我都没有投,因为我基本不会去深圳,所以也不想浪费精力了,之所以最后选择华为,主要是因为对象山东人,她选择跟我留在了南京,因为我家也在这,所以虽然美团的待遇很有诚意,但是我还是选择了华为。
另外多说一句,我提前批只面了3个公司,招商银行网络科技和字节,和中兴,回过头来,这又是一个很错误的决定,今年互联网很多hc在提前批都发了,秋招只会更加激烈,僧多粥少,所以还是建议大家提前批一定多投多面,说不定运气好捡几个呢,秋招有个保底,压力也会小很多。
面经:
招银网络科技
6.29 一面
自我介绍
1、得到class对象的三种方法
Class.forName(类全名)
类对象.getClass();
类名.class()
2、创建线程的方法?以及如果你选你会选择哪一个?
三种,以及各自的优缺点
3、spring的组件?
4、hashmap的底层实现?
5、如果数据库里面的数据过多,给你来优化,你怎么弄?
回答:哈希分流,一致性哈希,虚拟节点,感觉答偏了,应该是缓存什么的
6、死锁产生的条件
7、java是否允许多继承?
不允许,但是可以通过实现多个接口来实现相同的效果。
7.10二面
1、object类有哪些方法?
2、讲一下垃圾收集方法
3、虚拟机的一些具体优化措施,
4、了解过那些设计模式?把你知道的都讲一下
5、有过哪些数据库?讲一下数据库的各种隔离级别
6、讲一讲volatie
写代码给你来个简单点的,写个hashmap的遍历
结果我居然没写出来??一紧张忘了
让改一个,改个list的遍历?我说来个算法把?
那就用stack实现queue。
7.17三面
1、具体讲一下项目,以及你的任务,以及遇到的问题
2、讲一下springboot使用的注解有哪些,
3、讲一下JVM的垃圾收集策略?
4、讲一下数据库的事务,你在之前的项目里面真正使用过吗?
5、有没有JVM的调优经验,知不知道内存泄露,知道哪些情况下会发生内存泄露,如何解决。有哪些方法可以解决内存泄露,对于stackoverflow和OOM问题如何解决
6、对于xml文件里面的标签对字符串,如果想判断是否少了其中一个,用那种数据结构?(首尾开闭怎么校验合法)
7、如果说一个银行开放了一个接口,非常多的人去并发访问,如何解决并发情况下的一个问题
8、如果B系统调用银行A的系统进行转账操作,有可能遇到一些问题失败了,那么如何解决。
9、有什么想问的??
字节
7.10 一面
1、互斥锁为什么成本比较高
2、hashtable和concurrenthashmap一定是线程安全的吗?如果hashtable获得了entryset,然后遍历entryset,并修改了,会不会产生线程安全问题?(是可以修改entryset的,会导致问题)
3、list链表如何实现线程安全,除了加锁以外。?了解一下fork和copyonWriteArrayList
4、如果一个表a字段是从1~100,b字段是从1~1000,c是从1~10000,选取那个列作为索引,为什么?如果需要查找a>一个数,b=一个数,c小于一个数,如何创建联合索引。
5、数据库和缓存的一致性问题,比如卖家修改或者删除了一个产品,然后客户去访问缓存这个产品还是存在的,然后买了,就会存在问题。如何解决。
6、缓存的雪崩里面加上的随机值如何选取?
7、双重检查锁定为什么静态变量定义为volatile的,因为不这样会重排序优化,进而另外一个线程使用的时候可能还没有初始化成功,看书上有。
8、线程的从用户态和核心态的具体过程是什么?
9、BIO,NIO,和异步io都了解哪些?各种io讲一下
10、布隆过滤器存在的问题,比如某个不在缓存的的东西查到了在,那怎么办。即也就是原本不属于黑名单,但是也可能判断属于黑名单。出现这种问题怎么办
二面
1、请Java中写出三种线程安全的单例模式。
2、设一行数据的大小是1k,在InnoDB中一个3层B+树最多大概可以存放多少行数数据?主键ID为bigint类型。
3、通过数组和链表,实现一个HashMap。不用考虑hash函数的实现。也就是底层是怎么实现的。
4、sychronized的底层是怎么实现的。
5、synchronized 的几种状态,以及各自的优缺点,适用场景。
6、问问题,团队干什么,主要是和游戏开发的各个环节相关,目的是为了提升游戏开发的效率 。
字节被捞:一面
1、list有哪几种实现?(ArrayList和LinkList),以及它们的区别?以及它们适合使用的场景??
2、hashmap 的底层是什么?
3、讲一下JVM里面的垃圾收集算法
4、讲一下可达性分析,以及里面的GC ROOTS
4.5、有没有JVM的调优经验,讲一下内存泄露。
5、了解哪些模式设计,自己写一个单例模式,讲解一下里面的instance为什么是volatile
6、为什么需要使用redis,为什么redis可以在高并发情况下使用?
7、数据库的运行的过程(结构)讲一下.
8、redis里面有哪些数据类型,讲一下sorted set的底层是什么?为什么底层要同时使用哈希表+跳表的结构
9、讲一下跳表的结构。
10、知道redis里面可以设置到期时间吗?底层是怎么实现的?
算法.m个有序数组,然后每个数组n个元素,然后将m个有序数组组合成一个有序数组。并计算时间复杂度。
最后的问题,面试官说临场的思考和变通达不到他的要求。 可能是遇到一个问题思考的比较慢,或者没有思路,但是本质上还是因为没有遇到过类似的问题吧。
腾讯别人的:
1、指针和引用的区别
2、处理2.5亿的数据,怎么样找出不重复的数据(使用2bitmap,00表示不存在,01表示唯一,10表示重复)
3、红黑树查找数据的复杂度
4、怎么实现数据库的一致性?
5、为什么要三次握手
6、怎么用linux查看cpu内存
美团一面8.27
先问的关于项目,介绍一下自己的项目,以及项目里面的你觉得难点。
讲一下专利和论文的内容。
讲一下订单表的主键和产品表的主键
订单的id怎么变换??
为什么使用redis,redis用来干什么??
讲一下缓存击穿,有哪些解决办法。
讲一下hashmap,讲一下java1.8版本时hashmap在并发情况下线程不安全的原因
讲一下数据库的b+树结构,以及b+树的特性(其实就是他的优缺点)
讲一下聚簇索引和非聚簇索引
讲一下JVM里面的数据区
算法题1:最小栈
算法题2:一个数组,让里面的数变成:奇数下标都是奇数或者偶数下标都是偶数。时间复杂度O(N),空间复杂度O(1)。
美团二面 9.3
1、讲一下你的两个专利
2、你做的项目,国内有哪些做得比较好的
3、讲一下你的两个论文
4、讲一下你的博客里面的文章,你会回复里面的评论吗?
5、讲一下线程池的实现
6、讲一下redis里面的底层的数据结构以及原理
7、讲一下跳表
8、讲一下NIO,AIO
9、讲一下CAS
10、讲一下synchronized和volatile的区别
11、讲一下输入 url之后都发生了什么事情?
12、你了解哪些状态码
13、get和post的区别?
14、cookie和session的区别,以及可能存在什么安全问题,怎么解决?
15、算法1:
1.把一个字符串转换成int输出。异常情况自行处理。实现一个方法。不可以使用Integer.parseInt(String)
int fun(String str)
“-21313” -21313
提示:Integr.MAX
16、算法2:把两个有序整型数组进行合并
拼多多一面
手写hashmap,要求使用开放地址法实现,然后就没了,,,
字节一面
1、缓存的作用
2、什么样的数据用到了缓存,说的库存,高并发情况下存在一致性问题
3、那么如何解决上述的数据一致性问题?(其实就是双写一致性问题,如何解决)
4、做过一些高并发情况下的压力测试吗?
5、为什么使用es作为搜索引擎
6、了解进程,线程和协程吗?
7、了解进程间通信的方式么?
8、死锁导致的原因,以及解决的方式?
9、创建线程有哪几种方式?优缺点讲一下?
10、如果让线程只能执行一定的时间,超出时间就认为线程出现异常(使用callable的get方法,添加超时参数)
11、countdownlatch和cyclicbarrier
12、生产者消费者模式的使用场景?
13、单例模式哪边用到了?在spring里面每个bean其实都是单例模式,我们在进行配置的时候,会有个参数scope,默认就是scope="singleton"
14、写一个单例模式
字节二面
1、redis里面存放哪些数据?
2、redis里面的key和value放的是什么?
可以举两个例子,因为缓存一般都是放在service层,可以举两个例子,比如查询类别的categoryservice以及查询产品信息的ProductService,都可以讲一下?
3、了解队列吗?MQ?不是很了解
4、了解binlog吗?知道binlog的底层吗?binlog里面具体记录是什么东西?
5、线程池存在的意义是什么?即好处是什么?
6、线程池的池子大小该怎么设计?和哪些因素有关?(CPU数量,具体什么关系?)
7、任务队列的长度大小怎么设计呢?和线程的数量有什么关系?
8、线程能否一直创建?
9、线程是否会被回收?
10、GC如何回收对象?
11、如果垃圾收集器和用户线程同时运行,那么如何进行回收?
12、你了解过哪些垃圾收集器,讲一下CMS垃圾收集器
13、写一道算法题,二叉树的公共祖先,要求递归直接返回结果,不使用全局变量
思杰
1、你做的项目中的难点(可以把redis里面的难点讲一下,以及对应的解决办法,比如数据库和缓存的一致性问题,如何统计uv?超卖问题,秒杀连接提前泄露问题)
2、c++和java的区别,
3、一道题目:
String a1="1234";
String a2="12"+"34";
System.out.println(a1==a2);
String str1="12";
String str2=str1+"34";
System.out.println(a1==str2);
返回什么?(true和false)
4、讲一下jvm的数据区
5、讲一下JVM的翻译到运行的过程
6、有没有经过性能测试,结果怎么样
7、有没有使用多线程,怎么用,有没有用到线程池?
8、进程和线程的区别,线程之间通信的方法?
9、关系型数据库和非关系型的区别
10、如果建立连接了,客户端掉线了,服务端不知道,怎么办
11、面向对象的特点(封装、继承、多态),你的理解是什么,多态的特点,哪些地方用到了多态
12、抽象类和接口的区别
13、Linux下如何修改root密码:首先切换到root账号,然后输入sudo passwd root
14、如何实现负载均衡
华为一面
1、一上来先来一道算法,自己写一个链表实现头部插入节点,尾部插入,删除节点,打印节点的功能(链表里面的值不重复)。
1.5、你做的项目中的难点(可以把redis里面的难点讲一下,以及对应的解决办法,比如数据库和缓存的一致性问题,如何统计uv?超卖问题,秒杀连接提前泄露问题)
2、你觉得做过最好的东西是什么?
3、了解分布式吗,你觉得分布式系统里里面最重要的是什么?
4、使用过多线程吗?使用多线程的时候有哪些注意点,多线程的同步措施有哪些?
华为二面
1、介绍一下你的项目
2、问了客户端和服务器之间的连接BIO,NIO,AIO
3、算法题
滴滴二面
手写leetcode300
写出来还让打印序列
手写生产者消费者模式