java+mysql面试题

Java

1.Object方法equals()hashcode()的联系
		//equals() 相等则 hashcode()一定相等
		//hashcode() 相等 equals()	不一定相等
		//重写equals()方法必须重写hashcode()
		//例外情况:equals不相等,hashcode相同
2.java中==equals()的区别,equals方法没有被重写时,如何比较。
	==比较的是内存地址
	equals()被重写前默认使用==
3.a=a+b 和 a+=b 的区别
	byte a=12;
	byte b=12;
	a=a+b;//是否正确 为什么
		//错误,因为+先要转化为int后在计算
	a+=b;//是否正确 为什么
		//正确,自动强转
	或者
	short a=12;
	a=a+1;
	a+=1;
4.表达式 3*0.1==3 结果是什么
	//用double,float这类基本类型就会出现这种误差,如果要精确的值,可以考虑用BigDecimal类型来计算。
5.int32位系统和64位系统中长度是否相同,占多少位。
6.ArrayList和LinkedList的区别。
7.&&&有什么区别。
8.集合与数组之间的转换
9.去除string中的重复内容
10.方法重载和重写的区别(或overload和override、java中的多态)
(1)方法重载【静态多态】:发生在同一个类中,方法名必须相同,参数类型、个数、顺序不同,与返回值类型。访问修饰符无关,发生在编译时。
(2)方法重写【动态多态】:
	a、发生在父子类中,方法名、参数列表必须相同
	b、返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;
	c、以下不能被重写:privatefinalstatic、构造方法
	d、抽象方法必须被重写,否则类就会变为抽象类
	e、父类引用指向子类对象,只能调用父类中定义的方法或被字类重写的方法
(3)注意
	a、所有方法都可以被重载(包括抽象方法、构造方法等)
	b、方法签名:方法声明的两个组件构成了方法签名 - 方法的名称和参数类型。
11.java中创建对象的方式有哪些
(1)通过new语句实例化一个对象
	1-使用Class对象的newInstance()方法来创建对象
	2-通过Constructor类的newInstance()方法获取
(2)通过反射机制动态创建对象
(3)通过clone()创建对象
(4)通过反序列化的方式创建对象
	1-对象需要继承Serializable接口
	2-MapHashMap没有实现序列化,所以不能在网络间直接传递,必须需要一个序列化后的java类进行包装后,才能传递。
	3-禁止序列化修饰符transient
