Java面试总结

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.csdn.net/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. 

Tomcat

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值