作者:ricardoooo
链接:https://www.nowcoder.com/discuss/405849?type=post&order=time&pos=&page=1&channel=&source_id=1
来源:牛客网
快手效率超高,一点开始面试,一二面连着,四点oc。
一面:
自我介绍 聊论文
垃圾回收算法
详细说一说CMS
类加载过程
初始化阶段是虚拟机执行类构造器 <clinit>() 方法的过程。
为啥要双亲加载
new一个对象 操作系统层面是怎么分配内存的
不会
写SQL的注意事项
(1)选取最适用的字段属性
(2)使用连接(JOIN)来代替子查询(Sub-Queries)
(3)使用联合(UNION)来代替手动创建的临时表
(4)事务 保持数据库里数据的一致性
redis会吗(不会)
Java写的多吗(python多 Java没有写太多)
spring呢(了解一点)
那就写个题吧:计算x,y两个数的和,需要花费(c∗x+c∗y)(c*x+c*y)(c∗x+c∗y)秒,怎么合理安排计算的顺序,可以使得花费的时间最短。(我太菜了 写了半天 写完还超时了)
二面:(二面面试官和蔼可亲循循善诱)
自我介绍 聊未来规划
写个题:判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。(力扣219题)
class Solution {//看笔记,散列表 public boolean containsNearbyDuplicate(int[] nums, int k) { Set<Integer> set=new HashSet<Integer>();//散列表,不能存储相同元素,而且存储元素顺序不是按照存入时的顺序。 for(int i=0;i<nums.length;i++)//题意是,j与i差值k以内的时候,俩数相等,就算true。所以,让HashSet里面元素小于等于k个,一旦当前元素在set里面存在,就说明k个下标以内,有相同的数出现了,则符合返回true的要求。如果当前set里面元素总数大于k,就退出最旧的元素,保证不超过k个 { if(set.contains(nums[i])) return true; set.add(nums[i]); if(set.size()>k)set.remove(nums[i-k]); } return false; } }
写个sql:课程名中包含‘计算机’的课程 且 成绩小于60分学生的 学号、姓名
数据库中JOIN是怎么实现的,IN呢
一个进程是怎么跑起来的(胡乱说了一堆)