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