百度笔试

tech2023-02-03  91

1.java程序初始化的几个原则

彻底搞懂java程序的初始化顺序

静态优于非静态变量先于块父类优于子类进行初始化按照成员变量的定义顺序进行初始化

2.AOP中的几个术语

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程 (1)切面(Aspect):被抽取的公共模块,可能会横切多个对象。 在Spring AOP中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 @AspectJ 注解来实现。 (2)连接点(Join point):指方法,在Spring AOP中,一个连接点 总是 代表一个方法的执行。 (3)通知(Advice):在切面的某个特定的连接点(Join point)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。 (4)切入点(Pointcut):切入点是指 我们要对哪些Join point进行拦截的定义。通过切入点表达式,指定拦截的方法,比如指定拦截add、search。 (5)引入(Introduction):(也被称为内部类型声明(inter-type declaration))。声明额外的方法或者某个类型的字段。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。 (6)目标对象(Target Object): 被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做 被通知(adviced) 对象。 既然Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。 (7)织入(Weaving):指把增强应用到目标对象来创建新的代理对象的过程。Spring是在运行时完成织入。 切入点(pointcut)和连接点(join point)匹配的概念是AOP的关键,这使得AOP不同于其它仅仅提供拦截功能的旧技术。 切入点使得定位通知(advice)可独立于OO层次。 例如,一个提供声明式事务管理的around通知可以被应用到一组横跨多个对象中的方法上(例如服务层的所有业务操作)。 记录 AOP 的一些专业术语(非 Spring 专属):

切面(Aspect) 就是交叉在各个业务逻辑中的系统服务,类似于安全验证,事务处理,日志记录都可以理解为切面

织入(weaving) 就是将切面代码插入到目标对象某个方法的过程,相当于我们在jdk动态代理里面的 invocationHandler接口方法的内容

连接点(JointPoint) 理论上可能被切面织入的所有方法 ,比如addStudent,delStudent ,getStudentList…通常所有方法都可以被称为连接点

切入点(PointCut) 就是实际上被切面织入的方法

目标对象(target) 就是切入点和连接点所属的 类 StudentService

通知(Advice) 就是切面的实现,切面织入的目标对象,时间点(方法执行前 ,后,前后,异常)以及内容

顾问(Advisor) 其实就是通知的一个封装和延伸,可以将通知以更为复杂的方式织入到某些方法中 Aspect(切面):切入点+通知。

joinPoint(连接点): 目标对象,所有可以增强的方法。

Advice(通知/增强):增强代码。

PointCut(切入点):目标对象,将要和已经增强的方法。

Introduction(引入):声明某个方法或字段。

Target(目标对象):被代理的对象

AOP 代理(AOp Proxy) AOP框架创建的对象用来实现切面。

Weaving(织入):将通知应用到切入点的过程。

3.SCAN磁盘调度算法(电梯调度算法)

SCAN算法 也就是很形象的电梯调度算法。先按照一个方向(比如从外向内扫描),扫描的过程中依次访问要求服务的序列。当扫描到最里层的一个服务序列时反向扫描,这里要注意,假设最里层为0号磁道,最里面的一个要求服务的序列是5号,访问完5号之后,就反向了,不需要再往里扫。结合电梯过程更好理解,在电梯往下接人的时候,明知道最下面一层是没有人的,它是不会再往下走的。

Sample 假设磁头当前位于第99道,正在向磁道序号增加的方向移动。现有一个磁道访问请求序列为33,59,13,77,123,170,160,185, 采用SCAN调度(电梯调度)算法得到的磁道访问序列是( ) 123,160,170,185,77,59,33,13

4.分布式锁的几种实现方式

分布式锁的几种实现方式

5.哈夫曼树(Huffman树)

使用哈夫曼编码来编码字符串"aaaabbcd"时,得到的编码长度为多少?

6.四种线程池拒绝策略

四种线程池拒绝策略

7.JVM几种常见的垃圾收集器总结

JVM几种常见的垃圾收集器总结

8.进程P创建的若干个线程不能共享的是

共享的资源有 a. 堆 由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的) b. 全局变量 它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的 c. 静态变量 虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的 d. 文件等公用资源 这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。 独享的资源有 a. 栈 栈是独享的 b. 寄存器 这个可能会误解,因为电脑的寄存器是物理的,每个线程去取值难道不一样吗?其实线程里存放的是副本,包括程序计数器PC

9.tcp粘包怎么处理

1)发送方

对于发送方造成的粘包问题,可以通过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭算法。

(2)接收方

接收方没有办法来处理粘包现象,只能将问题交给应用层来处理。

(2)应用层

应用层的解决办法简单可行,不仅能解决接收方的粘包问题,还可以解决发送方的粘包问题。 1、定长包 2、包尾加\r\n(分隔符) 3、包头加上包体长度 4、更复杂的应用层协议

最新回复(0)