1.String和StringBuffer的区别?
答:String是引用数据类型;不可变字符序列,每次改变都会创建一个。StringBuffer可变字符序列,增删改的效率高。
2.int类型和integer的区别?
答:integer是int类型的包装类,integer的默认值是null,int的默认值是0,int不适合作为web层的表单数据的类型。
3.为什么要有基本数据类型?
答:基本数据类型是用的最频繁的类型。
而且占用存储空间小,可以把它们存入栈中,实现快速的操作。
而他们的封装类Integer等,必需创建实例,在堆中开辟内存,既消耗资源,又耗费时间。
4.有哪些方法可以实现多线程?
答:1:继承Tread类;
2:实现Runable接口。
5.怎样用Java实现定时器?
答:使用java.util.Timer工具类。
java.util这个包中可以找到Timer和TimerTask这两个类。Timer直接从Object继承,它相当于一个计时器,能够用它来指定某个时间来执行一项任务,或者每隔一定时间间隔反复执行同一个任务。创建一个Timer后,就会生成一个线程
在背后运行,来控制任务的执行。而TimerTask就是用来实现某项任务的类,它实现了Runnable接口,因此相当于一个线程。
6.java的基本数据类型
答:char,byte,int,short,float,double,long,Boolean。
7.页面上如何传递对象?
答:session(作用域:一次会话,相当于页面打开到关闭);cookie;application(作用域:服务器启动到关闭);request(作用域:两个页面之间);response;超链接进行传递;jsp标签等
8.jdbc的连接步骤?
答:1.加载数据库驱动(oracle驱动)
2.获取数据库链接(DriverManage.getConnection())
3.创建Statement对象或PreparedStatement对象
4.写sql语句,执行sql
常用的执行sql语句方法
1.executeQuery()查找方法-->返回ResultSet结果集-->while()循环遍历
2.executeUpdate()增删改-->返回int类型--> >0表示sql执行成功
5.关闭资源。
=================================
PreparedStatement和Statement区别
PreparedStatement效率和安全性更高些,可以防止sql注入
Statement有安全隐患,如sql注入
9.shh各自扮演什么样的角色?
答:Struts2主要是接收后台传过来的数据展示到页面上,通过action进行页面的跳转,分发。
spring控制器,把本来由Struts2管理的action作为bean来管理,管理事务。
hibernate对数据库进行操作,实现数据的持久化,
10.oracle怎样去除重复?
答:用distinct可以查询出重复的。
selectname,age,sex from student group by name,age,sex having count(*)>1;查询。
删除:delete from student where name in(
select namefrom student group by name having count(*)>1
);
11.如何知道数组中有多少个重复,如何去除重复。
答://嵌套循环去除重复
/*publicstatic void main(String[] args) {
int[]a={11,12,13,14,15,11,12};
//创建list集合,把数组遍历放到集合里面
List<Object>list=newArrayList<Object>();
for(int i = 0; i < a.length; i++) {
list.add(a[i]);
}
//嵌套循环
for(int i = 0; i < list.size(); i++) {
for(int j = 0; j < list.size(); j++) {
//判断
if(i==j){
continue;
}
//如果第一次遍历的值,在第二次遍历时出现就删除
if(list.get(i)==list.get(j)){
list.remove(j);
}
}
}
//循环遍历删除后的集合
for(Object o : list) {
System.out.println(o);
}
}*/
//set集合去除重复
publicstatic void main(String[] args) {
int[]a={11,12,13,14,15,11,12};
Set<Object>set=newHashSet<Object>();
for(int i = 0; i < a.length; i++) {
set.add(a[i]);
}
for(Object object : set) {
System.out.println(object);
}
}
11.map集合怎样遍历
答:/*public static void main(String[] args) {
Map<String,Object>map=new HashMap<String, Object>();
map.put("a",1);
map.put("b",2);
map.put("c",3);
Set<String>set=map.keySet();
for(String string : set) {
System.out.println(string+"================="+map.get(string));
}
}*/
12.如何判断两个对象是否相等
答:==用于判断对象是否指向同一个内存,equals判断值是否相同
例如:String a=newString("foo");
String b=new String("foo");
System.out.println(a=="foo");打印false
System.out.println(a.equals(b));打印true
System.out.println(a==b);打印false
13.oracle通过时间段来查询
答:select * from DRIVING_RECORD wherebegin_time>=to_date('2017-10-13','yyyy-MM-dd')and begin_time<=to_date('2017-10-15','yyyy-MM-dd')
14.error和exception的区别?
答:error表示系统级别的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题。比如内存资源的不足,
对于这种错误,程序无能为力,除了退出运行外别无选择,它是由jvm抛出的。
exception表示需要程序进行处理的异常,他处理的是因为程序设计的瑕茈而引起的问题或者在外的输入等引起的一般性能问题,是程序必须处理的。
exception又分为运行时异常,检查异常。
运行时异常,表示无法让程序恢复的,虚拟机通常操作遇到的异常
检查异常,又叫一般异常,非运行异常,一般需要进行捕获或者抛出
15.java的优势?
答:简单性,面向对象,分布式,解释型,可靠,安全,可移植,高性能,多线程,动态性,最主要的是跨平台。跨平台的原理,一次编译到处运行。
16.servlet的生命周期?
答:①实例化 servlet容器创建servlet的实例。
②初始化 该容器调用init()方法。
③请求处理 调用service()方法(doget,dopost)。
④销毁 调用destroy()方法。
17.hibernate的懒加载?
答:lazy属性也称延时加载,内存容量有限,为减少并发量,减少系统资源的浪费,使用懒加载。系统要正真使用该对象的数据才会创建,
18.hibernate的load方法和get方法的区别?
答:load方法认为该数据数据库一定有,可以放心的使用代理对象延时加载(懒加载)如果在使用的过程中发现问题,只能抛异常,get()一定要获取到真实的数据否则返回null。
19.oracle的端口1521,MySQL的端口3306,Tomcat的端口8080.
20.对象可以用流的方式写入,写出。通过实现serializable接口实现序列化写入写出。
21.数组排序
答:冒泡排序
直接选着排序
反转排序
22.<jsp:include>和<@include>的区别?
答:<jsp:include>动作,动态包含可以再两个文件之间传递参数,
<@include>指令,静态包含不可传递参数。
23.Struts2有4种跳转方式,页面间的请求转发,重定向;action间的请求转发重定向。
24.怎样把String类型的转化为date类型?
答:使用SimpleDateFormat类的parse方法。
① 定义一个字符串类型的时间String string=”2017-10-19”;
② 创建SimpleDateFormat对象并设置格式SimpleDateFormatdatedateFormat=new SimpleDateFormat (“yyyy-mm-dd”);
③ 使用SimpleDateFormat的parse方法Date date=dataFarmat.parse(string)
System.out.println(date.toLocaleSetring().split(“”)[0]);切割不要的时分秒。
(2)把date转化为String类型
SimpleDateFormatdateFormat=new SimpleDateFormat("yyyy-MM-dd” )
StringStr=dateFormat.format(new java.util.Date());
System
("yyyy-MM-dd hh:mm:ss:S E D F W a k K z")
h时在上午或下午(1-12)
H时在一天中(0-23)
M s S 分 秒 毫秒
E D F 星期几 一年中的第几天 一月中的第几个星期几 。
w W 一年中的第几个星期 一月中的第几个星期
a k K z上/下午标记符 在一天中(1-24) 在上午或下午(0-11) 时区
常见的标准写法“yyyy-MM-dd HH:mm:ss,”注意大小写,把HH改为hh就把24小时制转化为12小时制了。
25.hibernate和mybatis的区别
答: ①mybatis真正实现了java代码和sql语句的分离
②hibernate是全自动的,mybatis是半自动的。Hibernate实现了部分自动生成sql
③ sql优化上mybatis强于hibernate
④ mybatis优化维护方便,sql全存在xml中,不需要修改源码
⑤ 开发效率hibernate略强于mybatis
⑥ 从性能上说,mybatis全是手写的sql因此性能相对较高。Hibernate用hql,hql往往会查询更多的字段,反而性能低
26数据库的分页
答:MySQL select * from 表名limit x,y;
X表示下标,y表示返回几条数据
Oracle的分页select * from (select rownum r,x.* from 表名 x where rownum<=3)where r>=2;
查询这个表大于等于2小于等于3的数据。
27.谈谈对面向对象的理解
答:面向对象编程是一种编程范式,满足面向对象编程的语言一般会提供类,封装,继承等语法和概念辅助我们进行面向对象编程,面向对象编程就是我们将程序模块化,对象化。把具体事物的特性属性和通过这些属性来实现的一些动作的具体方法放到一个类里面
28.java的垃圾回收机制
答:垃圾回收优点,可以有效的防止内存泄漏,有效的使用可以使用的的内存。
复制垃圾回收,标记垃圾回收,增量垃圾回收。
原理:当创建对象时,gc就开始监控这个对象的地址,垃圾大小以及使用情况通过向图记录和管理堆的所有对象。通过这种方式确定哪些对象是可达的,那些对象是不可达的。当gc确定一些对象为不可达的,gc就有责任回收这些内存。程序员可以调用system.gc(),但是java的jvm可能会立即执行,可能会过会执行。
29.servlet可以直接new吗?
答:可以new,但new出来的没有任何意义和功能,servlet必须以Tomcat提供支持,才可以实例,java只提供了一些接口
30.请求转发和重定向的区别?
答:请求转发,服务器行为,一次请求,转发后请求对象会保存,URL不会改变(服务器内部的转发,所以浏览器看不到地址栏的变化)
重定向,客户端行为 进行了两次请求,URL改变
31.单例模式:一个类有且只有一个实例,并且自行实例化向整个系统提供。
//单例模式懒汉式
public class Singleton {
//创建私有化单例对象
private static Singleton s=null;
//创建私有化构造函数
private Singleton(){
}
//提供公共的方法,去创建实例对象
public static Singleton getInstanse(){
if(s==null){
s=new Singleton();
}
returns;
}
//实例对象测试懒汉式
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println(Singleton.getInstanse());
}
}
}
//单例模式饿汉
public class SingletonE {
//创建私有化单例对象
private static SingletonE sing= new SingletonE();
//创建私有化构造方法
private SingletonE(){
}
//创建公共的方法,创建实例对象
public static SingletonE getInstanse(){
if(sing==null){
sing=new SingletonE();
}
returnsing;
}
public static void main(String[] args) {
for (int i = 0; i <5; i++) {
System.out.println(SingletonE.getInstanse());
}
}
}
32. //递归算法10的阶乘
public static void main(String[] args) {
int result=jiecheng(15);
System.out.println(result);
}
public static int jiecheng(int num){
if(num==1){
return 1;
}
return num*jiecheng(num-1);
}