3.8号阿里笔试
第一题 缺失的卡片 一组有序的数组,3 4 6 8 10 。让求从第一个数开始,第K没有出现的整数 (AC)
第二题 小明有一个工厂,工厂有m个任务,然后有n个员工,需要完成p的收益。其中每个任务需要的人数为a[i], 每个任务的收益为b[i],要求能达到收益p的完成任务的方式
可以不全部完成任务 (AC)
第二题 小明有一个工厂,工厂有m个任务,然后有n个员工,需要完成p的收益。其中每个任务需要的人数为a[i], 每个任务的收益为b[i],要求能达到收益p的完成任务的方式
可以不全部完成任务 (AC)
3.10号 阿里面试一面,视频面1.5h
说一下java基础,hashmap了解吗,时间复杂度是多少,底层是什么数据结构。 Java并发,线程创建,多线程的四种实现
Redis数据结构,redis跳表是怎么实现的。
Mysql底层数据结构,b树和b+树的区别
B+树怎么实现的,是二叉树嘛
BST Trie树 红黑树的了解
如果一个b+树的节点存不下了会怎么办,分裂
进程间通信方式
Word单词拼写检错你怎么实现,hashmap存储所有单词然后比较
字典树怎么实现的
如何读取多个文件,并统计单词出现的频率
Java进程和mysql进程如何通讯
算法题是
反转链表迭代法和递归法
如何实现两个大数相加
(通过)
乐观锁和悲观锁,
java里面final finally finalize区别,
zookeeper,
arraylist和linkedlist区别,
hashmap和treemap的区别,
为什么用红黑树实现treemap,
java里面的反射原理。
算法题是实现斐波那契数列,
找到数组中最小的k个数
(还在流程中,面试官让等通知)
3.13号美团笔试
1.转置矩阵
2.在字符串中查找所有数字,然后按从小到大顺序返回。
3.求链表中连续K个数的众数
4.蚂蚁上树问题,二叉树,每个节点可以容纳的蚂蚁给定,但是不能在相连的节点放蚂蚁。
5.求出高度下降的路径,去某地旅游,没个经典海拔高度,按照海拔高度下降的顺序旅游,求出路径。
(AC123)
3.14号字节笔试
1.安排圆形排列的座位,st到最近的人的距离最大
2.灯泡开关问题,圆形排列的开关,一个状态变化,引起相邻两个的状态变化
3.棋盘问题,设计一个棋盘,看是否有唯一解,可以放是“。”不可以放是“×”,放入1*2或2*1的棋子,如果可以放满,且方法唯一,返回true,反之false。
4.病毒问题,病毒随机变异,子代可能致命。
渣了
3.16号字节面试
一面:
1. TCP/IP协议包括几层,应用层的主要协议,ICMP协议是第几层协议。简述CMP协议。
2.TCP的粘包是什么?Tcp如何保证可靠性的?
3.java对象的创建方法?
4.读锁和写锁是什么?
5.死锁的原因和防止死锁。
6.linux的ping命令。
7.访问一个页面的过程,https是对称加密还是非对称加密?
8.linux进程间如何通讯的?
算法题:删除二叉树的右指针,返回二叉树前序遍历顺序组成的链表。
2.TCP的粘包是什么?Tcp如何保证可靠性的?
3.java对象的创建方法?
4.读锁和写锁是什么?
5.死锁的原因和防止死锁。
6.linux的ping命令。
7.访问一个页面的过程,https是对称加密还是非对称加密?
8.linux进程间如何通讯的?
算法题:删除二叉树的右指针,返回二叉树前序遍历顺序组成的链表。
(通过,面试官觉得简历不错)
二面:
二面:
主要问的项目,感觉不错
二面:
1.cookie与session的区别,java如何创建一个session对象
2.线程与线程池的区别,如何创建一个线程池,线程池的应用场景。
3.http协议的原理,http和https的区别,https如何实现加密的
4.c++中智能指针了解吗?虚函数和纯虚函数了解吗?
算法题:
1.矩阵旋转90°。
(但是挂了,面试官说基础不好,┭┮﹏┭┮,C++不会啊,我只是写了个学过C++,想面JAVA,结果C++被问蒙了。
1.cookie与session的区别,java如何创建一个session对象
2.线程与线程池的区别,如何创建一个线程池,线程池的应用场景。
3.http协议的原理,http和https的区别,https如何实现加密的
4.c++中智能指针了解吗?虚函数和纯虚函数了解吗?
算法题:
1.矩阵旋转90°。
(但是挂了,面试官说基础不好,┭┮﹏┭┮,C++不会啊,我只是写了个学过C++,想面JAVA,结果C++被问蒙了。
之后被推到了字节另一个部门,约了下周面试。)
3.18号 美团面试一面
1.设计模式,单例模式、工厂模式、代理模式。简述代理模式的原理。代理模式就是客户端不能直接访问一个对象,需要一个中介来帮忙完成任务,这个中介就是代理对象。由于某些原因需要给某对象提供一个代理以控制对该对象的访问,这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。主要优点:保护目标对象,代理对象可以扩展目标对象的功能。将客户端与目标对象分离,一定程度上降低了系统的耦合度,增加了程序的可扩展性。
2.JVM垃圾回收算法,复制算法,标记清除算法。 老年代的GC算法,串行GC和并行GC,具体流程。 进行JVM参数调整的目的是什么?通过分配合理的年轻代和老年代区间,减少FullGC次数。
3.给定一个2亿数字的数组,如何判定某个数是否在集合中,假设数组中没有重复元素,且数字大小在5亿以内。 HashSet可以,还有一种方法
4.列举排序算法。快速排序和堆排序的实现原理、时间复杂度。
5.乐观锁和悲观锁。高并发的场景下用哪种。
6.死锁,死锁的原因,如何防止死锁。
7.mysql的索引,B+树的原理,聚簇索引和非聚簇索引的区别。
8.java线程池,常见的参数,7个,线程池核心线程大小,线程池最大线程数量,空闲线程存货时间。工作队列,线程池为什么使用阻塞队列,而不是用非阻塞队列?线程池如何处理任务?当一个任务被提交到线程池以后,首先会找有没有空闲存活线程,如果有则直接将任务交给这个空闲线程来执行,如果没有则会缓存到工作队列,如果工作队列满了,才会创建一个新线程。然后从工作队列的头部取出一个任务交给新线程处理,而将刚提交的任务放入工作队列的尾部。线程池不会无限制的去创建新的线程。
算法题:删除链表的倒数第k个节点。
(应该是过了)
2.JVM垃圾回收算法,复制算法,标记清除算法。 老年代的GC算法,串行GC和并行GC,具体流程。 进行JVM参数调整的目的是什么?通过分配合理的年轻代和老年代区间,减少FullGC次数。
3.给定一个2亿数字的数组,如何判定某个数是否在集合中,假设数组中没有重复元素,且数字大小在5亿以内。 HashSet可以,还有一种方法
4.列举排序算法。快速排序和堆排序的实现原理、时间复杂度。
5.乐观锁和悲观锁。高并发的场景下用哪种。
6.死锁,死锁的原因,如何防止死锁。
7.mysql的索引,B+树的原理,聚簇索引和非聚簇索引的区别。
8.java线程池,常见的参数,7个,线程池核心线程大小,线程池最大线程数量,空闲线程存货时间。工作队列,线程池为什么使用阻塞队列,而不是用非阻塞队列?线程池如何处理任务?当一个任务被提交到线程池以后,首先会找有没有空闲存活线程,如果有则直接将任务交给这个空闲线程来执行,如果没有则会缓存到工作队列,如果工作队列满了,才会创建一个新线程。然后从工作队列的头部取出一个任务交给新线程处理,而将刚提交的任务放入工作队列的尾部。线程池不会无限制的去创建新的线程。
算法题:删除链表的倒数第k个节点。
(应该是过了)
3.21号18:00 百度笔试
15道单选+5道不定项,做的有点慢了,后面时间不够。
第一题是一个动态规划,第三题是爬楼梯的进阶,第二题放弃了。
3.21号20:00 腾讯笔试
血坑,百度提前十分钟交卷,结果腾讯的进去就结束了,应该是系统的bug。我就点了开始做题,然后就考试结束。一秒钟都不到,之前有过一次误点,但是提示考试前五分钟不能交卷。
慌得一批,找到了牛客客服电话(笔试通知里会有),然后打了电话加了牛客客服微信,帮忙处理,但是处理完也已经半小时过去了,😭,我想了一下还不如这次不做了,牛客客服说可以参加下一次笔试。
总结一下经验吧,两次笔试还是不要无缝衔接,为了腾讯我百度的提前交卷,腾讯的没做,很影响心态。
好好准备明后天面试了
3.22号15:00 快手一面
1. java线程池7个参数,包括每个参数具体是干什么的。
- corePoolSize线程池核心线程大小:线程池中会维护一个最小的线程数量,即使这些线程处理空闲的状态,他们也不会被销毁,除非设置了allowCoreThreadTimeOut。这里的最小线程数量就是corePoolSize。
- maimumPoolSize线程池最大线程数量:一个任务呗提交到线程池以后,首先会找有没有空闲存活线程,如果有救直接将任务交给这个空闲线程来执行,如果没有则会缓存到工作队列,如果工作队列满了,才会创建一个新的线程,然后从工作队列的头部取出一个任务交由新的线程来处理,而将提交的任务加入工作队列尾部,线程池不会无限制的创建新线程。他会有一个最大线程数量的限制,这个数量由maximumPoolSize指定。
- keepAliveTime空闲线程存活时间:一个线程如果处于空闲状态,并且当前的线程数量大于corePoolSize,那么在指定时间后,这个空闲线程会被销毁,这里的指定时间就是keepAliveTime来设定。
- unit空闲线程存活时间单位:keepAliveTime的计量单位。
- workQueue工作队列:新的任务提交后,会先进入此工作队列中,任务调度时再从队列中取出任务。Jdk中提供了四种工作队列。 ①ArrayBlockingQueue,基于数组的有界阻塞队列,按FIFO排序,新任务进来后,会放到该队列的队尾,有界的数组可以防止资源耗尽问题。当线程池中线程数量达到corePoolSize后,再有新任务进来,则会将任务放入该队列的队尾,等待被调度,如果队列已经是满的,则创建一个新线程,如果线程数量已经达到maxPoolSize,则会执行拒绝策略。②LinkedBlockingQueue,基于链表的无界阻塞队列(其实最大容量为Integer,MAX),按照FIFO排序,由于该队列的近似无界性,当线程池中的线程数量达到corePoolSize后,再有新任务进来,会一直存入该队列,而不会创建新线程直到maxPoolSize,因此使用该队列时,参数maxPoolSize不起作用。③SychronousQueue:一个不缓存任务的阻塞队列,生产者放入一个任务必须等到消费者取出这个任务,也就是说新任务进来时,不会缓存,而是直接调度执行该任务,如果没有可用线程,就创建新线程,如果线程数量达到maxPoolSize,则执行拒绝策略。④PriorityBlockingQueue,具有优先级的无界阻塞队列,优先级通过参数Comparator实现。
- threadFactory线程工厂,创建一个新线程时使用的工厂,可以用来设定线程名,是否为daemon线程等
- handler拒绝策略:当工作队列中的任务已经达到最大限制,并且线程池中的线程数量也达到了最大限制,这时如果有新任务提交进来,该如何处理呢。这里的拒绝策略,就是要解决这个问题的,jdk中提供了4种拒绝策略:①CallerRunsPolicy,该策略下,在调用线程中直接执行被拒绝任务的run方法,除非线程池已经shutdown,则直接抛弃任务。②AbortPolicy:更改策略下,直接丢弃任务,并抛出RejectedExecutionException异常。③DiscardPolicy,该策略下,直接丢弃任务,什么都不做。④DiscardOldestPolicy,该策略下,抛弃最先进入队列的任务,然后尝试把这次拒绝的任务放入队列。
- 延伸问题:①什么是工厂模式。②什么是阻塞队列,非阻塞队列。
2. java创建线程的方式
3. redis怎么实现分布式锁
4.CAS与Sychronized的优缺点,CAS的主要问题,Sychronized的锁升级
5.Spring动态代理的两种模式,基于JDK的动态代理是怎么实现的。
6.消息中间件了解哪些?RabbitMQ的优缺点,如何保证RabbitMQ的高可用
7.如何保证RabbitMQ的顺序性。
8.B+树的优点?要求说全,只在叶子结点存储数据,同级节点之间添加指针,支持范围查找,树的深度比较低查找速率比较稳定,有利于内存读取访问。
9.mysql的两种搜索引擎?用的什么索引?聚簇索引和非聚簇索引存储数据有什么不同?聚簇索引可以是什么?那innodb中除了聚簇索引以外的索引是什么索引?非聚簇索引存储的是什么。
10.Mysql事务隔离的四个级别,脏读和幻读是什么意思。默认的事务隔离级别是可重复读,
11.concurrentHashMap的实现原理,特性,jdk1.8中做了哪些改动,底层数据结构有哪些。ConcurrentHashMap的同步机制。
算法题:求没有重复元素的数组的最长升序子数组的长度。
3.23号11:00 美团二面
1.怎么设计一个好的系统架构
2.一个网购系统应该包扩哪些子模块
3.模块化设计的优缺点。
4.对互联网行业的未来发展趋势怎么看?
5.对云网络的理解
6.今后是如何规划的,打算在互联网待多久。
算法题:求数组的连续和最大值。(昨天题的简单版)
反问,了解了一些java开发的问题,比较核心的是网络编程,序列化和反序列化。什么时候可以入职等。
(感觉过了)
最后拿到了美团外卖事业部,春招暂时结束啦,接了offer了。
全部评论
(23) 回帖