二本本科秋招无实习 | 硬扛上岸滴滴京东58科大讯飞复盘(上)

因为内容过多,分为上、中、下

首发我的微信公众号 : 【秃头和尚】 欢迎大家关注,微信公众号第一时间更新,还有面试脑图,极客时间优惠
如有一起交流,微信:914727235

本篇内容:8000+字

建议阅读时间:20 分钟,可以收藏反复阅读
二本本科秋招无实习 | 硬扛上岸滴滴京东58科大讯飞复盘(上)

你将获得:

  • 楼主二本本科无实习秋招 上岸滴滴京东 58 科大讯飞sp的干货经验
  • 楼主的复习范围(面试脑图)
  • 项目 low 怎么办?
  • 面试套路和技巧
  • 面试的心态
  • 面经和面试知识点的选择
  • 没有项目简历怎么写
  • 坎坷的 offer 故事
  • 滴滴干货面经

秋招之路复盘篇:

楼主的自我介绍:

楼主:二本本科、无实习经验、CS专业(但是个人觉得和非科班没啥区别,专业课也没有听…)

岗位:Java开发 / 后端开发

秋招之路:6.28——10.29,战线很长、6.28的第一封简历投出、10.29的面完滴滴三面暨秋招结束

方向:Java方向、只会SSM,其他Redis、中间件都不会

