我学了一年Java,拿到了 BAT 三家 offer

起步

实话说,刚决定转行的时候完全零基础一开始真的啥也不会,甚至不知道怎么去学习。的确,计算机资源很多,自学足够的但是完全不知道怎么去用去学习啊!
啥是 LeetCode?
啥是 GitHub?
啥是IDEA?
各种疑问,怎么操作啊?点哪个啊?身边没有人教啊。

有时候真的只是懂的人点两下的事情,自己搞要一下午。妈个鸡,第一个月真是完全浪费时间,差点原地放弃。

过程

战略上坚定信心: 既然那么多人都可以做程序员,甚至高中生都可以,别人可以我肯定也可以。
战术上制定计划: 培训班看视频我也看视频咯,对,就是各种视频。(现在想想自己甚至就是培训班出来的)
视频的好处是快速入门,犹如身边有老师手把手教,一步一步操作给你看。很重要一点,培训班老师上课非常认真,真的是面向高中生水平讲课。完全不用担心有卡顿,看不懂。记得某门课老师还在讲啥是二进制和排列组合。。

Java入门(4-7月):

我在阿里云大学上找了李兴华老师的Java就业班,看了部分,走完了 Java SE,Java EE,MYSQL,SSM,Git 的使用,跟着敲一遍,耗时大概3个月时间。学会了Java基本语法,懂得了什么是编辑器和Git,第一次知道了还有 github 这玩意,不容易啊。。

感觉入门视频选哪个老师的都可以,有推荐黑马和尚硅谷,我觉得看视频的主要好处是快准狠,把握重点。比自己啃完Java编程思想快多了。

狠补基础阶段(7-12月):

这一阶段,我觉得对于大家都没啥大问题,主要是时间问题。就当作本科期末考试来就行,有紧迫感,十天一门课过一遍非常足够了,然后看公开课视频,再做一下练习题(我做的是王道)。七八九三个月我过完了 计算机网络,操作系统,数据库原理,数据结构。(过完,有个大概印象,相当于期末考 60 分水平吧)。

其中,我觉得帮助很大的是七八月的时候,关注了 CyC 大佬 的github,当时惊为天人,这人是真的牛逼啊能写这么多,啥时候能看完???然后就没啥方法,直接硬核地从头开始看。后面证明半年其实也就能看完他github的所有内容了。 他的博客可以算是新手入门的最佳指南了。

第一次实习

12月的时候内心OS:当时真的是非常虚,感觉学的都是屠龙之术,也没怎么写过代码。真的菜到自己发慌。。

11月底,12月初的时候就开始尝试找日常实习了。感谢北邮人论坛,里面有非常多的实习机会。过程不表了,面经大同小异。最终入职了百度实习。一直实习到四月多。

刚进去实习的时候,Linux不会,Spring Boot不会,RPC不会,Redis不会,消息队列不会,微服务架构都没听过,Docker部署啥意思。。。

反正就是压力很大,还好一开始让看了一个月代码和熟悉环境。每天疯狂查看资料,买书看书看视频。回家过年的时候还把Zookeeper和Dubbo刷了一下。。

煽情段:只想说说找实习很看和面试官的缘分,遇到好人真的很难得。我有过一面就被面试官鄙视离场的心酸(新浪微博问了两个问题就让走了),也有过碰到师兄耐心指导(头条一面是师兄,很和善,但是三面主管挂了),也有过几个offer。很感激百度面试的两位面试官,有些问题都是他们自问自答就让我过了(后面进去实习的时候是说仿佛看到了他们当年自己很菜的样子。。。后面也是亦师亦友,非常感激!)

实习过程中的补充内容:

Redis:
教材: Redis实战
视频: 一站式学习Redis 从入门到高可用分布式实践

Zookeeper:
教材: 从Paxos到zookeeper分布式一致性原理与实践

Dubbo:
教材: 无
Spring Boot:
教材: Spring Boot实战
消息队列:
最近在看kafka,还没看完不好推荐。

