java面试题

redis有几种类型:
String(字符串类型) Set(集合类型) Hash(散列类型) List(列表类型) Zset(有序集合类型)
redis常用命令:
del key(删除键)、get key(取值) 、set key value (赋值)、exists key(判断键是是否存在)

使用Redis的好处:
速度快,因为数据都存储在内存中。
支持丰富的数据类型,String、Set、Zset、Hash、List
可用于缓存,消息,按照key设置过期时间,过期后自动删除

集群和分布式:
分布式是将某一个应用程序拆分成多个模块来进行部署,各个模块负责不同的功能。
集群是将某一个应用程序部署到多台服务器上面,然后在这些服务器上面做负载均衡处理。

Spring的核心:
IOC(控制反转) DI(依赖注入) AOP(面向切面编程)
ioc意味着将设计好的对象交给容器控制,

@Autowired的原理:
当Spring容器启动时,AutowiredAnnotationBeanPostProcessor将扫描Spring容器中所有的Bean,当发现Bean中拥有此注解时就找到和其匹配的Bean,并注入到对应的地方。

SpringMVC的流程:
用户发送请求到前端控制器,前端控制器接收到用户的请求之后调用Controller,然后通过前端控制器将业务的处理结果返回给视图渲染。

sql优化:
1、避免使用SELECT *
2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
3、如果确定查询一条数据使用limit 1
4、in 和 not in 也要慎用,否则会导致全表扫描

什么是索引:
索引是一个单独的、物理的数据结构
https://blog.csdn.net/fengdi51764/article/details/79536605

索引的分类:
唯一索引、常规索引、主键索引和全文索引
https://www.cnblogs.com/zsc1/p/9230096.html

索引的优缺点:
优点:可以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序;
缺点:索引本身也是表,因此会占用存储空间,随着数据量的增大,在修改数据表的同时还需要修改索引表;

对于Springboot的理解:
它简化了配置过程、部署过程、监控过程,同时它还集成了大量常用的第三方配置,让开发这能够更加专注业务逻辑的实现。

java项目开发中常见异常:
NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组下标越界异常)
FileNotFoundException(文件未找到异常)、NumberFormatException(字符串转换数字异常)
SQLException(数据库操作异常)、ClassNotFoundException(指定类不存在异常)
ClassCastException(数据类型转换异常)、NoSuchMethodEcxcetion(方法不存在异常)

SpringBoot开发中常用注解有哪些:
@SpringBootApplication:(=@SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan)
@SpringBootConfiguration:可以用于定义配置类,替换xml配置
@EnableAutoConfiguration:用于启用自动配置,该注解会根据添加的jar包自动配置项目的配置项
@ComponentScan:会扫描指定路径下的类,并将其加载到Ioc容器中。默认扫描@SpringBootApplication所在类的同级目录以及它的子目录。
@SpringBootApplication是一个组合注解,用于快捷配置启动类
@Service:(注解在类上,表示这是一个业务层bean)
@Component:(注解在类上,表示通用bean)
@Value:(注解在变量上,从配置文件中读取信息)

SpringMVC开发中常用注解有哪些:
@Controller:(注解在类上,表示这是一个控制层bean)
@RequestMapping:(注解在类或方法上,表示该控制器处理的所有请求都被映射到value属性所指示的路径下)
@Autowired:(做bean的注入时使用)
@PathVariable:(注解在变量上,将url中占位符参数绑定到控制器的方法参数中)
@RequestParam:(注解在变量上,将请求的参数绑定到控制器的方法参数中)
@ResponseBody:(注解在方法上,将返回的数据以json返回出去)

多线程实现的四种方式:
1、继承Thread类创建线程
2、实现Runnable接口创建线程
继承的扩展性不强,java只支持单继承,如果一个类继承Thread就不能继承其他的类了。

java中接口有哪几种实现方式:
1、可以通过implements来实现某个接口
2、可以通过匿名内部类实现

==和equals()的区别:
==做基本数据类型时,比较的是值,做引用类型时,比较的是内存中的地址。
equals()只能做引用数据类型比较,比较的是引用数据类型的值。

请分别介绍try catch finally 都是做什么使用:
try 捕获异常
catch 处理异常
finally 最终执行的语句

IO流的分类:
按照传输方向的不同:输入流和输出流
按照处理单位的不同:字节流和字符流
按照流的功能的不同:节点流和过滤流

