更新时间:2019-12-30 14:07:35 来源:极悦 浏览2963次
1. java 中 volatile 和 synchronized 有什么区别?
A. volatile 本质是在告诉jvm 当前变量在寄存器(工作内存)中的值是不确定的, 需要从主存中读取;synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
B. volatile 仅能使用在变量级别;synchronized 则可以使用在变量、方法、和类级别的。
C. volatile 仅能实现变量的修改可见性,并不能保证原子性;而 synchronized则可以保证变量的修改可见性和原子性。
D. volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。
E. volatile 标记的变量不会被编译器优化;synchronized 标记的变量可以被编译器优化。
2. 有了解 java 的原子类?实现原理是什么?
答:采用硬件提供原子操作指令实现的,即 CAS。每次调用都会先判断预期的值是否符合,才进行写操作,保证数据安全。
3. spring 主要使用了哪些?IOC 实现原理是什么?AOP 实现原理是什么?
答:spring 主要功能有 IOC,AOP,MVC 等,IOC 实现原理:先反射生成实例,然后调用时主动注入。AOP 原理:主要使用 java 动态代理
4. mybatis 有了解吗?它与 hibernate 有什么区别?项目中,你会选哪个?
答:两者都是轻量级 ORM 框架,hibernate 实现功能比较多,通过 HQL 操作数据库,比较简单方便,但 hibernate 自动生成的 sql 相长,不利测试和查找原因。复杂 sql 时,编写比较困难,同时性能也会降低。mybatis 是半自动化,手动编写 SQL 语句,同时提供丰富的参数判断功能。sql 语句较清晰,可以直接进行测试,性能也较好,操作起来非常简单。同时 hibernate 容易产生n+1 问题。hibernate 学习成本较 mybatis 高。国内一些大公司基本上使用mybatis
5. 说说数据库性能优化有哪些方法?
答:使用 explain 进行优化,查看 sql 是否充分使用索引。避免使用 in, 用exist 替代,字段值尽可能使用更小的值,任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。使用连接查询 (join) 代替子查询。
在表的多列字段上建立一个索引,但只有在查询这些字段的第一个字段时,索引才会被使用。
6. linux 命令熟悉?查看某个线程命令是什么?查看整个机器负载命令?文件内容快速查找命令是什么?
查看线程:ps -ef|greptomcat
查看负载:top
文件内容查找:vi /aa test.txt 或者先打开文件,再查找: vi test.txt /aa
7. 缓存框架有使用过哪些?memcache 和 redis 有什么区别?项目中,怎么去选择?
答:缓存有: ehcache,memcache 和 redis;
memcache 和 redis 等区别:
1、 Redis 和 Memcache 都是将数据存放在内存中,都是内存数据库。不过 memcache 还可用于缓存其他东西,例如图片、视频等等。
2、Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set, hash 等数据结构的 存储。
3、虚拟内存 --Redis 当物理内存用完时,可以将一些很久没用到的value 交换到磁盘
4、过期策略 --memcache 在 set 时就指定,例如 set key1 0 0 8, 即永不过期。Redis 可以通 过例如 expire 设定,例如 expire name 10
5、分布式 -- 设定 memcache 集群,利用 magent 做一主多从; redis可以做一主多从。都可以一主一从
6、存储数据安全 --memcache 挂掉后,数据没了;redis 可以定期保存到磁盘(持久化)
7、灾难恢复 --memcache 挂掉后,数据不可恢复; redis 数据丢失后可以通过 aof 恢复
8、Redis 支持数据的备份,即 master-slave 模式的数据备份。项目使用选择:redis 是单线程实现,若需要使用控制某些并发状态时,可以使用 redis. 项目中需要使用 复杂的 list,set 操作时,同时可以对数据进行持久化。当存储数据较大时,如 100k 以上,那 memcache 性能较好,在多核上,memcache较好
以上就是极悦注册机构小编介绍的“2020年百度Java开发面试题目”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
相关推荐
(初级到高级)
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习