春招

实习了三个月左右,年后回到学校就三月多了,各大厂也开始了暑期实习,我也跟随大流一起投简历。

薄弱点:前面可以看到因为基础太差,花费了大量时间看书和看视频,导致算法比较薄弱,只会一些非常基础的(200题不到,而且刷两题,忘一题)。所以春招开始的时候也是很紧张的,巩固基础和兼顾实习的工作,还有实验室要发小论文非常焦虑。

后悔点:实在是没有办法,算法真的不是一下子就能学会的,而且也有一些懒惰,期间经常玩乐,如果能把每天休息玩耍的时间用来刷算法题。。

结果:最终春招只投了腾讯和阿里,也运气比较好的拿到了offer,没有考太难的算法题。

一些补充
学习错觉:
上述感觉每一块内容我就列了一两行,实际上要吃透非常困难,比如高性能MySQL和Java虚拟机相关的内容我就看了好几遍。而且需要好多博客内容加以辅助理解。
我列的不可能覆盖所有的面试点,还需要保持好奇心多学习。比如大数据题思路,智力题,架构设计题等等,这些要说的内容太多了。保持好奇&互相学习!
学习方式:
我比较喜欢视频快速入门–>书籍慢慢深入–>再动手实操。
个人认为,学习不分方式,适合自己的就是好的,有些人比较歧视培训班出来的,我关注的某画仓鼠漫画的技术大佬就是培训班出来的,感觉非常强。
为什么考研看张宇视频和肖秀荣视频就不会受歧视呢?
搜索资源:
有些人学的不够快是找的资源方式不对。
多向师兄师姐打听
多加技术QQ群讨论
常刷 leetcode
面经

腾讯

面的CSIG下面的腾讯云,技术栈是Java,不过几乎不咋问Java。

一面(电话)(50分钟)

算法题:六七道
半小时项目介绍 & 问答
分布式相关:rpc原理、微服务架构
海量数据问题:套路题
计网:传输层、网络层(必须要非常熟,ping的原理,tcp的三次握手、四次挥手、拥塞控制。UDP的不可靠、一对一、一对多)
操作系统:虚拟内存、段式、页式、进程调度算法
数据一致性: 分布式数据一致性、缓存数据一致性
Java相关:线程池、HashMap、CopyOnWriteArrayList
Redis相关:复制原理、持久化原理
杂谈:最近看什么书,实习地点。

二面(视频面)(85分钟)

算法题:最长不重复字串
半小时钟项目介绍 & 问答
操作系统:Linux的namespace(不会)、进程线程、线程通信方式、进程通信方式
计算机网络:传输层和网络层,因为我项目做了链路层,也讲了一下。
Java相关: 线程池
数据库相关: 一条连表查询语句。数据库索引原理
海量数据问题: 套路题
杂谈:介绍了部门业务

三面(电话) (20分钟)

应该是大老板面试了,问的都很哲学:技术背景、学习方法、项目介绍
问了一些简单技术问题。主要考察逻辑表达和整体的素质。
杂谈:介绍了部门业务
hr(电话)(15分钟)
家庭情况
面腾讯原因,还有面其他公司么
兴趣爱好
业务介绍
口头offer

阿里

Java开发岗位。从3.7开始简历面,到4.30收到意向书。流程两个月,阿里终于上岸了。
在3.12之前面了阿里云、蚂蚁、菜鸟、数据产品的各种简历面(全部有录音)。

内推最终投的菜鸟。不得不说,投菜鸟真的需要非常好的心态。。嗯。每一面至少间隔两礼拜以上。。

各部门简历面

