暂发——面试

equals和hashCod

HashCod

hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。 作用可以使查询对象速度更快

hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。

equals

是进行比较对象是否相等,如果默认的话是比较两个对象的地址

在底层HashSet不能重复就是进行比较 hashCod和equals 先比较hashCode 如果不相等那么久不用比较equals了。

如果equals相等那么hashCode也一定相等

cookie 和session

https://www.cnblogs.com/it774274680/p/12793004.html

@Autowired和@Resource的区别

@Autowired是spring的 @resource是jdk的 @Autowired默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置 required属性为false,如果我们想使用按照名称装配,可 以结合@Qualifier注解一起使用;

@Resource默认按照名称装配,当找不到与名称匹配的bean才会按照类型装配,可以通过name属性指定,如果没有指定name属 性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找 依赖对象.

Mybatis

#{}和${}的区别是什么?

${}是字符串替换,#{}是预处理;

Mybatis在处理 时 , 就 是 把 {}时,就是把 {}直接替换成变量的值。而Mybatis在处理#{}时,会对sql语句进行预处理,将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;

使用#{}可以有效的防止SQL注入,提高系统安全性。

如何使用 like通配符

可以使用 concat 函数

LIKE concat('%',#{userName},'%'))

resultMap和resultType

参考

Spring

事务

参考

READ_UNCOMMITTED

读未提交。脏读、不可重复读、幻读都会发生。

READ_COMMITTED

读已提交。脏读不会发生,不可重复读、幻读都会发生。

REPEATABLE_READ

可重复读。脏读、不可重复读都不会发生,幻读会发生。

SERIALIZABLE

可串行化。脏读、不可重复读、幻读都不会发生。

IOC/DI

依赖注入,通过set 方法注入,或者通过构造器注入

将由手动创建的类交给spring容器来进行创建,解决了耦合性

AOP

面向切面

使用动态代理 分为 cglib 和jdk

对象目标生成了接口用jdk 没有接口用cglib

Spring AOP是基于动态代理的,如果要代理的对象实现了某个接口,那么Spring AOP就会使用JDK动态代理去创建代理对象;

而对于没有实现接口 的对象,就无法使用JDK动态代理,转而使用CGlib动态代理生成一个被代理对象的子类来作为代理。

@autowried 和 @resource

@autowried:默认按照 Tpye注入

@Resource: 默认按照Name注入

JUC

创建线程的几种方法

new Thread

接口rannable

calable

new ThreadPool

线程池的参数

初始

最大

超时时间

超时单位

阻塞队列

创建工厂

拒绝策略

/**
 * 解析底层创建线程池
 *  7大参数
 *      new ThreadPoolExecutor(
 *                         2,//默认开启线程池
 *                         5,//最大线程池
 *                         5,//超时没有调用释放线程
 *                         TimeUnit.SECONDS,//时长单位
 *                         new ArrayBlockingQueue<>(2), //阻塞队列
 *                         Executors.defaultThreadFactory(),//工厂
 *                         new ThreadPoolExecutor.AbortPolicy()//拒绝策略
 *                 );
 *  4大拒绝策略
 *   new ThreadPoolExecutor.AbortPolicy() //当线程数超过线程池的最大时,那么抛出异常
 *   new ThreadPoolExecutor.CallerRunsPolicy()//当线程数超过线程池的最大时,哪里来回到哪里 将由调用此线程的线程执行,回调
 *   new ThreadPoolExecutor.DiscardPolicy()//线程池满了 那么就丢掉不执行
 *   new ThreadPoolExecutor.DiscardPolicy()//线程池满了 ,不报错,等待 尝试去抢第一个执行的线程,如果时间超过等待时长丢掉
 * 实例来理解
 *  :理解 默认线程池是2个线程 当沾满时会在 阻塞队列中等待,如果阻塞队列满载时,会启用最大线程池
 *
 */

String

StringStringBufferStringBuilder
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量可变类,速度更快
不可变可变可变
线程安全线程不安全
多线程操作字符串单线程操作字符串

MYISAM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值