12.finalfinally和finalize的区别
(1finallyreturn之前执行。System.exit(0);finally不执行。
(3)finalize是Object的方法,表示在jvm进行垃圾回收时用于释放资源,析构函数。
(4)析构函数(destructor)与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统会执行析构函数。在java中,我们一般用不到它,因为 java 有自动内存回收机制,无须程序员手动释放。java 对象析构时会调用 finalize() 方法。
13.在继承关系中,构建字类对象的执行顺序
  ① 父类的静态代码块
  ② 子类的静态代码块
  ③ 父类的非静态代码块
  ④ 父类的无参构造方法
  ⑤ 子类的非静态代码块
  ⑥ 子类的无参构造方法
  ⑦ 子类被调用的重写父类的方法
 14.写出你知道的运行时异常(不少于三个)
	ArithmeticException - 算术运算中,被0除或模除
	ArrayIndexOutOfBoundsException - 数组越界访问
	IllegalArgumentException - 方法的参数无效
	NullPointerException - 空指针异常
	NoClassDefFoundException - JAVA运行时系统找不到所引用的类
15.java提供了两种异常机制。一种是运行时异常(RuntimeExepction),一种是检查式异常(checked execption)。
(1)检查式异常:我们经常遇到的IO异常及sql异常就属于检查式异常。对于这种异常,java编译器要求我们必须对出现的这些异常进行catch 所以 面对这种异常不管我们是否愿意,只能自己去写一堆catch来捕捉这些异常。
(2)运行时异常:我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。
16.throwthrows 的区别?
throw表示方法内抛出某种异常对象
throws表示方法头抛出异常对象
17.抽象类和接口的区别
 (1)相同点
	①接口和抽象类都不能实例化
	②都位于继承的顶端,用于被其他实现或继承
	③都包含抽象方法,其子类都必须覆写这些抽象方法
 (2)不同点
	①抽象类使用abstract关键字声明,接口使用interface关键字声明
	②子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现
	③子类使用implements关键字来实现接口。它需要提供接口中所有声明的方法的实现
	④抽象类可以有构造器,接口不能有构造器
	⑤抽象类中的方法可以是任意访问修饰符,接口方法默认修饰符是public。并且不允许定义为 private 或者 protected
	⑥一个类最多只能继承一个抽象类,一个类可以实现多个接口
⑦抽象类的字段声明可以是任意的,接口的字段默认都是 staticfinal18.jdk和jre
 (1)jdk
	①提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。
	②所以安装了JDK,就无需再单独安装JRE了。
	③其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等
	④jdk又称sdk【软件开发工具包】
 (2)jre
	①包括Java虚拟机和Java程序所需的核心类库
	②核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等.
 (3)JVM
	①Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
19.如何遍历Map集合
 (1)方法一:通过Map.keySet,遍历key和value
 (2)方法二:通过Map.values(),遍历所有的value,但不能遍历key
 (3)方法三:通过Map.entrySet,遍历key和value
 (4)方法四:通过Map.entrySet,使用iterator遍历key和value
20.round(12.5),floor(12.5).ceil(12.1)的结果
 (1)floor返回的是小于或等于该数值的最大的整数 12
 (2)ceil返回的是大于或等于该值的最小的整数 13,一般用于分页
 (3)round四舍五入,不再多说(0.5向下取整) 13
21.普通类和抽象类的区别
 (1)普通类不能包含抽象方法,抽象类可以包含抽象方法。
 (2)抽象类不能直接实例化,普通类可以直接实例化。
 (3) final 不能修饰抽象类
22.OOP和OOM

算法

二分法:
	二分法查找(Binary Search)也称折半查找
冒泡排序:
	对数组中相邻的数据,依次进行比较;
	如果前面的数据大于后面的数据,则把前面的数据交换到后面。经过一轮比较之后,就能把数组中最大的数据排到数组的最后面了;
	再用同样的方法,把剩下的数据逐个进行比较排序,最后得到就是从小到大排序好的数据。
选择排序:
	选择排序(Selection Sort)算法也是比较简单的排序算法,其实现思路是每一轮循环找到最小的值,依次排到数组的最前面,这样就实现了数组的有序排列。

mysql

1.数据库中如何查询列中的值是否带有小数点
	//1、round(x,d)  四舍五入 x指要处理的数,d是指保留几位小数
	//这里有个值得注意的地方是,d可以是负数,这时是指定小数点左边的d位整数位为0,同时小数位均为0;
	//2.select ceil(45.1),floor(45.1) 结果是ceil:46  floor:45
	//3.select ceil(45),floor(45) 结果是ceil:45  floor:45
	//所以可以通过:
	select * from 表名 where userscore<ceil(userscore) 
	select * from 表名 where userscore>floor(userscore) 
	select * from 表名 where ceil(userscore)<>ceil(userscore) 
	//这三种方式来进行判断是否为小数。

2.表中的重复数据仅保留一条,删除多余的数据
	//注意:在MySQL中,写SQL语句的时候 ,可能会遇到You can't specify target table '表名' for update in FROM clause这样的错误。
	//它的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。
	//问题解决,将SELECT出的结果再通过中间表SELECT一遍,这样就规避了错误。
3.sql语句的执行顺序
4.charvarchartext的区别
	CHAR是一种固定长度的类型,适合用在身份证号码、手机号码等定长。
	VARCHAR则是一种可变长度的类型,适合用在长度可变的属性。 
	text不设置长度, 当不知道属性的最大长度时,适合用text5.mysql创建小数的字段
	`buyHuaXiao` decimal(10,4) NOT NULL COMMENT '花销'
	//COMMENT代表注释
6.
注册驱动
Class.forName("com.mysql.jdbc.Driver");显示的加载到JVM中
获取连接
Connection conn=DriverManager.getConnection(url,user,pass);
创建一个Statement语句对象
执行SQL语句
处理结果集
关闭资源

javaweb

1.jsp的九大内置对象
 (1)request
 (2)response
 (3)out
 (4)session
 (5)spplication
 (6)pageContext
 (7)config
 (8)page
 (9)exception
2.jsp的生命周期
 (1)翻译(转义):把jsp文件访问为java源码
 (2)编译:把java源码编译为字节码
 (3)执行:servlet的生命周期
3.servlet生命周期执行过程
	客户端访问url----服务器根据url匹配对应servlet----使用java的反射机制构建servlet对象----调用构造方法---调用init方法进行初始化----service----根据请求的方法--goGet\doPost----长时间无人访问----destroy----servlet被销毁。
4.会话跟踪
 (1)解决http这种无状态协议的弊端
 (2)技术:
 	-1、cookie:服务器写在客户端的小文本,只能存放简单数据,一个域名只能写一个cookie文件,可以包含255个数据,以键值对的方式存放
 	-2、hidden:隐藏域
 		<input type="hidden" name="" value=""/>
 	-3、url重写,url传参再url后通过?进行参数传递。
 	-4、用户授权,使用session存数据。
5.请求和转发的区别
转发是服务器行为,重定向是客户端行为
转发过程:
 (1)客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;
 (2)在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。
 (3)转发行为是浏览器只做了一次访问请求。
重定向:
 (1)其实是两次request, 第一次,客户端request   A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。
 (2)重定向可以访问自己web应用以外的资源。
 (3)在重定向的过程中,传输的信息会被丢失。
6.cookie和session的区别
共同点:cookie和session都是用来跟踪浏览器用户身份的会话方式。
区别:
 (1)cookie数据保存在客户端,session数据保存在服务端。
 (2)cookie不能跨浏览器,session能够跨浏览器
7.mvc
	MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写
8.浏览器关闭,session丢失原因:
	session使用通过Cookie来存放id的,而临时cookie在浏览器关闭后,会丢失,放在其中的JSSESSION也会消失
9.TCP/UDP的区别
(1)TCP 是面向连接的,UDP 是面向无连接的
(2)TCP 是面向字节流的,UDP 是基于数据报的
(3)TCP 保证数据正确性,UDP 可能丢包
(4)TCP 保证数据顺序,UDP 不保证
10.Get和Post的区别
(1)Get会把数据放在url中,不安全。post的数据放在请求数据包的消息体中。
(2)Get传输的数据量小,主要是因为它受约于URL长度的限制,而Post可以传输大量的数据,所以我们在传文件的时候会用Post(3)Get是从服务器上获得数据,而Post则是向服务器传递数据的。
11.Get和Post的请求过程
post请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回100 Continue响应
(5)浏览器发送数据
(6)服务器返回200 OK响应
get请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回200 OK响应
12.java三大组件:servlet、过滤器、监听器。
过滤器:Filter,监视、修改或以某种方式处理正在客户端和服务器之间交换的数据流
监听器: 通过实现Listener接口的类可以在特定事件(Event)发生时,自动激发一些操作
1.ssm加restful风格
2.IOC
3.ID
4.AOP

猜你喜欢

转载自blog.csdn.net/weixin_44923787/article/details/120321799