2023-02-Java面试经历

  2022年12月中旬不幸被裁,拿N+1撤了,临近过年在家休息了一个月,元宵节之前从山西返杭的,2月7号开始投简历,谈谈最近面试的经历吧,期望能在2月底3月初左右入职吧...........................................................................................................

       BOSS沟通607,投简历62家,当前面试邀约9家,其中终面的有5家 [电商或供应链业务相关的].......

       23年2月份确实面试量不多,行业寒冬哇...

 

  主要是将近期的面试做一个总结,查漏补缺吧,还有一些自己之前有印象但记不牢的东西,就全部记录下来吧

       属于自己的一段经历,若其中有问题烦请指出,甚是感激!

   

      方案拓展,比如如何支持高可用高并发? 当时的设计是什么?有没有更优的?重新设计有没有更完美的方案?若缓存MQ崩溃了如何处理?影响点呢?

   

       加密了解吗?加密方式有哪些?分别是什么?【对称加密/非对称加密/ 不使用密钥的加密】

       排序算法了解多少?时间空间复杂度呢?

       系统监控告警是如何设计的?

       如何处理请求防刷? 怎样区分正常的请求与恶意请求呢?

       业务扩张时,如何保证系统满足高可用高并发? 或者如何保证系统不宕机?  宕机后如何操作?

       业务扩张时,如何保证不丢失消息,或者三方的推送不丢失?定时轮询? 那若三方订单量非常大呢?轮询保证不了呢?

  

       场景题:晚上20:00抢优惠券页面的设计如何实现的? 比如杭州消费券,会存在3种结果,1成功 2请求排队中 3页面崩溃,这三种为什么会出现?

       定时的这个设置如何实现的呢? 【CDN缓存,前端页面缓存,按钮防刷,倒计时时间单独设置服务器做缓存处理;或者定时查询与服务端比较时间;限流降级策略保证服务部分可用等】

  

       接触过那些限流算法? 限流框架?

       一个list中100个元素,另一个list中百万元素,求笛卡尔积,如何操作保证性能最好?【双层循环,小循环在外,大的在内,生产环境使用好一些;主要是因为压栈弹栈相关及JVM自身的优化如栈上分配等等方式而言,更好一些; 就比如: 10个桶每个搅拌1万次,跟1万个桶每个搅拌10次,那个更轻松呢? 但是线下环境为了压榨性能,可以大循环套小循环处理】

   

       Java集合list,set,map等内部区别及各自实现?  ArrayList 与 LinkedList 区别是什么? 

       ArrayList集合创建赋初始大小与没有设置的相比有哪些优缺点?【主要是没设置的话会进行扩容,而扩容又会进行数据的迁移,ArrayList是基于数组的,重新迁移可能会导致碎片且需要重新选择连续空间】

       map有哪些?时间复杂度是什么?线程安全如何定义的?有无线程安全的map?

       ConcurrentHashMap为什么线程安全? 为什么jdk8会使用synvhronized? 锁优化升级是什么?【无锁->偏向锁->轻量级锁->重量级锁】 

       之前为什么synchronized是重量级锁?Java为什么引入偏向锁与轻量级锁?

       AQS是什么,lock与synchronized比较?

       map为什么会将链表转换为红黑树?有什么优点?红黑树如何保证自平衡的?

       线程池创建参数是什么? 队列是必须blockingQueue吗?【是的】  Dueue不可以吗?【可以,但是必须是阻塞的双向队列才可以】   阻塞队列内部实现是什么?【reentrateLock + condition】

       Spring多线程注解?有什么缺点呢?

       SpringBoot自动装配原理?【@EnabledAutoConfiguration + spring.factories】

   

       Mybatis原理? MybatisPlus中的分页原理,iBatis四大内部对象,xml配置中的id,namespace能否重复呢?

 

       Java线程 -Xmx设置为8G,当程序启动时,内存会如何变化呢?

       Java内存模型?即JMM【主存与线程私有内存规范,happends-before,as-if-serial,volititle等等吧】

       GC算法?【复制,标记清除,标记整理】   垃圾收集器?【serial,parllar,CMS,G1,ZGC,Shenandoah,Epsilon

       CMS与G1区别?

       有没有实战过JVM调优? 如何平衡 吞吐量与停顿时间呢?【吞吐量是单位时间内代码执行的时间与 [代码执行+GC时间之和] 的比值,停顿时间是STW的时间】

有没有实战过JVM调优? 如何平衡 吞吐量与停顿时间呢?
1. JVM调优,主要是两点,1是保证尽可能大的吞吐量,2是GC时间尽可能短一些
2. 在实战中,主要时使用的是cms收集器,因此下面是对这个收集器的一些调优配置
3. cms新生代与老年代的比值可以设置为1:1,或者新生代稍大一些,保证老年代与新生代的大小,避免老年代过小造成频繁的FullGC
4. 设置新生代中 Eden与Survivor的比值为3:1:1, 保证新对象尽可能在新生代就能回收掉
也可以适当增加GC年龄,比如将默认15改为25/30等,让对象都可以在新生代被回收,尽可能少的对象进入老年代,主要是避免过早晋升导致老年代频繁GC,累积频繁触发GC会导致CMS退化为SerialOld,这个是单线程操作,STW时间比CMS长很多
5. 设置CMS内存整理,减少因标记清除导致的内存碎片问题【如参数:UseCMSCompactAtFullCollection=true是控制FullGC空间整理, CMSFullGCsBeforeCompaction=10是10次FullGC后进行一次压缩】
6. 设置GC线程数,保证为并发GC操作,ConcGCThreads ParallelGCThreads 【并发是指垃圾收集器和应用程序交替执行】
7. CMSInitiatingOccupancyFraction是用来计算老年代最大使用率,设置75,则说明在老年代内存使用达到75%就需要执行CMSGC了
8. 禁止内存自适应变更,UseAdaptiveSizePolicy
9. 打印heapdump日志,当发生OOM便于定位

