Nanj level
获赞
48
粉丝
37
关注
12
看过 TA
551
门头沟学院
2023
Java
IP属地:浙江
暂未填写个人简介
私信
关注
08-08 23:49
门头沟学院 Java
1. 面试官先发了笔试链接,有30个选择,1个算法,做的过程中不小心切换了几次页面,然后叫面试官重新开启了下。2. 算法 88. 合并两个有序数组 【三指针,从后往前比较】3. 问了排序算法有哪些,快排为什么快,堆排序相比其他排序有什么区别,归并排序时间复杂度,堆排序建立堆和维护堆的时间复杂度分别是多少,稳定(相等的数,相对的位置会不会改变)的排序有哪些【平常使用快排比较多是因为它在平均情况下的时间复杂度是O(nlogn),堆排序建立时间复杂度为O(n),维护堆的时间复杂度为O(logn)】4. GC类型有哪些说了yonggc(minor gc)和fullgc【一般都基于分代收集,年轻代的话,由于gc比较频繁,主要使用复制算法,老年代的话,主要使用标记整理或者标记清除算法,年轻代一般进行yonggc,老年代一般进行fullgc】5. TCP三次握手做了什么忘记了【第一次是客户端发送给服务端同步位SYN=1,seq=x,服务端介绍到后,发送給客户端SYN=1,ACK=1,ack=x+1,seq=y,然后客户端再发送给服务端ACK,ack=y+1,seq=x+1仅到ACK=1,确认号有效   主要通过一个同步位和确认为去完成这个同步的过程】6. Collection接口下有哪些方法7. Object类中有哪些方法只答出了equals(),hashcode(),finelize()【toString,wait,notify,clone,getClass】8. 重写clone()方法要注意什么注意深拷贝,浅拷贝,对应深拷贝,使用cloneable接口,要在clone方法里面手动得去拷贝对象内容。9. 什么是深拷贝,浅拷贝浅拷贝指的是,如果一个对象里面有引用类型,那么拷贝的话,也只能拷贝引用类型的引用地址,而不会真正拷贝一个新的对象。但是如果是深拷贝的话,里面拷贝的也是一个新对象。10. BeanCopyUtil内部怎么去实现11. 接口慢了怎么去排查根据请求id去查阿里云日志,分析日志,是否有慢sql日志,以及微服务间调用时长12. 导致慢的原因有哪些说了慢sql,服务间远程调用太多了13. volitile关键字有什么用说了去除指令重排序和保证可见性14. 什么是可见性说了java内存结构,多个线程在访问共享变量的时候会保存一份副本,可见性指的是当这个共享变量的值发生改变的时候,会马上将副本更新到最新的值。15. 什么是幂等性说了,一般将一个接口设置为幂等性的话,就是一个访问的接口和多次访问的结果是一样的,避免重复调用接口造成的问题。【一个操作可以被重复执行多次而不会改变结果的性质,restful API,get,delete都是幂等的】16. POST请求怎么保证幂等性说了使用数据库中的唯一主键,但其实不太符合业务场景。【使用唯一标识符:为每个POST请求分配一个唯一的标识符,并在请求头中包含,在服务端检查标识符是否已经被处理过,如果已经被处理过,则不再创建,还是返回原来的。】17. 悲观锁和乐观锁解释一下说了悲观锁是指线程在访问数据的时候悲观地认为某个数据可能被其他线程修改,因此加上锁,实现线程之间的同步,比如重量级的锁。乐观锁是指线程在访问共享数据的时候认为不会被其他线程修改,不去加锁,而是去比较下预期的值是否相同,如果相同,说明没其他线程改过,修改数据。否则不停地自旋,知道预期的值相同。18. java中哪里用到了CAS原子类中用到了CAS,内部使用了Unsafe类的compareAndSwap的方法,而且是个本地方法,原子性的。19. 数据库层面怎么去实现乐观锁每次去更新数据的时候,比较版本号,并设置新的版本号,比如UPDATE users SET username='Jane Doe', version=version+1 WHERE id=1 AND version=0;  这就要求在更新前就要拿到这个版本号20. 可达性分析中哪些可以作为Root【在GC过程中,有一些对象被认为是根对象(Roots),因为它们始终是可达的,不能被回收】21. 说说比较项目那块比较有挑战性22. 说说mqtt中的几种可靠性机制23. mqtt是怎么去发送消息的,说说架构24. 反问
查看14道真题和解析
0 点赞 评论 收藏
分享
08-08 23:48
门头沟学院 Java
英文自我介绍怎么保证线程顺序执行只叫了个信号量,然后问我具体怎么做,我说忘记了。【1.创建三个线程ABC(new Thread(runnable实例),接口里面使用lambda表达式,放入一个重写的runnable实例 ,分别调用threadA.start(),threadA.join(),threadB.start(),threadB.join()threadC.start(),threadC.join()2.使用并发包下的工具类,countDownLatch,创建两个countDownLatch实例countDownLatchAB,countDownLatchBC,都为1,线程A执行前不用检查,线程B检查countDownLatchAB为0则运行,线程B检查countDownLatchBC为0时运行,线程A结束减1,线程B结束减1。3.使用并发包下的工具类Semaphore,创建两个Semaphore实例SemaphoreAB,SemaphoreBC,都为1,线程A执行前不用检查,线程B检查Semaphore为1则运行,线程B检查SemaphoreBC为1时运行,线程A结束减1,线程B结束减1。方法二和方法三都是用到了操作系统里面的PV操作,使用信号量去控制。】讲下知道哪些集合主要是通过单值,键值对;Set,List,Map;是否重复;底层结构;查询删除效率去讲。linkedList 查找效率一定比 arrayList慢吗一般情况下是,但是如果要查的元素在链表头也很快。【arraylist底层是数组,是基于索引的查找,支持快速随机访问,时间复杂度O(1)  linkedList基于节点的查找,双向链表,要查找某个元素,需要从头开始遍历】哪些集合安全哪些集合不安全安全:vector,hashtable(效率慢) , cocurrentHashMap【使用锁分离技术减少锁的竞争】,CopyOnWriteArrayList【以后复制底层数组,并在写入时创建新副本的方式保证线程安全,使用于读都写少的场景】,ConcurrentLinkedQueue不安全:ArrayList,LinkedList,HashSet,HashMap,TreeSet,TreeMap有没有用过lambda表达式在stream流里面,new Thread()方法里面都用到过CI/CD用到了哪些工具说了有两套,一套是代码提交平台gitlab,构建平台jerken,一套是阿里云的codeup和流水线flow。mqtt有哪三个服务质量级别说了三种,0:只发一次消息,不管是否有接收到 1:发送消息,保存在mqtt服务器,当超时未收到消息,重发,收到后,删除mqtt消息 ,可能会造成重发 2:保证只发一次且发生到位,最复杂,一般不用。Caffine主要用来做什么说了主要用来做本地缓存怎么使用caffine和redis去做到缓存一致性的将了整个设计,当有文章发生变更,先更改数据库,再发生文章变更标识。当B端在查的时候,先查本地缓存,如果有再看redis,如果redis也存在,比较caffine中的时间戳和redis中的时间戳,如果caffine小于redis的,说明版本落后,需要重新查数据库。k8s用的过程中有遇到过什么问题没怎么用过,但是确实是遇到过的。【pod(最基本的可调度单元)部署失败,首先检查Pod的YAML文件是否有语法错误,然后使用kubectl logs查看日志,确定具体的原因。还有服务无法访问的问题,检查Service类型和端口配置,确保服务可以被正确暴露出来。总的来说,就是使用kubectl命令行工具来获取详细的诊断信息,并根据这些信息来调整配置或者排查问题】前端学得怎么样反问
查看10道真题和解析
0 点赞 评论 收藏
分享
08-03 00:47
门头沟学院 Java
1. 自我介绍2. 重载和重写的区别● 说了重载是在同一个类中,不同方法有相同的方法名,但是参数列表不同● 重写是子类继承父类,然后子类的方法重写父类的方法3. 说说集合主要是从单值,键值对;底层数据结构;查询与修改效率说了下。重点说了List Set Map这三个接口下面的实现.arraylist,linkedlist,hashmap等4. 创建表的时候怎么去加索引主要加在经常需要查询的字段上,然后对于一些性别等值是枚举的也没必要建。5. 怎么解决慢sql问题首先线上日志查找接口超时,定位慢sql,然后将sql放到线上库执行explain分析是否走索引,索引是否失效,扫描的行数等针对性进行优化6. 多线程在哪用过在异步任务中,使用线程池中多个任务去加速任务的执行7. 线程池的参数说说说了核心线程数,最大线程数,存活时间,阻塞队列,拒绝策略,时间单位8. 要拿到线程返回的值应该怎么做callable接口,还有并发包下的futuretask9. 事务用过吗,是怎么用的说了主要就是通过spring中在方法上增加注解10. spring中注解事务应该要注意什么不太了解,说了注意事务的隔离级别,事务可能失效的场景(接口内调用子方法),在分布式情况下微服务之前本地事务控制不了远程事务等11. 有没有了解事务是怎么去实现的没怎么了解过12. redis在哪用过说了五种基本的类型,然后应用讲了分布式锁,计数器,任务队列,缓存数据等。13. 还想问下,如果要设计一个分布式事务,需要注意一些什么不太会,说了应该要满足事务的ACID原则,还应该拥有高性能,高可用,高扩展。------------------------------------------------------------------------------一共20min,刚开始以为全是八股,后面问到事务这块答得不是很好,就一直在针对这块提问,总的来说后半段还是有不少的收获。
查看11道真题和解析
0 点赞 评论 收藏
分享
08-01 21:46
门头沟学院 Java
1. 自我介绍2. 用英文介绍一下最近的一个项目3. 说说数据库中的索引    说了索引概念,底层数据结构,然后说了索引的类型,说了可能会失效,然后面试官问失效的场景4. 说说索引失效的场景说了最左匹配原则,like, 函数,范围查询   然后面试官说还有一些其他简单的场景可以去了解下5. 有没有处理过慢sql的问题说了处理线上场景的案例,如何使用explain关键字进行分析慢sql的问题,以及如何保证索引的充分使用,避免使用select * 等,然后也要考虑业务是否可以减少没必要的sql查询,减少连表。6. 消息队列有了解过Kafka吗和RocketMQ有区别?说了都是高可用,高性能,高扩展性的消息队列,然后RocketMQ是在Kafka的基础上进行了架构的减少,功能的增加。架构的减少主要体现了摈弃了Zookeeper作为分布式配置集群,功能的增加,主要体现在RocketMQ增加了延迟队列,事务消息,消息过滤等。然后说了kafka主要用于大数据场景,RocketMQ有更多的功能。7. 怎么避免重复触发和消息丢失说了重复触发主要是通过token验证的机制,在消费的时候,去对比token是否一致,不一致就丢弃。将接口设置则幂等的消息丢失主要是通过消息确认机制,消费完后发生ack确认,然后重发8. 怎么探测到客户端是否有收到消息过消息确认机制,消费完后发生ack确认9. 多个消息,保证消息的有序执行说了没做过这方面的业务,但是猜想可以将提前到的消息缓存起来,然后通过一些滑动窗口的机制,保证有序性。然后面试官说基本思想正确,回头可以去了解写。10. 简历中有写处理高并发的场景,说说说了主要是在多个线程下去处理共享资源造成的问题。针对接口的场景,说了每天接口有300w次请求,发现有时出现数据问题,后面通过分布式锁的机制去分开同一个用户的并发请求。11. 如果是在同一个应用里面,线程之间怎么解决说了使用一些本地锁,比如sychronized,reententlock,乐观锁,CAS等。12. 有用过线程池吗说了用异步comptablefuture,就使用了线程池,然后说了自定义线程池的一些参数13. 最大线程数和核心线程数有什么区别最大线程数:运行创建的最多线程数量,多了就放在阻塞队列里面等待核心线程数:被回收之后,线程池中保留的线程数14. 线程池的类型有哪些说了在工作中主要使用自定义的线程池,忘记jdk中自带的线程池类型了,但是主要是在核心线程数,最大线程数和拒绝策略上面的区别15. 怎么根据场景去选择不同的线程池参数,怎么去配置的主要说了根据业务场景来,是IO密集型还CPU密集型,但是之前项目中主要还是设置核心线程数,最大线程数都为10左右,已经符合了业务需求。16.  有做过GC调优吗说了线上环境没做过,但是本地自己玩过。主要是调一些堆内存的大小等。17. GC了解过吗说了 主要发生在堆,然后说了分代垃圾收集机制,堆中的内存结构,一个对象从eden到老年代的过程,GC算法,fullgc,以及回收是会使用户线程停顿18. 怎么减少STW的时间说了使用高效的垃圾收集器,比如CMS,进行一些并发的收集过程19. 在编码中可以注意什么减少STW时间说了一些复杂的业务,避免创建过多的临时对象。以及在使用IO资源时,及时释放,避免内存泄漏,最终导致内存溢出。20. python有用过吗说简单用过写脚本,项目中的自动化打包流程的自动化脚本就是通过python来写的,然后讲了下这个流程。21. 简历上涉及到vue,前端有了解过吗会写一些简单的后台页面22. 反问总的来说这次面试还是挺有收获的,面试官也会去引导,面试涉及到的八股文也还行
查看22道真题和解析
0 点赞 评论 收藏
分享
2023-03-18 19:05
已编辑
门头沟学院 Java
1.自我介绍2.深挖项目  自实现的MVC怎么进行参数的传递,文件下载contentType ......3.各种数据结构以及特点4.图的遍历方式5.各种排序算法特点  分为哪些大类交换(冒泡,快排),插入(直接插入,折半插入,希尔排序),选择(简单选择,堆排序),归并6.java中的集合类的继承体系 从不同的方面分类说各种特点   单值:键值对,  安全:不安全,  有序:无序,  可重复:不可重复 ,  增删改查效率问题  ,遍历方式, 底层实现等7.介绍JUC8.为什么不推荐使用内置线程池简单来说就是让程序员自己知道做了什么,避免OOM,实际使用中还会根据业务自定义核心线程数,任务队列,饱和策略,同时给线程池命名(线程工工厂实现)10.JUC中提供的工具类11.池化思想12.ABC三个任务有序执行怎么做13.池化思想的设计模式14.为什么会出现枚举,泛型15.介绍手  写数据库连接池,为什么没有判断连接的状态--------------------------------------------------------------------------------------------------------------------目前为止感觉难度最大的一次面试,面试官的技术很强,不怎么问常规八股,很多时间都在聊项目,并且给我提出各种问题,问我熟悉什么,结果我说最近看JUC比较多,然后.......是我太菜了,但是还是很感谢面试官,给了提了很多建议,竟然面了一个多小时。 #你觉得今年春招回暖了吗#
0 点赞 评论 收藏
分享
2023-03-18 20:26
已编辑
门头沟学院 Java
1.自我介绍2.项目中职责和遇到的难点3.MVC流程   完整的流程记不清了,说了 请求->DispatchServlet->handmapping->Controller->视图解析器 ->前端(在handmapping之前还会经过handlerAdaptor,还有其实整个过程中是以  DispathServlet为中心的处理而不是一条链) 4.IOC的理解5.spring常用注解6.口述反转链表    只说了双指针的实现方式,问了我还有没有其他的方式,一下子忘了 ,递归的方式也比较常用7. 怎么查找一个表中的重复出现字段值    使用count()和group by 分组  ep:  user表中的name  select count(name) from user group by name;   出现了两条记录以上的就是重复的   或者 select name,countName from (select name,count(name) as countName from  emp group by name) t where countName>1; 可直接查出重复出现字段值8.哈希表的数据结构9.创建线程的几种方式     继承thread,实现runnable,callable,线程池10.平常喜欢用什么样的方式创建线程   说了new Thread(()->{ ...})的方式,可以用lambda表达式,还有ThreadPoolExecutor(...)通过传参自定义线程池,根据需要自定义线程池11.线程池的7大参数12.提交一个线程到线程池流程       说了ThreadPoolExecutor类下execute()下的逻辑,首先判断当前线程数是否小于核心线程数.......13.说说单例模式     懒汉和饿汉  优缺点比较,安全问题 几种实现方式  双重检测锁  枚举 ...    14.redis基本数据类型和应用场景 反问:做的业务,用到的技术(公司主营业务是做手游平台的,后端方面主要是做一些活动的更新,感觉挺边缘的)说是用微服务
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务