
java后端面经 --超级精简背诵
背诵
double__apple
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java后端面经--spring bean的作用域
singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维护。该对象的生命周期是与Spring lOC容器一致的(但在第一次被注入时才会创建)。prototype:为每一个bean请求提供一个实例。在每次注入时都会创建一个新的对象request:bean被定义为在每个HTTP请求中创建一个单例对象,也就是说在单个请求中都会复用这一个单例对象。session:与request范围类似,确保每个session中有一个bean的实例,在原创 2021-08-21 11:09:18 · 234 阅读 · 0 评论 -
java后端面经--spring bean的生命周期(难点)
1、解析类得到BeanDefinition2、如果有多个构造方法,则要推断构造方法3、确定好构造方法后,进行实例化得到一个对象4、对对象中的加了@Autowired注解的属性进行属性填充5、回调Aware方法,比如BeanNameAware,BeanFactoryAware6、调用BeanPostProcessor的初始化前的方法7、调用初始化方法8、调用BeanPostProcessor的初始化后的方法,在这里会进行AOP9、如果当前创建的bean是单例的则会把bean放入单例池10原创 2021-08-21 11:00:18 · 218 阅读 · 0 评论 -
java后端面经--BeanFactory和ApplicationContext
同方面的区别:Bean工厂使用延迟加载形式来注入bean,只有在使用到相应bean时才会加载实例化,这样无法发现spring的配置问题ApplicationContext在容器启动时,一次性创建了所有bean,就可以更早发现spring的配置问题,另一方面也占用了内存空间,程序启动较慢。BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建。对于BeanPostProcessor,BeanFactoryPostProcessor,BeanFac原创 2021-08-21 10:55:53 · 203 阅读 · 0 评论 -
java后端面经--spring,aop,ioc
轻量级的j2EE框架(J2EE 是针对 Web Service、业务对象、数据访问和消息报传送的一组规范)一个容器框架,用来装javabean对象一个中间层框架:一个连接作用(将简单的组件配置,组合成为复杂的应用)是轻量级的控制反转IOC(达到松耦合的目的)和面向切面AOP(实行内聚性的开发)的容器框架AOP:面向切面:表示给方法增加的功能,一般是日志输出、事务、权限检查等切面aop可以看作是实现动态代理的一种规范,它把实现动态代理的步骤进行了规范化作用:1.在目标类不增原创 2021-08-20 17:18:29 · 217 阅读 · 0 评论 -
java后端面经--线程池中的线程复用原理
线程池将线程和任务解耦,分开独立,摆脱了之前通过Thread创建线程时的一个线程必须对应一个任务的限制 在线程池中:同一个线程可以在阻塞队列中不断获取新任务来执行,让每一个线程执行一个“循环任务”--调用任务中的run方法,通过这种方法只使用一个固定的线程就将所有任务的run方法串联起来。...原创 2021-08-20 11:23:03 · 267 阅读 · 0 评论 -
java后端面经--线程池中阻塞队列
阻塞队列作用:1,自带阻塞和唤醒功能,2,无任务执行时,线程池利用阻塞队列的take方法挂起,从而维持核心线程的存活,不至于一直占用cpu资源。3,任务数超过了核心线程数量,就有保存任务的作用有新任务时,为什么是先添加队列而不是先创建线程?因为在创建新线程时,是要获取全局锁的,这个时候其他的线程就会阻塞,会影响整体效率。放入阻塞队列中,有机会有休息的核心线程执行队列的任务,减少了创建新线程的消耗。...原创 2021-08-20 11:08:56 · 380 阅读 · 0 评论 -
java后端面经--线程池和其中的参数
作用:1,降低资源消耗,提高线程利用率2,提高响应速度,3,提高线程的可管理性;线程是稀缺资源,使用线程池可以统一分配调优监控。几个参数:1,corePoolSize,代表核心线程数,表示正常情况下创建工作的线程数,是一种常驻线程2,maxinumPoolSize,代表的是最大线程数,它与核心线程数相对应,在核心线程数别用完了,就会创建新线程,但线程池内线程线程总数不会超过最大线程数3,keepAliveTime,unit表示超出,核心线程数之外的线程的空闲存活时间4,w原创 2021-08-17 21:34:57 · 188 阅读 · 0 评论 -
java后端面经--ThreadLocal
ThreadLoacl有个内部类,ThreadLocalMap,用来存放ThreadLocal对象和对应线程变量。TreadLocal:执行set,ThreadLocal对象和变量放入ThreadLocalMap执行get,以ThreadLocal为key获取对应value(变量)。每一个线程都有私有的ThreadLocalMap,容器相互独立,所以不存在线程安全问题、应用场景:使用ThreadLocal1,在进行对象跨层(数据层,持久层等等)传递时,可以避免多次传递,...原创 2021-08-04 21:17:29 · 228 阅读 · 0 评论 -
Thread和Runable
Thread为抽象类,Runable为接口Thread实现了Runable,有更多的功能应用场景:有复杂的线程操作需求,就继承Thread简单的执行一个任务,就实现Runable原创 2021-08-04 21:03:54 · 293 阅读 · 0 评论 -
java后端面经--sleep,wait,yield,join的区别
四者都是将,线程暂定,休息,中断,等待。1,锁池:所有需要竞争同步锁的线程都会放到锁池中。得到同步锁后就会进入就绪队列进行cpu资源分配2,等待池:调用了wait()后,线程被放到等待池中。只有调用了notify()或notifyAll(),线程才会去竞争同步锁。sleep(原理:把cpu的执行资格权利释放出去,过了休眠时间再收回,即使该线程有锁,sleep了也不会释放锁)sleep和wait区别:1,sleep是Thread的静态本地方法,wait是Object类的本地方法2,原创 2021-08-04 20:49:18 · 278 阅读 · 0 评论 -
java后端面经--并发三大特性
原子性:一个操作中国cpu不会再在中途进行其他调度工作,会保证操作的完整性(eg:cpu调度了一个线程,自增值后会完成 主存赋值)可见性:多个线程访问同一个变量时,一个线程修改了变量值,其他线程能够立刻看到被修改后的值有序性:因为虚拟机内部代码编译时,为追求运行效率,会进行指令重排序,这种情况,在单线程中是安全的,在多线程中就不是安全的。所以要保证代码的执行有序性。...原创 2021-07-31 20:24:04 · 180 阅读 · 0 评论 -
java后端面经--串行,并行,并发
串行:任务在时间上不会发生重叠,一个完整任务接一个完整任务并行:两个任务在同一时刻互不干扰的同时执行。并发:任务在时间上不会发生重叠,多个任务允许相互干扰,任务交替执行...原创 2021-07-29 21:08:48 · 287 阅读 · 0 评论 -
java后端面经--名词:守护线程(Daemon)
线程分为:守护线程和用户线程。任何一个守护线程会为所有用户线程服务。特点:1,守护线程的终止是自身无法控制的,依赖于进程运行,进程终止,守护线程一定关闭。2,守护线程产生的线程必定是守护线程GC垃圾回收线程是守护线程。应用场景:1,为其他线程提供服务支持2,在任何情况下,程序结束时,这个线程必须正常且立刻关闭,就用守护线程,...原创 2021-07-29 21:04:52 · 169 阅读 · 0 评论 -
java后端面经--双亲委派模型
用处:快速加载相关类。自顶向下加载器:BootStrapClassLoader(util.),ExtClassLoader(ext包),AppClassLoader(jar,自己写的代码)。向上委派到BootStrapClassLoader,过程为查找缓存,查到了就直接返回,向下查找到原发起的加载器,过程为,查找加载路径,有就直接返回。双亲委派模型的好处:1,安全性,避免用户编写相关类替换了java的核心类2,避免类的重复加载,jvm区分不同的类,不仅仅是根据类名,被不同加载器加载的也是原创 2021-07-29 20:51:37 · 142 阅读 · 0 评论 -
java后端面经--jdk,jre,jvm理解
java开发工具:jdk,java devolopment kit javajava运行时环境: jre, java runtime environmentjava虚拟机:jvm,java virtual machinejdk(jre(jvm,lib),其他工具)原创 2021-07-22 15:19:17 · 488 阅读 · 2 评论 -
java后端面经--面向对象的理解
1,面向过程:不关注对象,注重流程的过程,执行动作。2,面向对象:关注对象,有对应的属性,行为。优点:易于页面扩展,维护和复用特点:封装,继承,多态。封装:对象封装,私有属性,行为。1,javabean,内部属性私有,提供getset对外访问2,orm框架,为对象关系映射。通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中不需要关心链接是如何建立的。继承:继承父类的属性和方法,同时可以进行更多的改变多态:对同一方法的调用,实际执行的逻辑不同。原创 2021-07-22 14:55:23 · 328 阅读 · 2 评论 -
java后端面经--线程安全的理解
背景知识:进程,线程,堆,栈。线程安全:当多个线程在不用额外的同步控制或其他协调操作访问一个对象,能够获得正确结果,则为线程安全。堆是进程和线程共有的空间,分全局对和局部堆。堆是java虚拟机管理最大的一块内存,是线程共享的区域,是为了存放对象实例,以及为对象实例和数组分配内存。栈(就是一个方法对应 栈),是线程独有的,是线程安全的。原因:每个进程的内存空间中都有一块堆,进程中的所有线程都可以访问到这个区域,可能会造成线程不安全。...原创 2021-07-22 01:41:52 · 216 阅读 · 0 评论 -
java后端面经--gc垃圾回收
引用计数法:每个对象都有个引用计数属性,新建一个引用,计数增加,引用释放计数减1,计数为0时被回收(方便,但是对于相互引用的对象无效)可达性分析法:从gc roots开始根据引用链向下搜索,当对象不在引用链,会被回收。gc roots对象:(有哪些是gc roots)1,虚拟机栈中的引用对象(就是指方法中new 的对象)2,方法中静态属性引用对象3,方法中常量引用对象4,本地方法栈中JN引用的对象可达性分析法:内部原理:对象被回收需要两次标记第一次,对象没有与gc roots相连的引用链,原创 2021-07-21 02:50:17 · 189 阅读 · 0 评论 -
java后端面经--字节码的那些小知识
过程:java代码 -》编译-》生成字节码(.class)-》在虚拟机中运行字节码文件-》解释器-》将虚拟机代码转换成二进制机械码(不同系统,机械码不同)。虚拟机是固定的,但是不同平台的解释器不同,从而达到语言跨平台。优点:在传统解释型语言中保留了可移植型,高效型。...原创 2021-07-19 09:47:28 · 130 阅读 · 0 评论 -
java后端面经--hashCode()和equals()
简介:用于比较两个对象。所有对象都有hashcode方法当对象的hashcode的存在是,会用equals比较是否为同一个对象理解hashCode(),确定该对象在哈希表的索引位置,hashCode()定义在Object.java中,任何类都有hashCode()。hashCode()的作用:对象会加入到一个hashSet中,先计算hashCode值,判断该值位置是否有值了,如果没有,插入,如果有,需要用equals()判断两个对象是否相等,不相等就重新排列,相等就不插入。这样大大减少了equa原创 2021-07-19 09:36:40 · 145 阅读 · 0 评论 -
java后端面经--final
修饰对象:类:不能被继承方法:不能覆盖,只能重载变量:不可改变局部内部类和匿名内部类只能访问局部final变量。因为编译生成两个class,内部类用final变量延长生命。原创 2021-07-17 11:47:30 · 124 阅读 · 0 评论 -
java后端面经--抽象,接口
区别:抽象为前者;接口为后者抽象类是对类本质的抽象,是 麻雀是鸟 的关系接口是对行为的抽象,是 麻雀像飞机 的关系。1,函数:普通成员函数;public abstract 方法2,成员变量:多种类型;只能是public static final3,抽象只能继承一个,接口可以实现多个4,性价比:抽象能实现的功能远超过接口,但是代价高,因为每个类只能继承一个类,也必须继承或编写出所有的共性。接口功能较少,只对一个动作的描述,一个类中可以实现多个接口,设计难度简单,方便...原创 2021-07-17 11:37:49 · 104 阅读 · 0 评论 -
java后端面经——(默写)熟悉第一遍
已学习:1,3,4,为学习:2,原创 2021-07-17 11:02:32 · 143 阅读 · 0 评论 -
java后端--数据库优化
优化方向:1,索引2,表结构3,系统配置4,服务器性能sql字段 执行顺序:from on jion where groupby having select truncate orderby limit;使用索引:1,where中的 字段前不要加模糊查询2,where中的 表达式左侧不要使用函数表达式3,不要使用 1=1 查询4,不要使用nulll查询5,不要使用 不等于 <> !=6,不要用 or 可以用union...原创 2021-07-16 08:53:35 · 138 阅读 · 0 评论 -
java后端面经--容器
1:vector:1,动态数组,同步,线程安全2,扩容方式:数组满了,创建新数组,拷贝,删除旧数组3,效率较低ArrayList:1,不同步,底层是动态数组2,查找效率较高linkedlist:1,不同步,为双向链表,没有扩容机制2,修改删除操作快2:list和set的区别:1:存储顺序,set是不保序的2:set是去重的3:set不允许插入空值4:实现类不同:ArrayList,linkedlist,vector;hashset,treeset,linkedhashset原创 2021-07-15 09:08:55 · 147 阅读 · 0 评论 -
java后端面经--string,error,equals
1string:字符串常量,增删改会创建新对象消耗空间巨大,同步,线程安全stringbuffer:字符串变量,append,同步,线程安全,字符超过容量自动扩容stringbuilder:字符串变量,append,不同步,线程不安全,功能和stringbuffer相同,执行速度更快2两者都是throwable的子类error:正常情况下,不太可能出现的错误,不可复转的,不便于也不需要进行捕捉。exception:可以预料到的错误,分为可检查与不可检查的错误。可检查错误,可以进行捕捉,添加操作原创 2021-07-14 09:14:57 · 203 阅读 · 0 评论 -
java后端面经--hashtable和hashmap的区别
hashtable和hashmap区别:外部:1,同步,线程安全;不同步,线程不安全2,继承不同,dictionary类,abstractmap类内部:1,初始化空间,扩容:hashtable 11,2n+1;hashmap 16,2n;2,key,value:hashtable都不能为空,hashmap可以为空。3,遍历方式:hashtable:自己的方法(Enumeration) hashmap:iterator4,计算内部地址(idx)值不同:hashtable,用key的has原创 2021-07-13 21:32:21 · 108 阅读 · 0 评论