给JVM分配内存越多越好吗?
1. 系统可用内存 = 全部内存 - 系统损耗[少量], 也需要给系统预留部分内存,满足其他场景
2. 常用的是假如服务器为4G,则JVM设置 -Xmx = 2.5g左右吧,当前我们生产设置的是2g
3. 查询资料显示设置为0.5~0.7之间为最佳,堆越大则扫描的时间也越长

  

       项目中sql如何优化的?【避免类型隐式转换,执行计划explain查看type/key/额外信息等,联合索引,索引下推避免回表,函数查询可能导致索引失效,计算数据分区度[如数据成功与失败比值为30w:100,差距非常大,就需要对这个字段加索引],增加缓存,数据量大的话分库分表啥的】

       索引结构有哪些?【hash,BTree,B+Tree,FullText,RTree空间索引】  

       B+Tree结构的时间复杂度是什么?

       为什么不用hash索引呢?也就是B+Tree与hash的区别   hash不会排序,那为什么不使用TreeMap呢?那结构用跳表可以吗?区别是啥?

       为什么不使用红黑树呢?红黑树如何保证自平衡的?【节点着色,叶子节点黑色,红色不可连续,任何节点到叶子节点含相同数量的黑色节点等等规则吧】

       select a from table where b>9 order by c;  这个如何创建索引?【创建联合索引b_c_a,查询计划会是key是该索引,type为range,额外信息为use where, use index, use filesort】

       分库分表方案【ShardingSphere 好像最新版也出代理层这种框架了? mycat, 阿里云drds 好像又称为PolarDB】

  

       数据库事务特性?Spring事务隔离级别与传播机制?@Transactional失效有哪些场景?【非public,catch住了,本类中调用,rollbackFor配置,传播机制配置的问题】

       分布式事务了解吗? TCC中如何保证执行成功的正常回滚呢?【其实成功与失败是两个不同的条件操作,由try先进行资源锁定,然后才会由事务管理者进行commit或cancel操作】

 

       dubbo的了解? 如dubbo2.x与3.x的区别? 

       dubbo序列化是如何做的?

       dubbo中服务提供者如何将信息注册到注册中心的?具体操作是?

   

       redis分布式锁是什么?哪儿使用到了?【分布式幂等锁,同步阻塞锁】

       [ 场景题: 业务执行一半了,若线程down掉了,但是锁时间假如是30分钟,重启后如何在锁还未失效的时间内处理当前业务的后续呢? ] [ 没想到好的方式; 若是幂等锁肯定不能处理只能等锁失效后再次补偿 ]

       redis 集群了解吗? 对分布式锁有什么影响?【cluster集群可能会导致锁失效,比如ABC三个主节点,abc三个从节点构成了一个集群,那加锁是在B节点上,若此时B宕机了,加锁失败,就出现问题了?如何解决?  使用RedLock保证对过半的节点解锁[N/2+1,过半原则],这样其他线程获取锁就会失败】

       redis使用时,kv能否分别超过512M呢?[String类型value最大可为512M;  list,set,hash等最大为2的32次方-1]   [大key就是string值大于10kb,list,set,hash等数量大于10000]

       redis你理解的最好的部分,讲述一下? [看认知及表述]

    

       rocketMq原理?用在那些方面呢? 会不会出现消息丢失? 如何保证?【分3方面讲述:发消息,broker,消费;可由事务消息保证】  kafaka了解吗?  这俩的区别是什么?

  

       elasticsearch用到哪些功能呢? 深分页如何解决?offset  -> scorall  -> search-after

       es想查询 商品名称/买家名称/地址等等信息中包含 XXX 的数据,该如何操作? 若买家名称之前是ABC,后续变为了XXX,如何将之前的数据也查询出来呢?

       es倒排索引如何实现? [基于luccence,内部使用了FST等等吧,需要回答到内部原理]

  

       MongoDB做什么? 不用行不行?可以由那些替换呢?

  

      设计模式用到哪些?【策略,工厂,状态,模板,装饰等等吧】

  

      CPU100%问题定位?【查询当前服务器的线程信息,top命令,获取占用cpu最大的id,然后再查询到对应的线程id,再查询上下文日志定位,调整对应的代码逻辑】

      OOM如何定位?【获取dump文件,可以在项目启动时配置heapDumpOnOutOfMemoryError及path,没有配置则根据jmap获取dump文件,然后根据JVisualVM,MAT,或在线分析工具,查询堆栈信息,获取重复或占用最大的对象,找寻对象类信息,定位具体的业务逻辑】

 

      你的优缺点是什么?【分清主次优先,以解决问题为先,负责】  想在下一家公司获得什么成长呢?期望哪一方面有发展呢?【技术广度深度,团队领导力,薪资呗】

      

      动态规划,穷举算法,数值常量池等

 

 

 

以上的总结,答案自行查询呗..............................

 

 

  (愿你的每一行代码,都有让世界进步的力量    ------   fn)

posted @ 2023-02-17 12:01  fn-f  阅读(86)  评论(1编辑  收藏  举报