什么是进程和线程:
进程:一个进程对应的是一个具体的应用程序。
线程:一个应用程序里面的多条执行点。

通过JDBC操作数据库步骤:
1、注册驱动(仅仅做一次)----------------Class.forName(“com.mysql.jdbc.Driver”);
2、建立连接(Connection)---------------Connection conn = DriverManager.getConnertion(url,user,password);
3、创建运行SQL的语句(Statement)-----Statement st = connection.createStatement();
4、运行语句----------------------------ResultSet rs = st.executeQuery(sql);
5、处理运行结果(ResultSet)-------------…
6、释放资源

JDK和JRE的区别:
JDK是Java开发工具包,提供了java的开发环境和运行环境。
JRE是Java运行环境。
如果你需要运行Java程序只需要JRE就可以了,如果需要编写Java程序需要安装JDK。

String类的常用方法有哪些?:
equals():字符比较
trim():去除字符串两端空白
length():获取字符串长度
substring():截取字符串
toLowerCase():将字符串转成小写字母
toUpperCase():将字符串转成大写字符
indexOf():返回指定字符串的索引值
charAt():返回指定索引值的字符
replace():字符串替换
split():分割字符串,返回一个分割后的字符串数组

Files 的常用方法有哪些?:
Files.exists():检测文件路径是否存在
Files.createFile():创建文件—这里会抛出一个IO异常
Files.createDirectory():创建文件夹
Files.delete():删除一个文件或目录
Files.copy():复制文件
Files.move():移动文件
Files.size():读取文件的内容长度
Files.write():写入文件

什么是 XXS 攻击,如何避免?:
XXS攻击又称CSS(跨站脚本攻击),其原理就是攻击者向有XSS漏洞的网站输入恶意的HTML代码,当用户浏览网站时,这段HTML代码会自动执行。
XXS防范:对输入和URL参数进行过滤!

什么是 CSRF 攻击,如何避免?:
CSRF被称为跨站请求伪造,攻击者通过伪造用户的浏览器请求,向访问一个用户自己曾经认证过的网站发送过去。
CSRF防范:
1、验证HTTP Refere字段
2、使用验证码
3、在请求地址中添加token并验证
4、在HTTP头中自定义属性并验证

try-catch-finally 中,如果catch中 return了,finally还会执行吗?:
一定会,catch中return会等待finally中的代码执行完成以后在进行执行。

Servlet的生命周期:
第一次访问Servlet时,服务器会创建一个Servlet实例,这个Servlet中的init()方法就会执行,
当用户请求时,会创建一个新的线程去访问Servlet中的service()方法,在service()方法中会根据不同的
请求方式调用不同的doPost或者doGet方法,当服务器关闭时,会调用destroy方法来销毁Servlet实例。

List Map Set 区别:
List存储有序不唯一元素的集合
Map存储无序唯一元素的集合
Set存储键值对形式的值,键可以唯一,值可以重复。

HashMap HashTable 区别:
HashMap可以接收为null的key和value,而Hashtable则不行,
Hashtable是线程安全的,可以多个线程共享一个HashTable,
HashMap效率比Hashtable高。

HashSet TreeSet 区别:
TreeSet是二叉树实现的,并且不允许存放null值
HashSet是哈希表实现的,里面的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复。

面向对象的特征有哪些方面?并说明java实现多态的机制是什么?:
封装、继承、多态
所谓的多态就是指一个类实例的相同方法在不同情况下有不同的表现形式。
集中体现在方法的重载和重写。

Java里的传引用和传值的区别是什么?:
传值:传递的是引用的副本,方法对副本的修改,不会影响到调用方。
传引用:传递的是引用的副本,会影响到调用方。

Java的"一次编写,处处运行"是如何实现的?:
Java所谓的一次编译到处运行是基于Java虚拟机实现的,因为Java的程序运行是在Java虚拟机中,
所以只要虚拟机就可以在任何系统上运行,虚拟机就相当于一个系统,所以只需要有Java虚拟机就可以运行Java程序。

八种基本数据类型的大小,以及他们的封装类:

基本类型大小(字节)默认值封装类
byte1(byte)0Byte
short2(short) 0Short
int40Integer
long80LLong
float40.0fFloat
double80.0dDouble
boolean-falseBoolean
char2\u0000(null)Character

QQ群:470765097

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值