面试题
2020-05-30 10:50:56 50 举报
AI智能生成
面试公司
作者其他创作
大纲/内容
阿里面试
1.java整个项目的难点和如何解决
2.怎么保证数据一致性
1.通过CAS原理(比较和交换),乐观锁
2.通过redis分布式锁或者zk分布式锁
3.建立唯一约束
3.数据库怎么优化,具体说说
1.优化sql和索引
1.用慢查询日志定位执行效率低的SQL语句
2.用explain分析SQL的执行计划
3.确定问题,采取相应的优化措施,建立索引啊,等
2.搭建缓存
将复杂的、耗时的、不常变的执行结果缓存起来,降低数据库的资源消耗
缓存击穿、缓存穿透、缓存雪崩问题如何解决?
3.读写分离
利用现成的中间件mycat或者altas等做读写分离
4.分库分表
1.垂直分表
把没有关联的表分到不同的服务器
2.水平分表
把数据量大的表根据关联字段分到不通的服务器
4.Hibernate缓存机制
Hibernate一级缓存
Hibernate二级缓存
什么样的数据适合存放到第二级缓存中?
不适合存放到第二级缓存的数据?
Hibernate查找对象如何应用缓存?
5. Mysql 表锁 行锁 怎么保证数据不冲突
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
保证数据不冲突: 建立唯一约束字段
6.Jdbc连接数据库过程
加载驱动Class.forName(“com.mysql.jdbc.Driver”)
创建数据连接对象Connection
创建Statement对象
调用Statement对象的相关方法执行相对应的 SQL 语句
关闭数据库连接
7. Java内存区域怎么分布
程序计数器(Program Counter Register)
指示Java虚拟机下一条需要执行的字节码指令
Java栈(VM Stack)
虚拟机栈中执行每个方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息
本地方法栈(Native Method Stack)
本地方法栈为虚拟机使用的Native方法服务,执行每个本地方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息
方法区(Method Area)
虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据
堆(Heap)
堆是Java对象的存储区域,任何用new字段分配的Java对象实例和数组,都被分配在堆上
8.java对象的实例化过程
1.加载所有父类
2.在内存堆中分配对象空间
3.进行属性的赋值
4.递归调用父类构造器.(默认调用父类无参构造器)
5.调用本类构造器
9.有无内存泄漏和对溢出经验,如何解决,jvm参数设置
如何避免内存泄漏、溢出
1、尽早释放无用对象的引用
2、程序进行字符串处理时,尽量避免使用String,而应该使用StringBuffer
3、尽量少用静态变量
4、避免集中创建对象,尤其是大对象,如果可以的话尽量使用流操作
5、尽量运用对象池技术以提高系统性能
6、不要在经常调用的方法中创建对象,尤其忌讳在循环中创建对象
7、优化配置
内存溢出的解决方案是什么
1、从代码层面进行优化完善,尽量避免该情况发生
2、调整优化服务器配置 设置-Xms、-Xmx等
10.怎样实现一个线程安全的类
1.synchonized关键字修饰类
2.ThreadLocal保存数据和获取数据
11.了解那些锁 可重入锁说一下
重入锁
就如同在饭堂打饭,你在窗口排着队。排到你的时候,突然路人A让你顺带着打个饭吧,然后你就打了两份饭,这时候你还没离开窗口,又有路人B让你打一份汤,于是你又额外打了一份汤
自旋锁
在另一个菜式比较好吃且热门的窗口,可不是这样的,在这里你在窗口,只能点一个菜(进入一次临界区),点完后,你想要再点别的菜,只能重新排一次队(虽然可以插队,当然我们可以引入服务员队伍管理机制:private Lock windows = new ReentrantLock(true);,指定该锁是公平的。)
读写锁
然而餐次的人流量一大,老板发现经常排起很长的队伍,厨师却都闲着没事干。老板拍脑子一想,这样不行啊,所以稍微改进了一下点餐方式。所有人都可以扫二维码用H页进行点餐,只要这个菜不是正在做(写锁),那么就可以随便点。
12.模板模式和策略模式的区别
模板模式一般只针对一套算法,注重对同一个算法的不同细节进行抽象提供不同的实现。而策略模式注重多套算法多套实现
策略模式的关注点更广,模板模式的关注点更深
赛意
1.你现在做的项目用到了什么框架与技术?
框架
spring boot、dubbo、spring cloud
技术
spring mvc 、spring、mybatis-plus、jwt、redis、zk、mq
2.我对微服务架构的一些看法和理解
3.对spring cloud 的了解
4.Redis为什么这么快?
1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
3、采用单线程,避免了不必要的上下文切换和竞争条件
4、使用多路I/O复用模型,非阻塞IO;
5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;
5.Redis以什么数据结构存储?
字符串(String),散列(Hash),列表(List),集合(Set),有序集合(Sorted Set或者是ZSet)
思源软件
1.jdk中哪些用到了乐观锁和悲观锁
乐观锁
CAS(比较和交换)
AtomicInteger
悲观锁
synchronized修饰
0 条评论
下一页