武汉场
## 一面
ConcurrentHashMap的原理。
ARP协议,如果返回的主机不是本身也返回怎么办。
UDP和TCP的区别。使用场景
TCP适用于需要建立连接的可靠通信,UDP适用于不需要建立连接。
HTTP协议基于TCP, DNS协议使用UDP。
聚集索引和非聚集索引的区别。使用场景。
数据库锁有几种(行级锁和表级锁)
CAS会有什么问题。解决办法
ABA问题
Synchronized。
https的ssl。
项目里面的接口限流是怎么做的
做题:
一个m*n的方形中有多少个小长方形。
一个字符串中的最长回文子串(写代码)
## 二面
讲bean的加载过程。
mybatis的创建以及调用过程。
BeanFactory和FactoryBean的区别。
循环引用怎么解决
多线程的非公平锁,怎么实现非公平,AQS为什么这么实现。为什么不直接用list,然后notifyAll。
redis的基本数据类型。
zset的底层是什么实现的。跳跃表的查找,跳跃表如何插入一个数据。
ConcurrentHashMap,segment是怎么分的。1.7和1.8有什么区别。segment扩容的时候会变大吗?
ConcurrentHashMap获取size怎么获取的。modCount获取size大小的时候,是一直循环吗?(不是,通过判断modCount来获取size多次之后如果还是没有获取成功,需要锁住全表进行获取size大小)这个回答让面试官很满意,感觉有戏。
题目:
第一个是一个二维矩阵。1表示墙壁,0表示可以走。从起点到一个终点,判断是否可以到达。选择一个方向之后必须一直走到撞墙位置,然后换一个方向。终点必须是撞墙达到而不是路过。
第二个是找到一个节点的兄弟节点
```
x
x x
x -> x -> x
```
使用层次遍历,一个节点的下一个节点就是答案。
面试官要求使用递归的方式。记录父节点。
1、如果是一个节点的左子节点并且有右子节点。则答案是右子节点。
2、如果是一个节点的左子节点并且没有右子节点,或者是一个节点的右子节点,那么他的兄弟是父节点的兄弟节点的左子节点或者右子节点。
## 三面
三面被面试官怼,主要是不想招人吧,当天三面的java开发就三个人。怼我linux不行(问我根本没听过的命令),怼我项目不行(反怼一面面试官说基础可以,项目以后进公司有的是项目),反正就是凉凉。一共写了三个题目。有一个思路不够清晰,他最后告诉我巴拉巴拉,但是后来一想,他说的根本不对。
哎。hashtable基本不会。没有算法题,额外写了一个单例模式????感觉可能没了,早知道说不会了。我就想试着写一下。真是不该啊
1、https的请求过程
2、进程和线程
3、Java单例模式代码
4、剑指offer二维数组题
5、Java的权限控制
vivo提前批(Offer Get)
一面
- 今天天气挺好啊,温度不冷也不热
- 先自我介绍一下
- 怎么找的实习
- 我们先来点比较基础的吧,说说你会哪些数据结构
- hash,你知道hashmap吗,说说hashmap的数据结构,rehash的时候是怎么做的
- 其他hash算法,md5知道吗
加密算法
- 说说红黑树
- 红黑树删除和新增操作(具体怎么平衡的忘了不知道)
- 知道TreeMap吗,也是用红黑树实现的
了解,Java集合类
- 说说b+树
一颗多路平衡查找树
- bitmap知道吗
bitmap就是用一个bit存一个整数的数据结构。
- 跳表
- 还会其他数据结构吗,说说ArrayList,扩容怎么做的,复制数组调用的什么方法,(回答Arrays.copyOf),为什么调用这个方法而不自己写,(回答这是个本地方法,本地方法执行较快),为什么本地方法比较快
- 知道并发吗
程序交替不断运行
- 知道哪些线程安全类(没答上来,只答了一个)
回答那个HashMap和CopyOnWriteArrayList
- (其他的还说了线程池相关的类以及扯了线程池执行流程
- 你了解Java虚拟机吗
- 说说内存区域
- 你知道垃圾收集器吗
- 说说CMS
- 说说G1
- 还有知道其他的吗,我说Serial,摇头,脑抽说了Z1(实际应该是ZGC,其实只瞄了一眼,我啥都说不出)
- CMS和G1该怎么选择
- 说说实习,你这上面写的比较笼统,具体是做什么
- 系统访问量有多大
- 有遇到什么bug吗,怎么解决的
TP-LINK(Offer Get)
一面
- 自我介绍一下吧
- 说说你的实习
- 实习过程中有遇到什么难点
- 两台机器为什么ping不通
- 说说ssm框架
- Java异常机制是什么
- 说说wait/notify
- 排序算法的稳定性是什么,常用排序算法的稳定性
- 为什么不读研
- 有没有其他offer
- 为什么拒vivo,期望薪资多少
- 觉得自己编码能力怎么样
二面
- 先来个自我介绍
- UDP怎么实现可靠传输
- 赛马问题。有25匹马,每次只能五五一组比赛,且比赛只有排名,需要经过几轮比赛选出前三名
- 用Java异常判断一个正整数n是不是3的幂
- 给20个球,一个天平,其中有一个球比其他的球要轻一点,另外的球重量相等,需要称多少次才能找出这个轻球
终面
- 说说在教研室的项目
(a:我是本科生 - 为什么不读研
- 根据面试记录,你拒了vivo offer,说薪资太低了
- 父母做什么的
- 你拿到了美团的转正offer吗
- 问了两个实习做的东西
- 之前面试有个题,使用Java异常判断一个数是不是3的幂,回去后有看吗
- 给一个字符串,寻找一个最小子字符串,使得子字符串有序后整个字符串就有序了
- 成绩单有带吗
OPPO提前批(二面挂)
一面
- 自我介绍
- 为什么不读研
- Java数据类型有哪些,分别有多少个字节
| 四类 | 八种 | 字节数 | 数据表示范围 |
|---|---|---|---|
| 整型 | byte | 1 | -128~127 |
| short | 2 | -32768~32767 | |
| int | 4 | -2147483648~2147483647 | |
| long | 8 | -2^63^~2^63^-1 | |
| 浮点型 | float | 4 | -3.403E38~3.403E38 |
| double | 8 | -1.798E308~1.798E308 | |
| 字符型 | char | 2 | 表示一个字符,如('a','A','0','家') |
| 布尔型 | boolean | 1 | 只有两个值true与false |
- Java面向对象特性
封装多态继承
- 多态是什么
父类引用指向子类对象,调用子类重写方法
- 重载和重写的区别
- 线程状态有哪些
- sleep和wait的区别
sleep 不会释放锁,睡眠一段时间,wait
- 创建线程的方式
继承Thread类,重写Runable接口,使用线程池
- 线程池怎么创建
- 给一个list,怎么排序
- 说说对jvm的理解
- hashmap的实现原理
- 动态代理有哪些实现
- 使用spring mvc实现一个服务,在浏览器输入这个网址,发生了什么
- spring mvc的处理流程
- 用过Redis吗
- 说说xx(实习的一个小需求)
- 用了哪些框架
- 给一个表,找出不同的的数据的量
- 同样那个表,删除重复数据
-
有什么想问我的
二面
- 自我介绍
- 讲一下实习经历
- xx,HTTP协议里面是怎么表示xx的
- 在做xx的过程中,需要注意哪些问题
- 给一个大的数据集,比如千万级,怎么做快速搜索
- Spring中有什么优化速度的配置
- MyBatis中有什么可以优化速度的配置
- 随便用什么使用SQL,怎么提升速度
- SQL查询慢,怎么优化
- 索引怎么建
- 用过什么设计模式
-
有什么想问的
大疆创新(一面挂)
一面
- 自我介绍
- 实习的时候最能证明自己的一件事
- 前后端怎么联调的
- git fetch和git pull的区别
- git fetch获取到的数据是放在哪里的
- Linux中的常用命令有哪些
回答查看硬件性能的比较好
- top怎么查看CPU中使用率最高的进程
- MySQL的默认端口
3306
- MySQL的存储引擎有哪些
InnoDB 和MySIAM
- 空间利用率MySIAM和InnoDB谁更高
- MySQL中怎么判断一个浮点数是double和float
- char和varchar的区别
char的长度是固定的,varchar的长度是
- Redis的数据结构
- 为什么要用Spring
- 看过Spring源码吗
- 怎么判断对象相等
重写并使用equals方法
- hashCode()相等,equals()相等吗
不一定相等
- 面向对象的重载说说看呢
- sychronized的使用方式
- JVM的组成
- OOM会发生在哪些地方
- NIO知道吗
- 负载均衡算法
- HTTP的报文结构
请求和响应
- Header头里有哪些字段
- content-type有哪些类型
- HTTPS的建立连接过程
- 你有什么问题吗
- 后面面试官问我能不能接受go语言,有其他offer或者面试在流程中吗,能不能实习,意向工作城市
第四范式(一面挂)
一面
- Java的内存区域有哪些
- Java的同步机制有哪些
- sychronized锁优化
- 手写一个快排
- 1亿个数字,找top 100
- 100层楼,只有两个鸡蛋,找出鸡蛋会在哪一层楼被摔碎
虎牙(一面挂)
一面
- 一个Java类从编译到执行所经历的过程
- Java类加载的过程
- Java的内存区域
- Java的同步方式
- MySIAM和InnoDB的区别
- 事务有哪几种特性
原子性,持久性,一致性,隔离性
- 隔离性你是怎么理解的
- MySQL默认的隔离级别
面试官:“讲讲mysql有几个事务隔离级别?”
你:“读未提交,读已提交,可重复读,串行化四个!默认是可重复读”
- SQL优化知道吗
- 那分库分表、主从复制呢
- Redis知道吗
- 一个TCP上最多允许有多少个HTTP
- 推送到日志中心是怎么做的
- 微服务框架知道哪些
- 怎么设计一个有权重的负载均衡算法
- 你还有什么问题要问的
蚂蚁金服(一面挂)
一面
- 自我介绍
- 实习相关
- RPC是怎么样提供服务的
- 序列化方式
- 说一说Map和Set
- 说说HashMap
- Java的内存模型
- RPC调用在网络中的过程
- 有什么想问我的
拼多多(一面挂)
一面
- 什么情况下会GC
- 说说young gc
- 循环引用会不会被回收掉
- 聊之前笔试做过的两个算法题
- 写一个sql
网易(挂)
一面
- 自我介绍
- 说说你的实习
- Spring AOP的实现原理
- Redis里面的数据类型有哪些,底层的xxx是怎样实现的
- Redis Cluster里面的槽有多少个
- 知道一致性Hash吗
- 如果节点个数比较少的情况下,怎么优化
- 平时哪些集合类使用得多,说说HashMap的扩容过程
- HashMap使用的时候经常CPU使用率很高,知道原因吗
- 说说MyBatis里面的设计模式
- 说说你用过的设计模式
- 单例模式有哪些使用方式
- 线程池在什么情况下使用
- 单线程可以使用线程池吗
- 说说SQL里面的索引
- 为什么使用B+树而不是B树
B+树数据都在叶子节点,可以放下更多的索引,减少IO次数
- 建索引需要注意哪些问题
- 数据库的事务是怎么实现的
- Spring事务的实现原理
- 你有什么想问我的
二面
- 自我介绍
- 说说你的实习做了什么
- xx怎么做的
- 知道xx怎么做的吗
- 是怎么解决线上问题的
- 灰度怎么做的
- 自己实现一个ABtest应该怎么做
- 实现一个LRU
HR
- 为什么投网易
- 说说你印象最深的一件事
- 说说你最有成就感的一件事
- 实习过程中遇到的最大的困难是什么
- 平时学习是怎么学的
- 网易和美团Offer该怎么选
猿辅导(二面挂)
一面(1h)
- 先自我介绍一下
- 说一下你的实习经历
- xx、xx怎么做的
- 先说说线程池吧
- 不同场景下该怎么配置线程池
- Java中的同步怎么做的
- 什么情况下用volatile
需要保证内存可见性时使用。
- 来一个数据库查找操作,搜索出大于100人的年级有哪些
- 数据库join操作有哪些(回答了inner join、left join、right join,面试官说还有,不知道了。。)
- MySQL的InnoDB的索引有哪些,怎么实现的
- 为什么用B+树而不用B树呢
-
撕两个编程题
- 二叉查找树寻找第k大的值
- 某个有规律的(类似于递增规律)二维数组找某个特定值
- 有啥想问我的
二面
- 自我介绍
- 进程有哪些状态
- 进程和线程的区别
- 进程调度算法
- 进程是怎么调度的
-
撕编程题
- 反转索引为n-m间的链表
字节跳动(二面挂)
一面
- HTTPS**交换过程
- 幂等性是什么
多次操作和一次操作结果相同
- 进程间通信有哪些
- 撕算法题
- 数据库索引用的数据结构
- B树和B+树的区别
二面
- 自我介绍
- 说一个难一点的项目
- xx是怎么提高效率的
- xx是的原理
- 说说你对IoC的理解,有什么好处
- 抽象工厂和IoC的区别
- Pigeon和其他RPC序列化方式有什么不同
- RPC协议更新,该怎么更新服务
- 什么情况下会发生OOM
- 怎么判断发生了OOM
- 发生了OOM该怎么做
- 撕算法题
- 大数量的URL,找出出现次数最多的Top 10
一面:
三次面试的小哥哥都是挺友好的,这也是我能平静下来的原因(一开始的时候是真的紧张呀)
一上来就自我介绍,然后介绍自己的项目。bulabulabula 我做了XXX系统!!我完成了xxx功能!
介绍完开始问问题:
问:你之前做的安卓,安卓和Java有什么区别或者相同的地方吗?你的SDK多少版本?JDK呢?
答:安卓开发用的是SDK,就像Java的JDK一样,可以自己编写,相互调用实现。
问:JVM内存模型了解过吗?介绍一下?
答:java内存模型分为堆内存和栈内存,栈内存的话保存一些方法传递的参数和一些局部变量。堆内存的话分为新生代和老年代,新生代又分为eden区和两个survivor区 bulabulabula。。
问:新生代和老年代可以转换吗?
答:可以转换,一般来说new一个变量的话都是进入新生代的eden区,但是会有动态对象年龄判定 和长期存活的对象就会进入老年代。继续bulabulabula
问:这些内存里面的垃圾怎么回收?
答:有引用计数和可达性分析法。回收算法的话就有垃圾收集算法:标记-清除、复制、标记-整理、分代收集
问:怎么判断是垃圾?GCroot可以为哪些?
答:a. java虚拟机栈(栈帧中的本地变量表)中的引用的对象。
b.方法区中的类静态属性引用的对象。
c.方法区中的常量引用的对象。
d.本地方法栈中JNI本地方法的引用对象。
问:垃圾回收器了解过吗?介绍一下G1?
答:所有的回收算法都会存在STW问题,G1的话就是对这个问题进行优化,并行回收,用户很难感知。bulabulabula
数据结构和Java基础知识
问:数据结构了解过吗?hashmap底层是怎么实现的?
答:hashmap的话是数组+链表实现的,通过hash散列化来决定进哪一个数组,如果有的话就“挂”在链表的最后面。bulabulabula
问:hashcode一样怎么办?hashcode和equals的区别?
答:通过equals方法判断真正的内容。 hashcode和equals的关系如下:
1、如果两个对象相等(equals),那么他们一定有相同的哈希值(hash code)。
2、如果两个对象的哈希值相等,那么这两个对象有可能相等也有可能不相等。(需要再通过equals来判断)
问:equals和==的区别?我要比较内容呢?
答:equals:是用来比较两个对象内部的内容是否相等的。
==:是用来判断两个对象的地址是否相同,即是否是指相同一个对象。
如果没有重写equals时,是直接用==判断的
如果是基本类型和基本型封装,则仍然为比较内容。
问:下面我们来做几道题目吧?
答:(内心OS 来了来了来了!!!!)好。
题目一:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
当时我真的是很慌张!脑子里想的是我会做我会做!可是却是一片空白。深呼吸一下。用递归做了出来。 又问我除了递归怎么做?“那就遍历,每次都比较就行”
“那为什么不用遍历用递归呢?”“递归写起来简单啊!”
题目二
给定一个二叉树,原地将它展开为链表。
leetcode原题。
题目三
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
秒了。
一面结束,说叫我别退,还有一个人。
“好”
====================================================================================
二面:
二面的小哥哥不懂Java 疯狂在问操作系统和底层的实现。。。
问:java导包的过程是怎么样的?
答:import啊(怀疑自己脑残。章口就莱??)
问:java的jar包是源代码吗?
答:jar包就是一堆.class文件
问:那别人的包你导入,你们的字节码会怎么样?互相影响吗?
答:不!知!道!(哭了,饶了我这个小菜鸡吧)
问:java的编译是怎么一个过程呢?
答:java编译器的话经过四个步骤,词义分析,语义分析,语法分析和代码生成。
问:java 的虚函数是怎么样的?
答:java里面是抽象函数和接口,然后bulabulabula介绍异同;
问:java内存模型是怎么样的?
答:上同。
问:java内存空间是怎么分配的?
答:
一, 对象优先在新生代Eden区分配
二, 大对象直接进入老年代
三, 长期存活对象将进入老年代(虚拟机设计了一个对象年龄计数器,该阀值默认为15)
四, 动态对象年龄判定 如果Survivor区中相同年龄所有对象大小的总和大于Survivor区空间的一半,年龄大于或等于该年龄的对象在Minor GC时将复制至老年代
五, 空间分配担保 当Minor GC时如果存活对象过多,无法完全放入Survivor区,就会向老年代借用内存存放对象,以完成Minor GC
问:我看你数据库用的比较多,介绍一下mysql的底层实现?
答:底层的话是用b+树实现的,它的优点是能够定位到数据点和范围查询。修改key与子树的组织逻辑,将索引访问都落到叶子节点并 按顺序将叶子节点串起来(方便范围查询) 等等。。。
问:TCP和UDP有什么区别?
答:
TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的
TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
TCP面向的是字节流的服务,UDP面向的是报文的服务。
问:我们做题吧?
答:(内心OS 来了来了来了!!!!)好。
二面的话就做了一道题目,可能是小哥哥比较急着吃饭吧。QAQ
问:合并两个有序链表。递归和非递归的实现。
答:(还好还好)秒了。
然后问了我一些基本情况,江苏的吧?问我有没有什么问他的?我:“emmmm 我都忘了我问的啥了”
老哥听完来了句“那就来吧”
内心温暖度maxXXXXXXXXX
问了下上司,要不要三面,上司在吃晚饭,决定晚上八点继续
=======================================================
三面的话就聊人生、聊项目
让我写了一下之前做的socket传输功能服务器端和客户端大概的方法、代码。
然后问了一个架构题目,好像是微博热门怎么查之类的。
没怎么听懂他的意思,Q_Q
应该就是一个TopK问题吧。
============================================
然后就让我等HR通知了。
5555
总体感觉的话还是要学的东西还挺多的,要不然以后心态还是会崩,会做的题差点因为紧张而得不到正常发挥。