当前位置 博文首页 > yuanting_的博客:JAVA面试精髓

    yuanting_的博客:JAVA面试精髓

    作者:[db:作者] 时间:2021-08-25 10:11

    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

    cs
    下一篇:没有了