海投简历:180+吧,在牛客网的求职校招日程里( https://www.nowcoder.com/school/schedule ) ,牛客打钱(手动狗头????),有合适岗位的公司都投,每天投几个,自然而然就到180+,但是投简历也是一个苦力活,可能会投的自闭,前期建议投一些小公司练练面试(找些套路),后期就是大公司干,千万不要认为自己没有准备好就不投,等你准备好,黄花菜都凉了

Offer:滴滴、京东、科大讯飞sp、58集团、用友、锐捷网络、联行科技(新公司,国企电网占股 49%,薪资补助下来跟滴滴差不多)

我自己复习范围:(关注公众号回复 “脑图” 获取面试脑图,因为图片很大)

首先说明我是Java开发,我的范围只适合Java开发的,其他方向我不太了解,并且很多公司侧重点也不一样,比如字节不侧重语言,侧重操作系统四大金刚那些,也看公司吧,就像考不同的学校,会有不同的大纲,因为我是本科生,都比较侧重基础

Java:Java基础杂七杂八的(经典必考集合各种死磕源码吧)、多线程并发包各种死磕(我是死磕到源码),JVM死磕到细节、GC死磕到细节、JVM调优自己练习练习

框架:spring看看IOC和AOP的源码,但是太难太难了,就光那个方法名就特别长,前期就只知道个IOC和AOP是啥,后期就去看源码记大概一个原理过程,SpringMvc的流程,一些注解吧,Mybatis也是那些常考的点吧,缓存可以了解一下

数据库:数据库死磕,越深越好

操作系统和网络:背常考的、但是太深了,还是菜

设计模式:太多了记不住,我就是简单了解一下,叭叭给他说有啥用,Java里哪里用了xx模式

算法和数据结构:是我秋招开始补的、做完类型题进行总结,刷的就是LeetCode吧,我是先LeetCode,然后剑指offer,但是我也是有很多笔试直接挂的,除了遇到一些简单的,或者原题或者类似的题能A,一定要总结套题,类型题,一定总结一定总结一定总结

Redis:没有用过,但是就是记吧,那些常考的东西

IO模型、网络编程:比较菜了,不咋会

Linux:我也比较菜了,就会简单的命令

微服务、分布式、集群、中间件:我不了解,只知道有这个玩意

关于源码阅读:建立在自己会使用这个东西之后再去阅读源码,阅读常用的方法源码即可,第一次阅读源码建议看视频跟着阅读或者找博客,要不然比较生疏很难,,,,

我的项目很 low 怎么办??

low 不是你的问题,但是项目也可以“包装“啊,此“包装”非彼包装,举个例子吧:

Q:原项目有一个等级权限管理,就 3 层等级,数据库里设计好了就分 3 级,面试官就问到你了,你这个怎么做的。

A:自己一顿叭叭叭,

Q:面试官给你提了一个新需求,如果 3 层等级变了,变成了不一定多少层,你又怎么设计?

面试官给你说出了问题,不管你有没有回答出来,但是希望你面完之后,你对这个需求去重新设计一下,下一次面试自我介绍的时候说:

对于 xx 项目,我自己私下也有复盘,比如当需求变为 xxx 的时候,我考虑到这样设计:叭叭叭…。

这样你的 low 项目就变得不再 low 了,突出你的思考、你的想法

项目 low,无实习经验,还是个渣本,怎么拿到 offer 的

死磕基础,把很多源码看了,集合、JUC下的,面试就磕源码,操作系统和计算机网络背不住,就是手写吧。我拿的offer里,基本都是Java问的很多

关于套路和技巧

关于面试:面完问一下面试官对你的评价,找到自己的不足,另一方面也表现出自己强烈的学习欲望,反正我每次问面试评价都是:基础不错,就是动手实践不是很好,xxx,,,,如果感觉跟面试官聊得不错的,可以厚着脸皮要个微信加,反正我面滴滴三面要微信加,被面试官拒绝了,其他的也有成功的,哈哈哈哈哈

面试复盘:我一般线上面试会录屏或者录音,面完之后复盘总结,不单单是总结,你还要找到自己的不足去弥补,防止下一次再被问,这就是为什么我面经这么全的原因,不是我记性好,,,,,哈哈哈哈哈

关于投简历:写一个 Excel 或者 Word 记录投的公司,时间,投递方式,方便后期去查询结果

你的秋招时间这么长,你的心态如何呢?

秋招历时足足 4 个月,心态就像心电图一样,考研就像前期平稳,后期曲线上涨,因为自己也很乐观,在整个秋招之路里,也有人说话,自己也有几个网上的小伙伴群,每次就是说说话,互相激励对方,如果你是一个人的话,希望找几个小伙伴一起交流说说话,避免自闭低沉消极

关于众多知识点和面经你又是怎么选择去看的呢?

  1. 先看众多的知识点,广度先建立起来,遇到一个不会的知识点千万不要入坑掉进去,越陷越深
  2. 广度那么多,我看一遍记不住咋办,那就多看几遍,理解化记忆,找一些共同点进行记忆,手写记忆(秋招以来我大概写了 20+的单面 A4 纸吧),抱团组队,互相面试,互相讲解
  3. 广度拉起来之后,去看看深度,了解一下源码 xx 的,深度是你从众多面试者脱颖而出的法宝
  4. 面经看了一定的知识点之后再去看,作为查缺补漏之用,当你要准备面哪个公司之前,去看看这个公司的面经。

简历应该怎么写???

以下属于个人观点:

  1. 如果成绩好,写上你的 GPA 和排名
  2. 学校好肯定是个亮点
  3. 有博客(前提里面要有内容),有 GitHub 写上去
  4. 大厂实习是个亮点
  5. 项目负责模块最好用:用 xx 实现 xxx 解决了 xxx 问题,网上都说最好用 STAR 法则写,
  6. 计算机类的比赛加分项吧、ACM…
  7. 技能栈写你会的,精通、熟悉、了解 xxxx。

划重点:字不能错,大小写要写明白,Java 不是 java,我不知道这个单词到底是怎么拼,去官网瞧瞧他怎么写的。

如果以上你都没有???我好慌,我该怎么办???

把你复习的众多知识点堆在技能栈上,前提是你要会!会!会!不会就不要写(别给自己挖坑),比如:

看多线程知识点前:

  1. 了解多线程编程

看知识点后:

  1. 熟悉多线程编程及原理,内存屏障和 CPU 缓存、线程池应用及原理、synchronize 锁优化、JVM 内存模型、J.U.C并发编程包

再次重点提醒!!!一定要会才往上写!!!

实习、秋招、春招那点事

二本本科秋招无实习 | 硬扛上岸滴滴京东58科大讯飞复盘(上)

坎坷的offer故事:

贝壳:

  • 贝壳是第一家面完 全部流程的公司,当时认为能过,结果被挂了,不知道是什么原因,可能学校吧…,当时挺难过的。

京东:

  • 京东是8.13 14的一二面,面完之后一直没信,二面面试官也说我技术面过了提交了HRBP处理了,等到了8.29正式批给我发来线下面试邀请再次联系了二面面试官帮我反馈,当天晚上收到HRBP的oc,给我说锁定简历,给我发offer,问了几个hr的问题,9.5问hrbp什么时候发offer,hrbp问我要了身份证,
  • 之后一直持续到9月底,期间给HBRP发了四次微信询问offer的事,没有一次回我微信的,9.30二面面试官帮我反馈了我一直没有收到offer的情况,HR那边还是没有给反馈,国庆期间最终找到零售校招HR帮我查了一下我的信息,结果说没有查找我的信息,我给他说了我是提前批,HBRP问我要了身份证各种情况,说帮我对接一下HBRP,最后发现是把我的信息遗漏了,重新给我提交,
  • 10.10收到offer,等待京东这段时间,身边的人都说我凉了凉了,但是我还是坚持下来了,天天找各种途径去查,最终也是没有辜负自己的努力。

滴滴:

  • 滴滴是8.9投的简历,8.27笔试,邀约9.7的线下面试,但是我拒绝了,期间一直想去问问能不能申请线上面试,结果没有找到途径,
  • 9.12电话邀约了9.16一面,面完之后一直就没有信了,也没有拒信,官网状态还是面试流程中,然后一直给滴滴的邮箱发消息问面试结果、不下5次吧,都是石沉大海,在牛客找滴滴hr联系方式,也没有方式,在10.15的时候再次给滴滴邮箱和滴滴招聘公众号发消息,下午来了hr约二面了,我坚持的等到了,
  • 9.16-10.15 一个月的时间啊,这期间也基本每个人都告诉我是挂了,是不会有感谢信的,但是我还是坚持,同样我是在10.10收到的京东offer,但是我还是不甘心,还是去坚持问滴滴,就是要个结果,挂就去京东,过就继续面,再约面滴滴这期间,我同样面试了其他家为了面试查缺补漏吧,大大小小公司我都投,一直坚持到offer,给自己的目标就是面完滴滴三面就不面了,结束秋招,因为太累太累了。。。

总结:

面试就是把自己变成商品,不遗余力地推销给面试官,从而打动他的过程。

面试就像一场考试,给定了要考的范围,就是你能不能去坚持死磕他了,坚持死磕对了,加上一点运气+临场发挥就是胜利,祝各位加油!!!冲冲冲!!!就是干!!!


以下面经顺序为难易度排序及 offer 排序

滴滴(11.5 offer):线上面

8.9投简历:

8.27笔试:

9.16一面:80分钟左右

  1. Java集合说一说吧set ,list,map都问了一遍

  2. TreeSet和HashSet区别

    • 红黑树区别,有序无序
  3. hashmap和concurrenthashmap

  4. 线程池用过没,线程池的参数什么意思,每个都问了一遍

  5. 拒绝策略说一说

  6. synchroBlockQueue 到底可以存几个

  7. 锁用过没,l

    • 叭叭各种锁,
  8. 锁的什么方法你用过

    • tryLock
    • getHoldCount
  9. lock和tryLock区别

  10. lock的公平锁和非公平锁的怎么实现的(源码级别),不限于概念

  11. 类加载机制,不是类加载几个过程

  12. 如果多个类加载器加载同一个类,会出现什么情况

  13. tomcat的加载过程

  14. spring的生命周期,不是bean

  15. AOP

  16. ASM怎么实现cglib

  17. mybatis的插件用过没,

  18. 项目,

    ​ 背景:暂存数据,每一次把用户填写的数据暂存到数据库,暂存字段,0暂存,1正式存

    1. 如果实现a用户暂存数据1,b用户暂存数据2,实现a下次只能看见数据1,

      给car表加一个操作人字段,每次判断

    2. car表怎么设计的,

      id,车牌号,xxx,xx,暂存标记

    3. car表主键是什么

      主键id

    4. 主键id有什么规则吗?

      自增长

    5. 如果一个车牌号重复了,添加的时候怎么处理的

      每次填入的时候,都会在数据库里查询一下,判断是否有

    6. 如果4个人同时填入车牌号为888的车,怎么处理这个问题

      叭叭叭半天,给添加这个操作加锁,给判断重复车牌号方法加锁,

    7. 加锁为消化资源,你考虑一下在数据库进行操作吧

      叭叭了隔离级别,说了mysql默认隔离级别(可重复读)

      此时感觉不对了,没有get到点上了

    8. 隔离级别是解决什么问题的啊

      并发的时候问题,叭叭脏读等问题,

    9. 隔离级别什么时候才出来啊?

      不知道

      这个点没有回答好

  19. 数据库索引,索引类别

    唯一索引,聚簇索引,非聚簇索引

  20. 聚簇索引和非聚簇索引区别

  21. 二叉树和B+树的区别

    叭叭半天,没有get到点上

    1. B+树所有数据都在叶子节点,每次查找时间稳定
    2. 叶子节点都有指向下一个叶子节点的指针,范围查找比较方便
  22. 那如果把二叉树弄成,所有数据都存在叶子节点呢

    二叉树,如果删除的话,可能会变成线性树,时间复杂度变高

  23. 那如果平衡二叉树呢

    叭叭了,记得好像磁盘存储是用的b+树结构,索引是存在磁盘上的,用B+树会减少IO操作

  24. 怎么减少IO操作的

  25. 磁盘上所有文件都是B+树存储吗?

    文件夹的文件吧

  26. 磁盘上怎么存储这些数据的

  27. 你了解什么文件格式

    elf,a.out

  28. Linux操作系统了解过吗

    Linux不太了解过,用过Linux命令,进程同步

  29. Linux命令用过哪些

    cd,grep,pwd,mv,管道符,ps

  30. Linux根目录下有哪些文件夹

    etc,bin,我好像记得是,可能记不太清楚了

  31. 手撕翻转树,递归+递推

  32. 手撕最小路径和

10.17二面:50分钟左右

  1. 开源项目了解什么

  2. SpringBoot如何加载,源码

  3. 学习源码如何深入学习的

    叭叭叭ArrayList和LinkedList

  4. 如果去了解spring的启动过程,你怎么去了解

  5. tomcat启动的流程,要加载什么资源

  6. 项目中有哪些收获

  7. 项目中负责哪些点,技术方向吧

  8. 为什么用mvc架构

    面试官:其实这个mvc架构知识点还是很深的,要做好还是很难的

  9. 项目里Spring的事务是怎么管理的

    在方法上加注解

  10. 那为什么加注解可以实现,这个加载机制是怎么实现的,源码级别

  11. 为什么这个注解可以实现事务

  12. 那这个事务和数据库的事务有什么关联

    acid,事务隔离级别

  13. 那你们当时项目选技术是怎么思考,比如mybatis用的什么连接池

    用的c3p0

  14. 那你知道有其他的连接池,各自有什么区别

    c3p0、dbcp、druid三大连接池对比 - wawa3338的博客 - ****博客
    https://blog.****.net/wawa3338/article/details/81380662

    c3p0,dbcp与druid 三大连接池的区别 - 泡面之家 - ****博客
    https://blog.****.net/qq_34359363/article/details/72763491

    druid的功能强大、扩展好,

  15. 那你感觉连接池的功能都有什么

    1. 资源重用
    2. 更快的系统响应速度
    3. 新的资源分配手段
    4. 统一的连接管理,避免数据库连接泄漏
  16. 项目大概几个人,开发的人,源码包大小多少

  17. juc看过哪些,说AQS的机制

  18. Lock如果给线程分配锁的

    叭叭ReentrantLock

  19. 公平锁和非公平锁的区别,源码级别

    面试官补充:非公平锁就是抢占式的嘛

  20. 队列呢,了解什么

    ArrayBlockQueue,LinkedBlockQueue

  21. 各个队列使用场景

  22. queue里面都有什么方法

    offer,add,put

  23. 各个方法仔细讲讲,都会出现什么情况,添加的方法有什么,都有什么不同出队列呢,都有什么,跟offer对应的

  24. jvm看过什么、jvm常用命令

  25. jstat的参数,比如看一个线程的回收情况,怎么看、其他的命令呢

  26. 动手去编译JDK源码

  27. JVM的类加载流程,到解析到字节码

  28. 如何去验证版本的冲突的,比如jdk1.6到jdk1.7

  29. 初始化去怎么做的

  30. 实际运用中,ClassLoader都有了解什么

  31. 如何实现一个动态加载、实现哪些方法

    实现ClassLoader这个类

    首先加载这个字节码的字符流,然后有个loader方法吧,记不太清楚了

  32. 如何获取当前的ClassLoader

    getClassLoader方法

  33. 那可以保持建立多个ClassLoader吗?

    给他扯到了不同ClassLoader加载一个clas出来的类不一样

  34. 为什么加载器加载出来的类不一样

    不同加载器加载出来的类不一样,因为加载器不同啊

    面试官补充:因为每个加载器都有自己的隔离机制

  35. jvm内存模型

  36. 多线程如何实现主存同步的

    缓存一致性扯一扯,Java内存模型

  37. 那通过什么指令去实现其他工作内存无效的

    save,xx,忘记了

  38. Java里怎么实现缓存一致性的

    volatile、synchronized、lock、信号量、wait/notify

    面试官补充:信号量也是加锁实现的

  39. jvm的锁优化有什么

    说了synchronized,

  40. 那还有其他编译器的锁优化吗,比如锁粗化

    锁消除、、、、、

  41. 网络编程知道吗

  42. 创建socket的过程

  43. 从server端开始说吧,几个步骤

  44. accept操作之后,然后呢

接收客户端传过来的信息吧,

  1. 怎么解析这个信息呢,输出到什么流里呢

  2. 互联网这块网络编程用的也挺多的,比如rpc框架什么的

  3. Java里的IO这块你了解吗,区别

  4. BIO、NIO、AIO的对应类实现了解吗

  5. shell命令

  6. 进程通信方式

  7. Linux调度方式有什么

  8. Linux的缓存有几级

  9. jdbc连接mysql的几个步骤、为什么要加载驱动呢,原理是什么、PreparedStatement和Statement区别、返回结果如何查询

    准备 private static final URL、、、 也可以用properties从文件中读取。load()、

    1、首先注册驱动啊?怎么注册?反射啊,Class.forName(“xx.xx.xx.Driver”);底层怎么实现的?静态代码,DriverManager.registerDriver?启动的时候,会自动调用静态代码块的内容。

    2、接下来就是获取连接啊,怎么连接?远程连接(三次握手操作),连接放哪里?作为资源必须放池子里。这样能提高性能。常见的连接池有DBCP,C3P0,传说中最安全,性能最好的Druid(国产),而且还能监控。

    3、你总的有SQL语句吧,之后就是Statement编译那。这里会出现SQL注入的安全问题。在语句后面加"1=1"成立。所以我们采用预编译的方式,PreparedStatement。可以防止这种问题的出现。

    4、查完之后获取结果集。rs.getString().

    5、头疼的来了,释放资源。各种 if(xx != nu) {try{ xx.close();}catch{}} 不用担心JDK8 出来一个新特性,可以放在try-withresource中。还有各种异常可以采用通道的形式 XxxException | XxxException

    6、各种异常需要你放到一个try{}catch{}中,出问题你也不知道问题在哪里?

    麻烦吗?不用担心,我们可以封装成一个工具类,需要的时候调用工具类.getConnection();

    还是麻烦啊,可以用Spring框架为我们集成提供了jdbcTemplate,HibernaterTemplate。用模板代码消除了大量的样板代码。

遍历结果集,叭叭

10.29三面:36分钟左右

  1. 说说ArrayList的源码各种方法吧,add,remove一系列方法

  2. MySQL的聚簇索引

  3. 知道SQL注入吗、Java里怎么防止的呢

  4. Redis和数据库的一致性

  5. 了解过什么开源的东西吗

    Spring

  6. 那说说AOP吧

11.1 HR面

11.5 offer