Java软件工程师面试题汇总(持续更新)
##1、 GC
(1)jvm中一次完整的GC流程(从ygc到fgc)是怎样的,重点讲讲对象如何晋升到老年代等
答:对象优先在新生代区中分配,若没有足够空间,Minor GC;
大对象(需要大量连续内存空间)直接进入老年态;长期存活的对象进入老年态。如果对象在新生代出生并经过第一次MGC后仍然存活,年龄+1,若年龄超过一定限制(15),则被晋升到老年态。
(2)JVM垃圾回收机制,何时触发MinorGC等操作
分代垃圾回收机制:不同的对象生命周期不同。把不同生命周期的对象放在不同代上,不同代上采用最合适它的垃圾回收方式进行回收。
JVM中共划分为三个代:年轻代、年老代和持久代。
- 年轻代:存放所有新生成的对象;
- 年老代:在年轻代中经历了N次垃圾回收仍然存活的对象,将被放到年老代中,故都是一些生命周期较长的对象;
- 持久代:用于存放静态文件,如Java类、方法等。
新生代的垃圾收集器命名为“minor gc”,老生代的GC命名为”Full Gc 或者Major GC”.其中用System.gc()强制执行的是Full GC.
判断对象是否需要回收的方法有两种:
- 引用计数 :当某对象的引用数为0时,便可以进行垃圾收集。
- 对象引用遍历 :果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。
触发GC(Garbage Collector)的条件:
- GC在优先级最低的线程中运行,一般在应用程序空闲即没有应用线程在运行时被调用。
- Java堆内存不足时,GC会被调用。
##实战问题
###1、一个请求超过20秒了,你怎么排查和解决;
###2、说说你觉得做的比较不错的项目,讲一下项目结构和用到的框架,再说一下为什么要选择这些框架;
###3、“商品秒杀”的解决方案;
(1)秒杀架构设计理念
- 限流: 鉴于只有少部分用户能够秒杀成功,所以要限制大部分流量,只允许少部分流量进入服务后端。
- 削峰:对于秒杀系统瞬时会有大量用户涌入,所以在抢购一开始会有很高的瞬间峰值。高峰值流量是压垮系统很重要的原因,所以如何把瞬间的高流量变成一段时间平稳的流量也是设计秒杀系统很重要的思路。实现削峰的常用的方法有利用缓存和消息中间件等技术。
- 异步处理:秒杀系统是一个高并发系统,采用异步处理模式可以极大地提高系统并发量,其实异步处理就是削峰的一种实现方式。
- 内存缓存:秒杀系统最大的瓶颈一般都是数据库读写,由于数据库读写属于磁盘IO,性能很低,如果能够把部分数据或业务逻辑转移到内存缓存,效率会有极大地提升。
- 可拓展:当然如果我们想支持更多用户,更大的并发,最好就将系统设计成弹性可拓展的,如果流量来了,拓展机器就好了。像淘宝、京东等双十一活动时会增加大量机器应对交易高峰。
(2)设计思路
将请求拦截在系统上游,降低下游压力:秒杀系统特点是并发量极大,但实际秒杀成功的请求数量却很少,所以如果不在前端拦截很可能造成数据库读写锁冲突,甚至导致死锁,最终请求超时。
- 充分利用缓存:利用缓存可极大提高系统读写速度。
- 消息队列:消息队列可以削峰,将拦截大量并发请求,这也是一个异步处理过程,后台业务根据自己的处理能力,从消息队列中主动的拉取请求消息进行业务处理。
(3)前端方案
浏览器端(js):
页面静态化:将活动页面上的所有可以静态的元素全部静态化,并尽量减少动态元素。通过CDN来抗峰值。
禁止重复提交:用户提交之后按钮置灰,禁止重复提交
用户限流:在某一时间段内只允许用户提交一次请求,比如可以采取IP限流
(3)后端方案
服务端控制器层(网关层)
限制uid(UserID)访问频率:我们上面拦截了浏览器访问的请求,但针对某些恶意攻击或其它插件,在服务端控制层需要针对同一个访问uid,限制访问频率。服务层
上面只拦截了一部分访问请求,当秒杀的用户量很大时,即使每个用户只有一个请求,到服务层的请求数量还是很大。比如我们有100W用户同时抢100台手机,服务层并发请求压力至少为100W。
采用消息队列缓存请求:既然服务层知道库存只有100台手机,那完全没有必要把100W个请求都传递到数据库啊,那么可以先把这些请求都写到消息队列缓存一下,数据库层订阅消息减库存,减库存成功的请求返回秒杀成功,失败的返回秒杀结束。
利用缓存应对读请求:对类似于12306等购票业务,是典型的读多写少业务,大部分请求是查询请求,所以可以利用缓存分担数据库压力。
利用缓存应对写请求:缓存也是可以应对写请求的,比如我们就可以把数据库中的库存数据转移到Redis缓存中,所有减库存操作都在Redis中进行,然后再通过后台进程把Redis中的用户秒杀请求同步到数据库中。数据库层
数据库层是最脆弱的一层,一般在应用设计时在上游就需要把请求拦截掉,数据库层只承担“能力范围内”的访问请求。所以,上面通过在服务层引入队列和缓存,让最底层的数据库高枕无忧。
###4、手写个单例模式出来;
###5、分布式锁的解决方案
###6、分布式事务解决方案
###7、分布式环境下的定时任务管理
2020年3月5日更新
Java进程4中通信方式
Java线程同步与异步的不同
Java线程发生死锁,如何处理
Java软件工程师面试题汇总(持续更新)相关推荐
- 软件编程学习网站汇总——持续更新中
持续更新各种国内外关于编程语言学习及讨论的网站,有时间我会添加介绍,不过相信很多网站你们都熟悉了,喜欢的可以收藏,我也留着等以后需要的时候翻阅. 若链接有错误,提醒我下,我来改正.有其他好的站也可以推 ...
- C++软件工程师面试题汇总
C++面试题汇总(持续更新中.......) 简介 c++ 问题汇总 问题一:继承和多态的区别? 问题二:结构体和联合体的区别? 问题三:重载和重写的区别? 问题四:struct和class的区别? ...
- 初级Java应届生面试题(持续更新。。。)
初级Java应届生面试题 初识Java 1.Write Once,Run Anywhere 2.为什么要配置path环境变量?如何配置? 3.编写代码,使得发生VirtualMachineExcept ...
- JAVA基础精选面试题(持续更新,一天五道,祝各位道友,早日飞升上仙)!
1.重载和重写的区别? 重载发生在一个类中,同名的方法如果有不同的参数列表(类型不同.个数 不同.顺序不同)则视为重载. 重写发生在子类与父类之间,重写要求子类重写之后的方法与父类被重写方 法有相同的 ...
- Java 基础常见面试题(持续更新)
目录 1.Java 程序设计概述 1.1.Java 跨平台运行的原理是什么? 1.2.Java 的安全性体现在哪些方面? 1.3.面向对象和面向过程的区别是什么? 1.4.面向对象的有哪些特征? 1. ...
- Web前端面试题汇总(持续更新...)
H5 的新特性有哪些?C3 的新特性有哪些? H5 新特性 拖拽释放(Drap and drop) API ondrop 自定义属性 data-id 语义化更好的内容标签(header,nav,foo ...
- 嵌入式软件工程师 面试题 (持续更新中)
立个Flags:这篇文章将会是私人文档里面,最受欢迎的文章,毕竟,它将会是最好.最全面.最友好.层次感强的面试题集合.2017/3/16 13:37:23
- java软件面试题_java软件工程师面试试题
java软件工程师面试试题 更新时间:2019年01月25日13时15分 来源:java培训 浏览次数: 我们找工作的人都会面临一个难题,那就是面试,根据工作性质的不同,面试的要求也会不公,好点的工作 ...
- Java开发专家阿里P6-P7面试题大全及答案汇总(持续更新)
一.CPU100%问题如何快速定位 答案 1.执行top -c ,显示进程运行信息列表 键入P (大写p),进程按照CPU使用率排序 2.找到最耗CPU的线程 top -Hp 10765 ,显 ...
- 面试1:Java、微服务、架构常见面试题(持续更新中)
Java.微服务.架构常见面试题(持续更新中) 文章目录 Java.微服务.架构常见面试题(持续更新中) ==**Java**== 1.Java概述 (1)JVM.JRE和JDK (2)Java特点 ...
最新文章
- IntelliJ IDEA 的Project structure说明
- python3.7.2下载-Python编程神器 v3.7.2 最新免费版
- Java学习笔记(九)--数组及Arrays类
- # 睡眠3秒_【for fun】睡眠排序算法
- H5实现俄罗斯方块(一)
- 计算机基础知识 笔试,计算机基础知识笔试题
- [译]为什么Vue不支持templateURL
- 谷歌停止中国版搜索引擎;李楠宣布离职魅族;微软用 Rust 替代 C/C++ | 极客头条...
- 121.Best Time to Buy and Sell Stock
- 前端多个圆圈均匀横向排列_web前端工程师必须掌握的24条宝贵经验!让你在前端路上更轻松!...
- Acrobat Pro DC 教程,如何从 PDF 中提取页面?
- 那些年,Linus torvalds大神喷过的技术
- B. Restore Modulo
- 统信UOS系统连接Windows系统共享的打印机
- 如何下载bing必应首页图片
- matlab让legend横着排,echarts画一个饼图, orient: 'horizontal',图例横向排列,当图例比较多时,如何在第二排让图标一一对齐?...
- 查看Windows凭据和普通凭据的密码(查看Windows中存储的密码)——mimikatz
- 【笔记】ARM指令系统
- 零基础开始网页制作-前端开发
- PowerBuilder命令行编译详解[1]
热门文章
- Linux批量追加文件名后缀
- c语言在电路设计作用,ds1307怎么使用(ds1307引脚图及功能_c语言程序及典型应用电路)...
- 5.学城项目 支付宝支付
- Quixel bridge桥接设置
- easysysprep4封装教程,自己封装系统
- AboutCG的优惠卷如何使用
- 计算机博士复试英语自我介绍,博士复试自我介绍中英文
- 依山傍水,云淡风轻-----只是传说
- System.getProperty()方法大全
- 华中农业大学和南京农业大学计算机,科学网—2015年国内几所农业大学的国家基金排名及评述 - 朱猛进的博文...