volatile的底层如何实现,怎么就能保住可见性了?
三个线程如何实现交替打印ABC
线程池有哪些创建方式和安全性问题
有哪些线程池的类型
线程池中LinkedBlockingQueue满了的话,线程会怎么样
线程池的底层原理和实现方法
线程之间的交互方式有哪些?有没有线程交互的封装类 (join)
算法:堆排序、栈实现队列、反转链表
Java锁机制,都说一下~
除了@ResponseBody,controller层如何标准返回给前端所要的数据类型?你会怎么实现?
异常捕获处理
Spring MVC的原理和流程
HashMap和ConcurrentHashMap哪个效率更高?为什么?
Redis的缓存淘汰策略有哪些?
Java内存模型说一下
mybatis如何进行类型转换
mybatis的xml有什么标签
MySQL锁机制
如何修改linux的文件权限
jvm的回收算法
你会怎么设计数据库表结构
数据库有哪些索引?
如何防止sql注入
抽象类和接口有什么不同
myql间歇锁的实现原理
future的底层实现异步原理
SpringBoot Starter原理
rpc原理
多个服务端上下线怎么感知
缓存和数据一致性,怎么处理。流式计算
多线程讲一下,FutureTask
Java和mysql的锁介绍,乐观锁和悲观锁
分布式一致性讲一讲
分布式锁的实现方式,zk实现和redis实现哪个比较好
多点登陆怎么实现
把乐观锁加在数据库上面,怎么实现
项目介绍
降级处理hystrix了解过么
两次点击,怎么防止重复下订单
ioc原理详细讲讲,源码看过么
静态代理和动态代理的区别
JUC说说你知道的东西
B+树的叶子节点

菜鸟

一面

Java内存模型
full gc怎么触发
gc算法
高吞吐量的话用哪种gc算法
ConcurrentHashMap和HashMap
JDK8的stream的操作
volatile原理
有参与过开源的项目
项目介绍
线程池原理,拒绝策略,核心线程数
1亿个手机号码,判断重复
是否有写过小工具
单元测试介绍一下,多模块依赖怎么单元测试。Mockito

二面

项目介绍
dubbo、netty介绍原理
限流算法
zk挂了怎么办
秒杀场景设计,应付突然的爆发流量
redis的热点key问题
redis的更新策略(先操作数据库还是先操作缓存)
分布式数据一致性
一致性哈希
消息队列原理介绍(不太会)
full gc问题,怎么排查
jvm的回收策略
ClassLoader原理和应用
注解的原理
数据库原理,数据库中间件,索引优化
aop原理和应用
大数据相关,MapReduce
机器学习有了解么?
Java的新技术,以及技术最新进展
Docker的原理

三面

全程项目
讨论了一下数据库表设计

四面

1、项目介绍
2、分布式事务
3、Java三大特性
4、数据库表设计
5、RPC原理
6、netty原理
7、降级策略和降级框架

HR
都是基础问题

百度

百度是去年找日常实习的面经,面了两个部门,整理了一下

信息中心

一面

算法:字符串反转 、 倒着打印链表(为什么用递归比用栈差?) 、 单例模式
线程start 、 run方法区别
可以不通过构造函数创建对象吗? object.clone() 反序列化
volatile关键字
Spring AOP原理(cglib 和 JDK的动态代理实现有什么区别?)
重写equals方法,为什么一定要重写hashcode方法?
字符串 == 比较。输出true还是false;
看了七八个程序,然后问输出什么?
HashMap 能不能存储 null 能,放在第一个格子里?concurrentHashMap 能不能存储 null?
分布式系统设计:现在有一个方法,可以给10台服务器调用,如何统计一天内10台电脑调用的次数和?
分布式锁的设计:每天早上8:00输出前一天的业务报表发到老板邮箱。如果现在有10台服务器,如果设计这个定时任务?
法1:分布式锁。
法2:通过外部发来一个http请求,传给ngnix,通过ngnix自动进行分配到某一台服务器上。

二面

你对哪方面知识比较自信?
HashMap初始容量多少?(16)为啥要设计初始为16?如果传入容量10会怎么样?(还是会构建16容量的);
知道什么异常?(说几个)
http的状态码说几个。403是什么状态?
String有什么方法?
list,set集合在iterator输出的时候能删去值吗?
SimpleDateFormat是线程安全的吗?
手写左连接。
聚合函数有哪些?

