JAVA面试精髓

1.mybatis中$与#的区别

(1.1)使用#{}意味着使用的预编译的语句,sql语句中如果存在参数则会使用?作占位符,参数默认为字符串。
(1.2)使用${}时的sql不会当做字符串处理,是什么就是什么。
使用#{}可以预编译且防止SQL注入,建议使用它

2.数据库的优化

(2.1)从执行计划方面:主要是使用到索引,尽量使用到索引查找,或者范围扫描,而不是全表扫描。
从SQL方面:常见SQL方面尽量不要使用类似于not in,like ‘%str%’,!= 等等相关不能使用索引的操作。也尽量避免子查询,表关联时关联字段上最好有比较好的索引。
(自己的心得:where 后面不要去日期做一些函数处理,例如date_add(now, inteval 1 day) 这种 会让该字段不走索引,极其缓慢)
从数据里方面:如果数据量很大尽量分库分表,具体根据实际业务需求而定。

3.高并发

高并发的第一步是静态化处理,静态化能处理了首先静态化呀
( 能静态化处理 就静态化处理 静态化处理指的是把一些页面数据缓存在客户端本地
是把所有的动态内容转换成静态的
缓存到你客户端本地不需要你做
这是浏览器做的事情
你只需要将…/xxx.jsp变成…/xxx.html这样就可以了
数据缓存到客户端 也不会不安全 因为只是缓存了图片,flash和一些基本文字,没什么不安全
)
如果处理不了在使用分布式啊
如果分布式处理不了根据业务逻辑做负载均衡啊
你比如一个商城吧
他不能哪个模块都高并发把
搜索商品是高并发,或者购买下单是高并发
那就只把这个模块做成负载均衡就醒了呀
先分布式,然后在高并发的模块上走nginx负载均衡


流量优化:防盗链处理
  前端优化:减少HTTP请求,合并css或js,添加异步请求,启用浏览器缓存和文件压缩,CDN加速,建立独立图片服务器,
  服务端优化:页面静态化,并发处理,队列处理
  数据库优化:数据库缓存,分库分表,分区操作,读写分离,负载均衡
  web服务器优化:负载均衡,nginx反向代理,7,4层LVS软件

4.数据库缓存机制

缓存,通俗的讲。就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率;
持久化数据是存在磁盘的,热数据一般是在内存里;
什么是热数据呢?热数据值得就是查询缓存、脏页等等;
什么叫脏页,就是内存中的数据对应硬盘的数据有所改变.改变后的数据页就叫做脏页;
一般如果更新数据,会先查询一遍把相关行加载到内存,然后在内存中修改这个值。这个改完并不是马上就回写到磁盘上持久化的,那么这个被改了的行数据,还没有持久化到磁盘上的,就叫脏页;
commit只是提交,一般要等checkpoint 和 layz write吧;
我们平时查询数据库就是去查询数据库的缓存,缓存查不到的时候,才会去持久化磁盘去查询;
一般是如果要放不下了,就会触发lazywrite,强制把已经修改的脏页刷到磁盘,然后空闲出内存来进行新操作;

5.后台比较两个对象内容用什么去判断

6.ioc apo

7.悲观锁 乐观锁

(7.1)乐观锁:完全依靠数据库来管理锁的工作。(适合写比较少的情况)
(7.2)悲观锁:程序猿自己管理数据对象上的锁。

8.字符串切割

String.split

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值