随笔分类 - Java面试题
摘要:操作系统中线程状态: 1 新建 2 就绪 3 运行 4 阻塞 5 死亡 Java中线程状态: 1 新建 2 可运行 3 阻塞 4 等待 5 有时限等待 6 死亡
阅读全文
摘要:1 corePoolSize:核心线程数 最多保留的线程数目 2 maximumPoolSize:最大线程数 核心线程数+救急线程数 3 keepAliveTime:生存时间 针对救急线程 4 unit:时间单位 针对救急线程 5 workQueue:阻塞队列 6 threadFactory:线程工
阅读全文
摘要:spring事务的原理是AOP,进行了切面增强,那么失效的根本原因是这个AOP不起作用了,常见情况如下: 抛出检查异常导致事务不能正确回滚 spring事务默认只对非检查异常进行回滚,即运行时异常。检查异常就是程序编译时必须处理的。 解决办法:可以通过配置@Transcational的属性rollb
阅读全文
摘要:底层数据结构,1.7和1.8有什么区别 1.7:数组+链表 1.8:数组+(链表 | 红黑树) 为什么要用红黑树 当链表过长时查询效率太低,树化可以提高查询效率 为什么不是一开始就用树,而是达到一定条件再树化 TreeNode占用空间比普通链表占用空间大 树化阈值为何是8 为了让树化概率更小,因为正
阅读全文
摘要:#{}是预编译处理,是占位符;${}是字符串替换、是拼接符。 mybatis在处理#{}时,会将sql中的#{}替换为?,调用PreparedStatement来赋值,可以有效防止SQL注入。 在处理${}时,就是简单将${}替换为变量的值 ,调用Statement来赋值。
阅读全文
摘要:starter可以使我们少定义一些配置 比如我们使用spring+springMvc进行开发时,如果需要引入mybatis等框架,还需要再去xml中定义mybatis需要的bean。 使用starter可以让我们开箱即用,只进行简单的属性配置就可以(使用默认配置时,直接不需要配置),就只可以直接进行
阅读全文
摘要:1 前端控制器dispatcherServlet接收到用户请求 2 dispathcherServlet调用处理器映射器handlerMapping 3 handlerMapping根据url找到对应处理器返回给dispatcherServlet(可以根据xml配置、注解进行查找) 4 dispat
阅读全文
摘要:Spring是一个IOC容器,用来存放管理Bean,使用依赖注入实现控制反转。也是一个桥梁,可以很方便地整合各种框架。还提供了AOP机制,弥补了OOP的代码重复问题,更方便将不同类不同方法中的共同处理抽取成切面,比如日志、异常等。 SpringMVC是spring对web框架的一个解决方案,提供了一
阅读全文
摘要:ArrayList是fail-fast的典型代表,遍历的同时不能修改,尽快失败 原理是arrayList中有一个修改次数变量,每次修改list这个变量都会+1 获取迭代器时将arrayList中的修改次数变量赋值给迭代器中的变量,之后每次遍历前都要比较这两个变量是否相同,不同则抛出并发修改异常 Co
阅读全文
摘要:Spring中的Bean默认是单例模式的,框架并没有对bean进行多线程的封装。所以单例bean是线程不安全的。 如果Bean是有状态的(有状态即有数据存储功能),则需要我们自己来保证线程安全。 最简单的方法即改变Bean作用域,将单例变为原型,即'singleton'改为'protopyte',这
阅读全文
摘要:事务这个概念是数据库层面的,Spring只是基于数据库中的事务进行了扩展,以及提供了一些能让程序员更加方便操作事务的方式。 Spring中有两种使用事务的方式,一种是编程式的,一种是申明式的,@Transactional注解就是申明式的。 比如我们可以在某个方法上增强@Transactional注解
阅读全文
摘要:spring是一个容器框架,用来装javaBean(java对象),也是一个中间层框架(万能胶)可以起到连接作用,比如将mybatis、springMVC等粘合在一起运用,可以让我们的开发更快、更简洁。 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。 IOC **ioc
阅读全文
摘要:并发:多个任务会相互干扰,同一时间点只有一个任务运行,交替执行。 并行:多个任务互不干扰,在同一时间点共同执行,在时间上是重叠的。 串行:在同一时间点只有一个任务运行,在时间上不可能重叠,任务挨个运行。
阅读全文
摘要:守护线程:为所有非守护线程提供服务的线程。任务一个守护线程都是整个JVM中所有非守护线程的保姆。 守护线程就是整个进程中一个默默无闻的小喽喽,它的生死无关重要,但它依赖整个进程而运行;哪天其他线程都结束了,程序要结束了, 理都没理守护线程,就把它中断了。 注意:由于守护线程的终止是自身无法控制的,所
阅读全文
摘要:当多个线程访问同一个对象时,如果不用做额外的控制,调用这个对象的行为都可以获得正确的结果,就说这个对象是线程安全的。 线程安全准确地说是内存安全,堆是共享内存,可以被所有线程访问。 在每个进程的内存空间都会有一块特殊的公共区域,即堆(内存)。进程内的所有线程都可以访问到该区域,这就是造成问题的潜在原
阅读全文
摘要:锁池 所有需要竞争同步锁的线程都会放在锁池当中,比如某个对象的同步锁被其中一个线程得到,则其它线程需要在锁池中等待,当前面的线程释放掉同步锁后锁池中的线程去竞争同步锁,得到锁的线程进入就绪队列等待CPU资源分配。 等待池 当调用wait()方法后,线程会放到等待池中,等待池中的线程不会去竞争同步锁。
阅读全文
摘要:**线程的生命周期:**创建-->就绪-->运行-->阻塞-->死亡 线程的状态: 新建状态(New):新创建了一个线程对象 就绪状态(Runable):其它线程调用了该线程的start方法。该状态的线程都在可运行线程池中,等待获取CPU使用权 运行状态(Running):就绪状态的线程获取到了CP
阅读全文
摘要:**可达性分析法:**从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任务引用链相连时,则证明此对象是不可用的,此时虚拟机就判断是可回收对象。 可以作为GC Roots的对象有: 虚拟机栈中引用的对象 方法区中类静态属性引用的对象 方法区中常量引用的对象
阅读全文
摘要:Java中的所有异常都来自顶级父类Throwable Throwable下有两个子类,Exception和Error Error是程序无法处理的错误,一旦出现程序就会被迫停止运行 Exception是程序可以处理的错误,可以分为两种RunTimeException运行时异常和CheckedExcep
阅读全文
摘要:类加载器 顶级类加载器:BootStrapClassLoader 负责加载%JAVA_HOME%路径下lib文件夹中的jar包和class文件 扩展类加载器:ExtClassLoader 负责加载%JAVA_HOME%路径下lib文件夹下ext文件夹中的jar包和class文件 系统类加载器,线程上
阅读全文