三面

算法题:数组A和数组B,求 A并B - A交B;(说了几种,好像不满意不是最优解)
算法题:矩阵搜索(说完之后问优化,没想到,提示二分搜索);
SSM的运作流程,说说你做的项目难点。
GET POST请求,url里面的参数
说说索引,如果对每一列都建索引有什么不好?
白盒测试、黑盒测试
Linux会吗?

凤巢

一面

算法题:手写堆排序
Spring IOC原理 AOP原理,如何利用AOP实现日志,写过吗?
Spring bean创建的方法 注解 @Service xml配置 @bean
Java反射原理?

SpringBoot 里面 @bean 解释一下
Java内存模型和运行时数据区
Spring 中事务@Tranctional,出现异常回滚是怎么实现的
数据库MVCC原理
乐观锁和悲观锁概念
悲观锁的实际例子。 select * from table for update …
乐观锁实际上有没有加锁?
用两个线程去操作数据库,乐观锁具体是什么实现的?演示一遍,画一画
数据库常用存储引擎,区别,锁范围。
写过单纯的非web项目的 Spring工程, 用main实现的吗?例子。
SSM 三层技术架构的总体流程
@component @service @controller 三个区别
mybatis中 # 和 $ 的区别?哪个会出现SQL注入?
JVM 新生代,老年代。survival是不是在任意时刻都只有一块有对象?
JVM 垃圾收集器了解哪些?

二面

算法题: 实现一个四则运算计算器(两个栈 + 优先级) , 冒泡排序
输入一个网站的全过程。从计算机网络到服务器内部技术实现流程。
日常怎么学习。

头条

去年找日常实习的面经,整理了一下。三面算法没写出来,挂了。

一面

算法题:二分搜索相关
概念题:解释 分布式、微服务、负载均衡、高可用
http是有状态还是无状态? TCP是有状态还是无状态?
客户端禁用cookie怎么办? 你说的实现方式安全吗?
SSL,http和https,https是有状态还是无状态?
String为什么设计成final不可变? 是怎么实现不可变的?
自己能实现一个不可变的类吗?
equals 和 hashcode 为什么要一起重写?如果不重写hashcode会出现什么问题?
hashmap插入的时候,哈希冲突解决? 查找的时候,哈希冲突怎么解决?
hashset是怎么实现的? hashmap是怎么实现hashset的?
多线程:并发和并行,原子类,CAS操作
mysql的索引:B+树底层实现?B树的底层实现?为什么要用B+树而不用B树?
最左前缀匹配具体是怎么实现查找的?最左前缀匹配用了B+树的哪些特性?
(a,b,c)联合索引,为什么不能单用(b),而一定要用(a,b)?B+树是怎么实现的?
什么是幻读,不可重复读?这些概念是在事务内还是事务外? 事务内
mysql怎么实现可重复读?设置了可重复读隔离级别底层是怎么实现的? (MVCC)
了解MVCC吗?怎么实现的?什么是快照读?快照读能读取到最新的吗?快照读和当前读的区别?
synchronized和reentrentlock哪个效率高?

二面

算法:实现一个缓存队列 ,二叉树的镜像
进程和线程的区别?内存管理说一下你的了解。进程调度算法。
为啥B+树最后叶子节点需要用链表相连接? 便于区间查找
TCP状态转换图,画一下。
操作系统I/O模型了解吗?epoll模型了解吗?
CopyOnWriteArrayList的相关特性?
ArrayList遍历的时候能删除元素吗? 删除的时候会报什么异常?

三面

算法题: (1)树的节点最大距离(2)区间覆盖 例 [1 3] [2 5] [3 6]能否覆盖[2 6]
Linux相关命令。
手写SQL,join

image

最新2020整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君样:756584822

你可能感兴趣的:(Java,数据库,分布式,java,编程语言,redis)