2021.6.7
java
1. java集合有哪些?
Java集合有哪些?
java集合分三种,List、Set、Map,这三种集合适用于不同的场景
List:适用于有序,可重复的集合
Set:适用于不可重复集合
Map:适用于键值对的存储
注:通常List与Map最为常用
每个集合常用的实现类有哪些?
List: ArrayList与LinkedList
Set: HashSet与TreeSet
Map: HashMap与TreeMap与HashTable
每个集合不同的实现类的区别是什么?
List:
ArrayList:数组实现的,常用于查询,因为他不需要移动指针,玩的是数据
LinedList: 链表实现的,常用与增删改查,因为他不需要移动数据,玩的是指针
Vectory: 线程安全的,出现问题会抛出异常需要手动捕获(不常用)
Stack:继承自Vector,实现一个后进先出的堆栈(不常用)
ArrayList和linedList的内存分配方式,内存不够了如何增加内存?
Set:
HashSet:哈希表实现的, 数据无序, 可以放一个Null值,存储单列数据
TreeSet:二叉树实现的,数据自动排序,不允许放null值,存储单列数据
Map:
TreeMap: 二叉树实现的,数据有序,HashTable 与 HashMap无序
HashMap:线程不安全,效率快,适用于单线程操作
HashTable:线程安全,因为底层都加了synchronized关键字来确保线程同步,适用于多线程操作
HashMap与HashMap 两者计算hash的方法不同
Hashmap的底层实现?
HashMap由数组和链表来实现对数据的存储
HashMap采用Entry数组来存储key-value对,每一个键值对组成了一个Entry实体,Entry类实际上是一个单向的链表结构,它具有Next指针,可以连接下一个Entry实体,以此来解决Hash冲突的问题。
总结
List、Set实现Collection接口, Map是个顶级接口
List、Set存储单列数据,Map存储键值对
List有序可重复; Set不可重复并且最多只能存一个Null;Map键值对存储并且键不可重复,值可以重复
2. 面向对象的特征有哪些方面?
抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。
封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
多态:用同样的对象引用调用同样的方法但是做了不同的事情。
3. Java异常有哪几类?
Nullpointerexception "空指针异常"
classnotfoundexception "指定的类不存在"
RuntimeException "运行时异常"
IOException “I/O异常“”
java异常处理?
try:用来指定一块预防所有异常的程序
catch:紧跟在try后面,用来捕获异常
throw:用来明确的抛出一个异常
throws:用来标明一个成员函数可能抛出的各种异常
finally:确保一段代码无论发生什么异常都会被执行的一段代码。
I/O流异常如何处理?
try catch,将关闭fw.close()操作放到finally里面,则无论如何就会关闭。
4. Collection 和 Collections的区别
Collection是集合的最顶层接口,这个接口下有List和Set两个子接口
Collections是针对集合的一个工具类,里边有很多静态方法,用于集合的搜索排序等。eg:Collections.sort()
5. 反射的机制是什么? (https://www.cnblogs.com/qiuhaitang/p/12563368.html)
反射机制:指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对任意一个对象,都能调用它的任意一个方法。这种动态获取信息,以及动态调用对象方法的功能,叫做java语言的反射机制。
获取反射常使用的3种方式?
通过 new 对象实现反射机制; (通过 Object 类的 getClass )
通过路径实现反射机制;(使用 .class 的方式)
通过类名实现反射机制。(使用 Class.forName 方法)
//获取反射机制的3中方式;
//方法一:通过建立对象;
User user = new User();
Class userClass1 = user.getClass();
System.out.println(userClass1.getName());
//方法二:通过所在路径(相对路径);
Class userClass2 = Class.forName("fanShe.User");
System.out.println(userClass2.getName());
//方法三:通过类名;
Class userClass3 = User.class;
System.out.println(userClass3.getName());
6. 构造函数
SSM框架
1. spring,springMVC,springboot的区别有哪些?
①spring和springMvc:
spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP)。
springMvc是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分;
②springMvc和springBoot:
springMvc属于一个企业WEB开发的MVC框架,涵盖面包括前端视图开发、文件配置、后台接口逻辑开发等,XML、config等配置相对比较繁琐复杂;
springBoot框架相对于springMvc框架来说,更专注于开发微服务后台接口,遵循默认优于配置,简化了插件配置流程,不需要配置xml,相对springmvc,大大简化了配置流程;spring Boot实现了自动配置,降低了项目搭建的复杂度,内置tomcat服务器。springboot为简化Spring配置的快速开发整合包。
2. AOP(面向切面),实现的几种方式?
Spring提供了4种实现AOP的方式 :
①经典的基于代理的AOP
②@AspectJ注解驱动的切面
③纯POJO切面
④注入式AspectJ切面
AOP切面的好处?
3. 常用的注解有哪些?
**一.用于创建对象的注解**
作用:和在xml配置文件中编写一个<bean>标签实现的功能一样。
1.@Component : 用于把当前类对象存入Spring容器中。
属性:value --- 用于指定bean的id。如果不写该属性,id的默认值是当前类名,且首字母改为小写。
2.@Controller : 一般用在表现层。
3.@Service : 一般用在业务层。
4.@Repository : 标注一个DAO组件类,在数据访问层使用(dao层)
备注:其中2,3,4注解的作用和属性与@Component 一模一样,他们三个是Spring框架为我们提供的三层架构使用的注解,使我们对三层对象更加清晰。
**二.用于注入数据的注解**
作用:和在xml配置文件中的<bean>标签中写一个<property>标签的功能一样。
1.@Autowired : 自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功。可以作用在变量或者方法上。
三、其他注解
@Configuration : 用于指定当前类是一个配置类。
@RequestMapping:是一个用来处理请求地址映射的注解。
@RequestParam:在SpringMvc后台进行获取数据,一般是两种。
@ResponseBody:该注解用于将Controller的方法返回的对象。
4.
mybatis
1. resultMap 与resultType的区别是什么?
resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。
resultMap:当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。
2. # 和 $ 的区别? https://blog.youkuaiyun.com/yyj108317/article/details/107976305
#{} 解析的是占位符?可以防止SQL注入,比如打印出来的语句 select * from table where id=?
${} 仅仅是字符串替换,是不能防止SQL注入,打印出来的语句 select * from table where id=2 实实在在的参数
mysql
1. mysql的隔离级别有哪些?
读取未提交内容 (脏读)
读取已提交数据
可重度
可串行化
2. mysql的索引是如何工作的?原理?
3. 左连接与内连接的区别?
左连接:以左表为主,显示左表所有的数据,右表中没有的显示null值。
右连接:以右表为主,显示右表所有的数据,左表中没有的显示null值
内连接:显示左边右边共有的
4. mysql 批量处理数据,如更新
5. sql语句效率优化?
要善用 EXPLAIN 查看SQL执行计划
select语句中避免使用 ‘ * ‘
使用where限定具体要查询的数据,避免多余的行
6.mysql联合索引?
redis
Redis 是一种基于内存的数据库,并且提供一定的持久化功能,它是一种键值(key-value)数据库,使用 key 作为索引找到当前缓存的数据,并且返回给程序调用者。
1. redis的数据类型有哪些?
字符串(String)、列表(List)、集合(set)、哈希结构(hash)、有序集合(zset)和基数(HyperLogLog),详见下图
2. redis用在那些场景?
算法
1. 冒泡排序?
2. 队列的特性?
先进先出
3. 二分排序有前提限制条件吗?
有,数组必须要有序
二分查找的复杂度O($log_n^2$),,最大复杂度,O(n)
http
1. http的状态码
200 服务器已成功处理了请求
404 服务器找不到请求的网页
403 服务器拒绝请求
linux
1. 常用的linux下的命令:
ls 显示文件或目录
mkdir 创建目录
cd 切换目录
cat 查看文件内容
cp 拷贝
rm 删除文件(参数:-r 递归 -f 强制删除)
tail 查看文件后几行(参数:-f 不停的更新 -n 多少行)
head 查看文件前几行
3.