赞
踩
1.面向对象(工作时间不是很长的出现频率)
什么是面向对象?什么是面向过程?
面向过程:
例子:我要洗衣服 把衣服放进洗衣机→加入洗衣液→关上洗衣机门→按下启动按钮
面向对象:
例子:我要洗衣服 对象有 我 洗衣机
我要做的事: 把衣服放进去 加入洗衣液 关门 按启动按钮
洗衣机要做的事: 清洗
以上可以看出,面向过程比较高效比较直接,面向对象更易于扩展丶维护和复用
封装
明确标识出允许外部使用的所有成员函数和数据项,内部细节对外部调用透明,外部调用无需修改和关心内部是如何实现的,用就可以了
例1:Javabean
属性私有,提供getset对外访问,属性的赋值和获取逻辑只能由Javabean本身决定,不能外部随意修改
例2:orm框架
操作数据库不需要关心是如何建立链接的,SQL是如何执行的,只需要引入mybatis调用方法就行
继承
关键字:extends
子类继承父类的所有属性,只需要扩展自己的个性化
多态
使用条件:继承丶方法重写和父类引用指向子类对象
弊端:无法调用子类特有功能,子类的方法不是重写父类的就不行
2.jdk丶jre丶jvm区别和联系
jdk
提供给开发者使用的工具
jre
运行环境
jvm
虚拟机,解释class文件,一次编译到处运行,包含多版本系统解释
jdk包含jre→jre包含jvm
3.==和equals
==对比的是栈中的值,基本数据类型是存在栈中,引用类型是是堆中对象的地址
equls默认也是使用的==比较,通常会重写
- public class StringDemo{
- public static void main{
-
- String str1 = "hello";//存在堆中的常量池
- String str2 = new String("hello");//存在堆中
- String str3 = str2;
- System.out.println(str1 == str2)://f
- System.out.println(str1 == str3)://f
- System.out.println(str2 == str3)://t
- System.out.println(str1.equals(str2))://t
- System.out.println(str1.equals(str2))://t
- System.out.println(str2.equsla(str3))://t
- }
-
- }
4.ArrayList和LinkedList
ArrayList:基于动态数组、查询快 插入删除慢
连续内存存储,适合下标访问(采用一个元素所占的内存长度*下标位置就可以很快的找到元素所在下标的值)
什么是动态数组?
比如静态数组定义长度10,超过10个就会下标越界
动态数组存储超过定义长度就会新建一个数组自动扩容,把之前数组的内容移入新的数组内,原来的数组就会被回收。
使用尾插法(只在数组尾部插入不在头部和中间插入)和指定初始容量(初始100容量运行是就会现在内存中开辟100个空间,初始容量越大越浪费内存)可以提升性能,甚至超过linkedList
LinkedList:基于链表、查询慢 插入删除快
分散在内存中,根据链表的指针一个一个的找,
需要大量创建node对象,无论放什么元素都会创建一个node对象
遍历LinkedList必须使用iterator不能使用for循环,因为取得某一元素都需要对list重新遍历,性能消耗大
5.String StringBuffer StringBuild
String
使用final修饰,不可改变,每次操作都会生成新的string对象
StringBuffer
在原对象的基础之上操作,方法都是使用synchronized锁修饰的,线程安全
StringBuild
在原对象的基础之上操作,线程不安全
什么是线程安全与不安全?
线程安全就是多线程环境,共享变量,保证值不会变不会被修改
1.spring的两大核心思想
IOC
控制反转:把对象的管理交给ioc容器去管理(比如创建、属性设置、初始化、销毁)
依赖注入:@Autowired和@Resource,@Autowired注解是spring提供的而@Resource注解是有J2EE提供的,@Autowired注解默认通过bytype而@Resource注解默认通过byName注入,
AOP
面向切面编程是对oop面向对象的一种补充,spring AOP 是利用动态代理机制如果一个bean实现了接口那么就会采用jdk动态代理生成该接口的代理对象,AOP的使用场景包括日志记录,性能统计,安全控制,事务处理,异常处理等等。
2.spring的懒加载和非懒加载有什么区别
懒加载:需要使用对象的时候才创建
非懒加载:也叫迫切加载,容器启动的时候就创建对象
3.bean的四种注册方式及注册Bean的注解
1.普通注册方式,直接通过class注册
2.静态工厂方式
3.实例工厂方式
4.FactoryBean方式
控制层:@controller@RestController
服务层:@Service
持久层:@Repository
一般类:@Component
配置类:@Configuration
4.Bean的生命周期
实例化- -属性注入- -初始化- -使用- -销毁
5.BeanFactory和ApplicationContext有什么区别
BeanFactory是ioc容器的核心,包含了bean的最基本的方法如实例化、配置、管理、获取bean的方法
ApplicationContext是BeanFactory的子接口除了继承了bean的所有方法还有环境、国际化、资源、事件等服务相关的接口
6.@Transactional
什么是事务
开启事务的条件?
在 Java 中,事务通常用于确保一系列操作在数据库中作为单个单元执行,事务主要应用于数据库操作,并且可以通过使用 Java Database Connectivity (JDBC) API 或 Java 与数据库交互的其他框架(例如 Spring, Hibernate 等)来处理
数据库支持:首先,数据库必须支持事务处理。一些数据库,如 MySQL 的 MyISAM 存储引擎不支持事务,而 InnoDB 存储引擎则支持。
使用 ORM 框架:当使用像 Hibernate 或 Spring 这样的 ORM (对象关系映射) 框架时,事务管理可以通过注解或配置来更加简洁地处理。例如,在 Spring 中,可以使用 @Transactional
注解来标记一个方法,表明该方法应该在一个事务中运行。
隔离级别和传播行为:在复杂的应用程序中,可能需要设置事务的隔离级别和传播行为。这些设置控制并发事务如何交互以及在调用其他事务方法时事务如何传播。
@Transactional注解通常用在service层,因为业务逻辑通常在这一层进行,而事务管理是业务逻辑的一部分。
使用@Transactional什么情况下会导致事务不会回滚?
1.抛出异常throws IOException
2.捕获异常使用try catch
3.数据库不支持事务
等等.....
7.常见Http状态码
8.Servlet的生命周期
1.初始化后调用 init()方法
2.调用service()方法来处理客户端的请求
3.销毁前调用destory()方法
4.servlet由jvm垃圾回收器进行回收
9.Session和cookie有什么区别
get是把参数放在url地址中,长度有限制,一般用于查找
post是吧参数放到request body中,更安全,一般用于添加、修改操作
11.SpringMVC常用的注解有哪些
12.拦截器和过滤器的本质
过滤器(Filter):前端访问后台一堆请求过来时,过滤掉一些不合法的请求
拦截器(Interceptor):执行一个方法时,在方法执行前后打印日志
1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
3. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
13.@SpringBootApplication注解的含义
14.SpringBoot如何做全局异常处理
事务(transaction)是指业务逻辑上对数据库进行的一系列持久化操作,要么全部成功,要么全部失败。在主启动类上加上@EnableTransactionManagement开启事务管理器,在具体的实现层service类上加上@Transactional 实现事务
16.SpringBoot启动流程
17.SpringBoot自动配置原理
1.MyBatis中${}取值和#{}取值的区别
2.MyBatis关联查询中,延迟加载和饥饿加载的区别
3.MyBatis对象关联查询和集合关联查询怎么做
4.MyBatis一级缓存和二级缓存的区别
5.Mybatis的mapper如何传递多个参数
6.MyBatis的动态SQL标签有哪些?如何动态修改SQL?
7.为什么要使用连接池
1.讲一下你理解的Redis
2.Redis的数据存储结构有哪些,他们的使用场景分别是什么
4.Redis持久化是什么?有几种方式
5.Redis用在哪些业务上
6.淘汰策略有哪些?
7.Redis事务和Mysql事务的区别
8.为什么要使用Redis做缓存
9.怎么保证Redis和Mysql的一致性
1.RabbitMQ的使用场景
2.RabbitMQ如何防止消息丢失
3.如何防止消息重复消费
4.什么是幂等
重复请求结果最终只算一次,保证结果的唯一性
1.什么是集群
2.什么是负载均衡
3.集群和分布式的区别
4.SpringCloud有哪些常用组件
5.Spring,SpringBoot和SpringCloud的关系以及区别
1.创建线程是几种方式
2.Synchronized 和 lock的区别
3.悲观锁和乐观锁
4.什么是线程安全?什么是不安全?如何保证线程安全?
线程安全(Thread Safety)是指程序的一个特性,它在多线程环境下能够正常并且可预测地运行。当多个线程访问共享数据或资源时,如果这个过程无需额外的同步或协调,并且结果符合预期,那么可以称之为线程安全。
线程不安全,正是与线程安全相对的概念。当多个线程访问共享资源时,如果不采取适当的同步机制,可能会导致数据的不一致性或其它不可预测的结果。这通常是由于线程间的竞态条件(race conditions)引起的,即多个线程同时修改共享数据,导致数据状态不可预测。
使用synchronized关键字
使用volatile关键字
使用锁:如ReentrantLock
。使用这些锁,你可以实现更复杂的锁策略。
5.线程池的作用
6.线程池的执行流程
7.线程池拒绝策略有几种
2.Mysql索引有哪些类型
3.索引方式有哪些
4.InnoDB的索引结构和MyIsam的索引结构有什么区别
5.哪些因素会造成索引失效
6.优化SQL你
7.哪些因素可能会造成数据库性能问题
8.mysql存储引擎有哪些,有什么区别,如何选择
1.登录实现方案
2.讲讲Git相对于SVN的区别
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。