java个人面试总结
Posted 微风太温柔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java个人面试总结相关的知识,希望对你有一定的参考价值。
string怎么转int类型
- 将String包装类型转化为Integer包装类型,再将包装类型转化为基本类型
list和set的区别
两个接口都是继承自Collection,是常用来存放数据项的集合,主要区别如下:
- List和Set之间很重要的一个区别是是否允许重复元素的存在,在List中允许插入重复的元素,而在Set中不允许重复元素存在。
- 与元素先后存放顺序有关,List是有序集合,会保留元素插入时的顺序,Set是无序集合。
- List可以通过下标来访问,而Set不能。
把password的123转成456
- user
- name password
- 张三 123
- update user set password = 456 where name = 张三
重写和重载的区别
- 1、重载:是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同
- 2、重写:是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型
- 3、重写是父类与子类之间多态性的一种表现
- 4、重载是一类中多态性的一种表现
请求转发(forward)和重定向(redirect)的区别?
- (1)请求转发是一次请求,一次响应; 而重定向是两次请求两次响应
- (2)请求转发前后地址栏地址不会发生变化; 而重定向前后地址栏地址会发生变化
- (3)请求转发前后的request对象是同一个,可以配合request域对象带数据到目的地; 而重定向前后的request对象不是同一个, 不能结合request域对象在重定向前后带数据.
- (4)请求转发要求两个资源必须属于同一个Web应用; 而进行重定向的两个资源可以是同一个Web应用,也可以不是同一个Web应用,甚至可以是来自于不同的主机或服务器
什么时候用请求转发(forward)?什么时候用重定向(redirect)?
- (1)如果希望跳转前后地址栏地址不会发生变化, 只能使用转发; 如果希望跳转前后地址栏地址会发生变化, 只能使用重定向
- (2)如果希望在跳转前后, 能够通过request对象带数据到目的地, 只能使用转发
- (3)如果仅仅是做一个跳转,没有其他要求,此时推荐使用转发(转发是一次请求,一次响应,可以减少访问服务器的次数,降低服务器的压力)
get和post请求的区别
- Get可以提交数据量较小,不隐私的数据,且数据在地址栏可见
- post可以提交数据量较大或者数据比较隐私 。在地址栏不可见
- 只有当使用表单(form)并且在表单上通过method属性指定提交方式为POST时,才是POST提交,其它的都是GET提交(AJAX除外)。
1) GET提交是在地址栏URL地址的后面通过问号拼接参数将数据提交给服务器由于数据会显示在地址栏上,如果是隐私数据,非常的不安全
- 2) 通过地址栏提交数据,数据量不能超过1KB或者4KB更不能提交文件POST提交:
1) POST不是通过地址栏提交数据,而是通过请求实体将数据带给服务器,由于数据是通过请求实体发送数据,相对更加安全
2) 通过请求实体提交数据,数据量理论上没有限制!
使用场景:
- 1)如果只是单纯做一个跳转,或者只是访问一个网页,请求中没有数据,都是使用GET提交。
- 2)如果在请求中有数据,但数据量不大,并且数据没有隐私性,也尽量使用GET提交。
- 3)如果在请求中有数据,数据量比较大或者数据较为隐私,此时推荐使用POST提交,
- 如果是提交文件,只能用POST提交。
GET和POST用哪一种
HTTP标准包含这两种方法是为了达到不同的目的。POST用于创建资源,资源的内容会被编入HTTP请示的内容中。例如,处理订货表单、在数据库中加入新数据行等。
当请求无副作用时(如进行搜索),便可使用GET方法;
当请求有副作用时(如添加数据行),则用POST方法。
一个比较实际的问题是:GET方法可能会产生很长的URL,或许会超过某些浏览器与服务器对URL长度的限制。
若符合下列任一情况,则用POST方法:
- 请求的结果有持续性的副作用,例如,数据库内添加新的数据行。
- 若使用GET方法,则表单上收集的数据可能让URL过长。
- 要传送的数据不是采用7位的ASCII编码。
若符合下列任一情况,则用GET方法:
- 请求是为了查找资源,html表单数据仅用来帮助搜索。
- 请求结果无持续性的副作用。
- 收集的数据及HTML表单内的输入字段名称的总长不超过1024个字符。
抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口吗,类可以实现多个接口吗
- 抽象类是使用abstarct修饰符修饰的类,一个类中含有抽象方法(被abstract修饰),那么这个类必须被声明为抽象类(被abstract修饰)。
- 抽象方法:只声明,不实现。具体的实现由继承它的子类来实现。
- 接口在java中是一个抽象类型,是抽象方法的集合。一个类通过继承接口的方式,从而继承接口的抽象方法。接口和抽象类一样不能被实例化,因为不是类。但是接口可以被实现(使用 implements 关键字)。实现某个接口的类必须在类中实现该接口的全部方法。
- 接口中没有构造方式(因为接口不是类)
- 接口中的方法必须是抽象的(不能实现)
- 接口中除了static、final变量,不能有其他变量
- 接口支持多继承(一个类可以实现多个接口)
区别
- 抽象类可以有构造器,而接口不能有构造器
- 抽象方法可以有public、protected和default这些修饰符
- 接口方法默认修饰符是public。不可以使用其它修饰
类只能继承一个类,可以多实现接口,接口可以继承多个接口
浅谈Redis:什么是缓存穿透,如何避免,什么是雪崩机制,如何避免
单线程
- 一共八种数据类型 常用的有五种 String、Hash、List、Set、SortedSet 不常用的 HyperLogLog、Geo、Pub/Sub
-
sql之left join,right join,inner join的区别
-
Spring Boot的核心注解是哪几个,它主要由哪几个注解组成
@SpringBootApplication,它主要由@SpringBootConfiguration,@EnableAutoConfiguration和@ComponentScan这三个构成
- @SpringBootConfiguration里面就只有一个@Configuration主要注解,也就是把该类变成一个配置类所以@SpringBootConfiguration就相当于@Configuration
- @EnableAutoConfiguration是由 @AutoConfigurationPackage和@Import(EnableAutoConfigurationImportSelector.class)这两个组成的
- @AutoConfigurationPackage是自动配置包,包括了一个@Import注解,给容器导入了自动配置包的注册器,AutoConfigurationPackages.Registrar.class:将主启动类的所在包及包下面所有子包里面的所有组件扫描到Spring容器
常用的消息中间件有哪些
- mq组件 消息队列 一共四种
ActiveMQ 用的不多 有些过时 它的单机吞吐量是万级,一些小的项目已经够用了,但对于高并发的互联网项目完全不够看。在高可用上,使用的主从架构的实现。在消息可靠性上,有较低的概率会丢失数据。
- 综合以上,其实这个产品基本可以弃用掉了,我们完全可以使用RabbitMQ来代替它。
- RabbitMQ
- Kafka
- RocketMQ
AOP和IOC的区别
Spring Boot和Spring的区别
Spring Mvc运行过程
Java对锁的了解
公平锁
- 是指多个线程按照申请锁的顺序来获取锁
非公平锁
- 指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,有可能会造成优先级或者饥饿现象
- 对比:一般默认用非公平锁,优点在于吞吐量比公平锁要大。
可重入锁
- 递归锁,是指在同一个线程的外层方法获取锁的时候,在进入内层方法会自动获取锁。
独享锁
- 指该锁一次只能被一个线程所持有
共享锁
- 值给锁可以被多个线程持有
创建线程的三种方法
- 继承Thread类创建线程
- 实现Runnable接口创建线程
- 使用Callable和Future创建线程
session
- 会话对象 比较安全
- 一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
Session和Cookie的主要区别
- Cookie是把用户的数据写给用户的浏览器。
- Session技术把用户的数据写到用户独占的session中。
- Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
服务器是如何实现一个session为一个用户浏览器服务的
- 服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。
八大基本类型
整型(Int)
- 32位,占用空间为4字节,最大数据存储量为2³² - 1,数据范围为-2³¹ ~ 2³¹-1
整型(Byte)
- 8位,占用空间为1字节,最多存储数据量是255,存放的数据范围为-128~127之间
整型(Short)
- 16位,占用空间为2字节,最大数据存储量为65536,数据范围为-32768~32767
长整型(Long)
- 64位,占用空间位8字节,最大数据存储量为2⁶⁴-1,数据范围为-2⁶³~2⁶³-1
单精度浮点型( Float)
- 32位,占用空间为4字节,数据范围为3.4e45~1.4e38,直接赋值时必须在数字后加上f或F
双精度浮点型( Double)
- 64位,占用空间为8字节,数据范围为4.9e324~1.8e308,赋值时可以加d或D,也可以不加
字符类型(Char)
- 16位,存储Unicode码,用单引号赋值
布尔型(Boolean)
- 占内存1字节,可存储true与false两个数值,分别表示逻辑的真与假
范围从小到大依次为:byte、short、char、int、long、float、double
说明==和equals()的区别?
查错:public class Something{ void doSomething() {
=""; int l = s.length(); }}
try {}里有一个return 语句 ,那么紧跟在这个try后的finally {} 行,是否会执行,什么时候执行,在return前还是后
罗列Servlet的生命周期
描述Cookies和Session区别,及应用范围
- HTTP 是无状态协议,服务器单从网络连接上无从知道客户身份。
- Cookie是客户端保存用户信息的一种机制,Cookie技术通过请求和响应报文中写入Cookie信息来控制客户端的状态。
- cookie数据存放在客户的浏览器(客户端)上,session数据放在服务器上,但是服务端的session的实现对客户端的cookie有依赖关系的;
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
- 单个cookie在客户端的限制是3K;
jsp及Servlet中的请求转发分别如何实现,并介绍实现的区别
简单描述数据库连接池的优点和原理
在应用中,Java对数据库记录的分页显示是如何实现的,你觉得应当注意哪个方面提升其执行效率
你觉得应当从哪几个方面来提高WEB应用系统的安全性
写一个简单的采用了工厂设计模式的Java代码出来
以上是关于java个人面试总结的主要内容,如果未能解决你的问题,请参考以下文章