tips
javase
- 数组 b 的第 3 个元素为 b[3],b[0] 为第 0 个元素而非第 1 个元素
- 方法的形参个数可以和实参可以不同。例如:void fun(int… nums) fun(1,2,3,4);
- java 只有值传递 (引用传递传递的也是值),值传递与地址传递从根本上就是一样的
- 一个类可以有多个父类 (爷爷)
- 构造方法的作用是初始化对象的属性,而不是创建对象,对象在 new 时创建
- 可变长参数的方法可以不传参数
- equals 方法先判断两个字符串是否相等,再判断属性值是否相等
- static 可以修饰静态内部类,该类的对象是由外部类创建
io 流
- io 流中没有接口,全是实例类和抽象类
- PrintWriter 只操作数据目的,不操作数据源
- FileReader 无法读取文件的字节数
- Reader 是抽象类,不是接口
Spring
- 简述 IoC
- Inverson of Control 控制反转
- 对象控制权的转移,对象从 new 变为 Spring 容器创建,其目的主要是用于用于主业务的解耦。其底层实现方式有反射、xml、工厂模式。典型应用为框架的整合。
- 简述 AOP
- Aspect Oriented Programming 面向切面编程
- 将交叉业务封装成切面,织入到主业务中,其作用在使交叉业务在主业务中的复用;底层实现为动态代理,其实现有 proxy 和 cglib;其应用有过滤器、事务处理、日志处理
- Bean 的装配方式
- 默认装配方式:
- 动态工厂 Bean:
- 静态工厂 Bean:
- Bean 的作用域
- singleton
- prototype
- request
- session
- globalsession
- Bean 的生命周期
- 构造器
- 属性赋值
- BeanNameAware
- BeanFactoryNameAware
- InitallizeBean afterPropertySet
- init-method
- 执行核心业务
- destroy-method
- BeanFactory 和 ApplicationContext 的区别
- BeanFactory:创建 Bean 的时机为调用 getBean(),优点为启动初始化快,不会占用太多系统资源;缺点为第一个用户的访问速度慢
- Applicationcontext:创建 Bean 的时机为容器的启动;其缺点为启动速度慢,占用系统的资源多;优点为第一个用户访问较快;
- ID 的注入方式
- 设值注入:通过无参构造函数实例化类,通过 set 方法给对象设值
- 构造注入:通过有参构造函数实例化类
- 名词解释:切面、织入、连接点、切入点、通知、顾问
- 切面:交叉业务
- 织入:将切面添加到主业务中的动作
- 连接点:接口中可以被织入的方法
- 织入点:被织入的连接点
- 通知:切入的时间点
- 顾问:一种通知和切入点表达式的封装
- SpringAOP 的通知有哪些类型
- @Before 前置通知
- @AfterReturning 后置通知
- @Around 环绕通知
- @AfterThrowing 异常通知
- @After 最终通知
- 事务的四大特性 1. 原子性 (Atomicity):事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。 2. 一致性 (Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。(张三转账给李四,张三减少的金额为李四增加的金额,或张三或李四的金额都不变,这为两种一致的状态) 3. 持久性 (lsolation):一个事务一旦提交,他对数据库中的数据影响是永久性的 4. 隔离性 (Durability):多个用户访问数据库时,每个用户都有一个事务,他们是相互独立互不影响的
- 事务的隔离级别 脏读 不可重复读 幻读 1. 读未提交 Y Y Y 2. 读已提交() N Y Y 3. 可重复读(MySQL 的默认隔离级别) N N Y 4. 串行化 N N N
- 事务的传播机制
- maven 的常用命令 1. compile 编译 2. test 测试 3. package 打包 4. install 安装 5. deploy 部署
SpringMVC
- Proxy 和 cglib 动态代理的区别
- proxy: jdk 内置 API,其增强的目标类必须有接口,代理对象所属的类型和目标类都是该接口的实现
- cglib:第三方,其有没有接口都可以,代理类为目标类的子类
- SpringAOP 事务管理器不同类型的异常有什么区别
- 非受查异常:回滚
- 受查异常:提交,配置 rollback 属性,指定特定异常回滚,rollback=Exception.class
- SpringMVC 的执行流程
- DispatcherServlet 中央调度器
- HandlerMapping 处理器映射器:根据请求路径查找对应的处理器
- HandlerAdapter 处理器适配器:提供不同接口的处理器的统一调用方式
- Controller 控制器: 处理请求
- ViewResolver 视图解析器:解析响应给用户的视图
- View 视图:浏览器最终得到的页面
- 监听器有什么作用,ContextLoaderListener 有什么作用
- 监听器:监听 Servlet 的三大域属性:域属性在创建、销毁、,属性值在修改、添加、删除 添加事件处理方法,特定事件发生时对应的方法就会执行,例子:论坛查看在线用户(监听用户登录的 session)
- ContxtLoaderListener:将 Spring 的 Bean 存储到 Servletcontext 中,保证 bean 值创建一次,以使用去 Servletcontext 去对应的 bean
- SpringMVC 的处理方法可以使用那些的参数和返回值
- 参数:
- HttpServeltRequst
- HttpServletResponse
- HttpSession
- Model
- 自定义请求参数
- 返回值
- 同步
- ModelAndView
- String
- void
- 异步
- void
- 自定义对象
- String(json 数据)
- 同步
- 参数:
- @RequstBody 和 @RsponseBody 的作用
- @RequestBody:将请求中的 JSON 转成对象
- @ResponseBody:将后端的数据序列化成 JOSN 注入到响应体中
- 底层:为注解驱动 + HttpMessageConveter(消息转换) + 序列化技术
- 图片长传对表单的要求
- 使用 post 提交
- 添加 enctype="mulipar/form-data"
- SpringMVC 拦截器的执行流程
- preHandle:是否放行(true 为放行),其执行的顺序为配置的先后顺序
- 所有的拦截器都放行后执行处理器方法
- postHandle:在处理器执行完之后执行,其执行的顺序和 preHandle 相反
- afterCompletion:只要有一个拦截器放行,对应的这个方法会压栈,最后一定执行
- preHandle:是否放行(true 为放行),其执行的顺序为配置的先后顺序
- SpringBoot 如何实现简化 Spring 开发
- 约定大于配置
- 场景启动器 Starter-xxx
- jar 包管理
- 自动配置类 xxxxAutoConfiguartion 自动创建当前场景中常用的 bean
- @SpringBootApplication
- SpringBoot 启动类的核心注解
- @EnableAutoconfiguration 自动包扫描
- SpringBoot 启动类的核心注解
- @SpringBootApplication
- 约定大于配置
- 举例说明单例模式和适配器模式在项目中的应用 1. 单例模式 1. JDK 1. Runtime 2. JAVAWeb 1. Servlet 3. Spring 1. bean 2. 适配器模式 1. SpringMVC 1. handlerAdapter 2. 处理器适配器:通过适配器对不同接口的处理器进行统一调用
- 下列注解的作用 1.
@Configuration:配置类,替换<bean>2.@Bean:用在配置类的方法上,方法的返回值为系统创建的一个 bean 对象 3.@ComponentScan包扫描<context:componte-scan base-package=""/>4.@PropertySource指定读取特定性的 properties 文件<context-placeholder/>5.@ConfigurationPropertiesXxxxProperties:+@ConfigurationProperties: 读取配置文件中的特定前缀的属性值赋值给 6.@SpringBootApplicationSpringBoot 启动类的核心注解@EnableAutoConfiguration自动包扫描
