Home

一些学习相关的笔记都会放在该网站上。

本人也是在校学生,还在学习中,内容会有不全或者错误的地方,还请指正。

本站的所有内容来源会是视频,网站,书籍等,若有侵权请联系我,我会将内容删除,谢谢!

A homepage section

学习的笔记

About

在学课程:

  • C++
  • Java
  • Oracle
  • MySQL
  • Python人工智能

Blog

Java实习面试:访问修饰符

default:在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法 private:在同一类内可见。使用对象:变量,方法 public:对所有类可见。使用对象:类,接口,变量,方法 protected:对同一包内的类和所有子类可见。使用对象:变量,方法 默认访问修饰符-不使用任何关键字 使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 而接口里的方法默认情况下访问权限为 私有访问修饰符-private 私有访问修饰符是最严格的访问权限,被声明为private的方法,变量和构造方法只能被所属类访问,并且类和接口不能声明为private。 声明为私有访问类型的变量只能通过类中公共的getter方法被外部类访问。private访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。 公有访问修饰符-public 被声明为public的类,方法,构造方法和接口能够被任何其他类访问。 如果几个相互访问的public类分布在不同的包中,则需要导入相应public类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。 受保护的访问修饰符-protected 子类与基类在同一包中:被声明为protected的变量,方法和构造器都能被同一个保重的任何其他类访问。 子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而其他类不能访问基类实例的protected方法。 参考 Java 修饰符

Java实习面试:简单谈谈AOP

AOP与OOP AOP面向切面编程,是OOP的补充和完善。 OOP引入封装,继承,多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。OOP只允许开发者定义纵向的关系,不适合定义横向的关系,如日志,事务,安全等。而AOP技术利用一种称为“横切”的技术,剖解开封装的对象内部,并将影响多个类的公共行为封装到一个可重用模块Aspect,即切面。 AOP核心概念 横切关注点:对哪些方法进行拦截,拦截后怎么处理 切面:类是对物体特征的抽象,切面就是对横切关注点的抽象 连接点:被拦截到的点,因为Spring只支持方法类型的连接点,所以Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器 切入点:对连接点进行拦截的定义 通知:所谓通知指的是拦截到连接点之后要执行的代码,通知分为: 前置 后置 异常 最终 环绕通知 目标对象:代理的目标对象 织入:将切面应用到目标对象并导致代理对象创建的过程 引入:在不修改代码的前提下,引入可以在运行期为类动态的添加一些方法或字段 切面 “切面“简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。使用横切技术,AOP把软件系统分为两个部分:核心关注点和横切关注点,业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。 Spring中的AOP Spring中AOP代理由Spring的IOC容器负责生成,管理。它的依赖关系也由IOC容器负责,因此,AOP代理可以直接使用容器中的其他bean示例作为目标,这种关系可由IOC容器的依赖注入提供。 Spring创建代理的规则为: 默认使用JDK动态代理来创建AOP代理,这样可以为任何接口示例创建代理 当需要代理的类不是代理接口时,Spring会切换为使用CGLIB代理,也可以强制使用CGLIB代理 参考 Spring AOP 详解

Java实习面试笔记:线程池的参数

corePoolSize 线程池核心线程数量,核心线程不会被回收,即使没有任务执行,也会保持空闲状态。如果线程池中的线程少于此数,则在执行任务时创建。 线程池刚创建时,线程数量为0,当每次执行execute添加新的任务时,会在线程池创建一个新的线程,知道线程数量达到corePoolSize为止。 maximumPoolSize 池允许最大的线程数,当线程数量达到corePoolSize,且workQueue队列塞满任务之后,继续创建线程。 线程数量大于corePoolSize但不会超过maximumPoolSize,如果超过maximumPoolSize,就会抛出异常。 keepAliveTime 超过corePoolSize之后的“临时线程”的存活时间。 unit keepAliveTime的单位 workQueue 当前线程数超过corePoolSize时,新的任务会处在等待状态,并存在workQueue中,BlockingQueue是一个先进先出的阻塞式队列实现。 ThreadFactory 创建线程的工厂类,通常我们会自定一个threadFactory设置线程的名称,这样我们就可以知道线程是由哪个工厂类创建的,可以快速定位。 handler 线程池执行拒绝策略,当线程数量达到maximumPoolSize大小,并且workQueue也已经塞满了任务的情况下,线程池会调用handler拒绝策略来处理请求。 系统默认的拒绝策略有以下集中: AbortPolicy:线程池默认的拒绝策略,该策略直接抛出异常 DiscardPolicy:直接抛弃不处理 DiscardOldestPolicy:丢弃队列中最老的任务 CallerRunsPolicy:将任务分配给当前执行execute方法线程来处理。 还可以自定义拒绝策略,只需要实现RejectedExecutionHandler接口即可 线程池添加任务的整个流程 线程池刚刚创建时,线程数量为0 执行execute添加新的任务时会在线程池创建一个新的线程 当线程数量达到corePoolSize时,再添加新任务则会将任务放到workQueue队列 当队列已满放不下新的任务,再添加新任务则会继续创建新线程,但线程数量不超过maximumPoolSize 当线程数量达到maximumPoolSize时,再添加新任务则会抛出异常。 参考 Java线程池详解:ThreadPoolExecutor、Executors 你都理解创建线程池的参数吗?