Java面试准备-基础篇

问题链接转载  Java面试通关要点汇总集【终极版】

一、面向对象的特征

  • 封装
  • 抽象
  • 继承
  • 多态

二、final, finally, finalize 的区别

  • final是一个属性,修饰类,方法和变量,修饰类则该类不能被继承,如String;修饰方法则该方法不能被重写,修饰变量则该变量为常量,必须要初始化。

  • finally是异常处理的一部分,用在try/catch语句里,表示总是执行,不管这个异常有没有捕捉到都会在最后执行
  • finalize()是每个对象都会有的,当gc启动时,对象被回收时会调用。

三、int 和 Integer 有什么区别

int是8种基本数据类型之一(bool,char,byte,short,int,long,float,double),Integer是int的包装类。int的初始值是0,而Integer是null。自从Java5引入了自动装箱/拆箱机制后,int和Integer可以相互转换

四、重载和重写的区别

重载是指同个类里的函数函数名相同,但参数不一样,不一样包括参数个数不一样,参数类型不一样,参数顺序不一样。重写指子类重写了父类的函数,函数名和参数全一致。但子类无法重写父类的final修饰的函数

五、抽象类和接口有什么区别

  • 抽象类里可以有具体化的函数,但接口类里的函数只能有函数名,不能有具体实现的内容
  • 抽象类的成员变量可以是各种类型,但接口类的成员变量必须是public final static
  • 抽象类可以有main函数,但接口类不能有main函数
  • 只能继续一个抽象类,但可以实现多个接口
  • 抽象类像一个模版,接口像一个行为规范
  • 抽象类可以有构造函数,但接口不能有构造函数
  • 抽象类可以静态代码块和静态函数,但接口不能控油

六、说说反射的用途及实现

反射的核心是在JVM运行时才会动态加载类或调用函数,访问变量,一般用于构建通用架构

  • 用instanceOf判断这个对象是不是某个类的实例
  • 获取这个对象所属的类
  • 获取任意类的成员函数或变量
  • 创建class对象的实例,用newInstance()

七、说说自定义注解的场景及实现

Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件中出现

八、HTTP 请求的 GET 与 POST 方式的区别

什么是HTTP?

超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议。

HTTP在客户端和服务器之间以request-responseprotocol(请求-回复协议)工作。

GET方法:

使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器:

/test/demo_form.jsp?name1=value1&name2=value2

特点:

·        GET请求能够被缓存

·        GET请求会保存在浏览器的浏览记录中

·        以GET请求的URL能够保存为浏览器书签

·        GET请求有长度限制

·        GET请求主要用以获取数据

POST方法:

使用POST方法时,查询字符串在POST信息中单独存在,和HTTP请求一起发送到服务器:

POST/test/demo_form.jsp HTTP/1.1

Host:w3schools.com

name1=value1&name2=value2

特点:

·        POST请求不能被缓存下来

·        POST请求不会保存在浏览器浏览记录中

·        以POST请求的URL无法保存为浏览器书签

·        POST请求没有长度限制

九、session 与 cookie 区别

因为HTTP是一种无状态的协议,为了保存状态,cookie和session便出现了。session是保存到服务器上,保存的是对象,而cookie是保存到客户端,保存的是string类型。session会有个session id进行识别

十、session 分布式处理

  • session黏性:即当服务器开启一个session后,这个用户以后的所有操作都只在这台服务器上
  • 广播共享方式:当开启一个session后,将这个session的所有数据通过广播共享到其他服务器上
  • 采用中间件保存,如redis或memcached,目前采用最多
  • session 保存到数据库中

十一、JDBC 流程

JDBC是运行sql语句获取数据库数据的Java API,用于通过网络操作数据库

加载JDBC驱动程序 → 建立数据库连接Connection → 创建执行SQL的语句Statement → 处理执行结果ResultSet → 释放资源

1.注册驱动 (只做一次)

  方式一:Class.forName(“com.MySQL.jdbc.Driver”);
  推荐这种方式,不会对具体的驱动类产生依赖。
  方式二:DriverManager.registerDriver(com.mysql.jdbc.Driver);
  会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。

2.建立连接

 Connection conn = DriverManager.getConnection(url, user, password); 

  URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

  Java面试准备-基础篇_第1张图片

  其他参数如:useUnicode=true&characterEncoding=utf8

3.创建执行SQL语句的statement

1 //Statement  
2 String id = "5";
3 String sql = "delete from table where id=" +  id;
4 Statement st = conn.createStatement();  
5 st.executeQuery(sql);  
6 //存在sql注入的危险
7 //如果用户传入的id为“5 or 1=1”,那么将删除表中的所有记录

 

1  //PreparedStatement 有效的防止sql注入(SQL语句在程序运行前已经进行了预编译,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1'也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令)
2 String sql = “insert into user (name,pwd) values(?,?)”;  
3 PreparedStatement ps = conn.preparedStatement(sql);  
4 ps.setString(1, “col_value”);  //占位符顺序从1开始
5 ps.setString(2, “123456”); //也可以使用setObject
6 ps.executeQuery(); 

4.处理执行结果(ResultSet)

1 ResultSet rs = ps.executeQuery();  
2 While(rs.next()){  
3     rs.getString(“col_name”);  
4     rs.getInt(1);  
5     //…
6 }  

5.释放资源

 //数据库连接(Connection)非常耗资源,尽量晚创建,尽量早的释放
 //都要加try catch 以防前面关闭出错,后面的就不执行了
 1 try {
 2     if (rs != null) {
 3         rs.close();
 4     }
 5 } catch (SQLException e) {
 6     e.printStackTrace();
 7 } finally {
 8     try {
 9         if (st != null) {
10             st.close();
11         }
12     } catch (SQLException e) {
13         e.printStackTrace();
14     } finally {
15         try {
16             if (conn != null) {
17                 conn.close();
18             }
19         } catch (SQLException e) {
20             e.printStackTrace();
21         }
22     }
23 } 

十二、equals 与 == 的区别

== 可以用于基本数据类型,用在对象比较时比较的是对象的引用地址,而equals()比较的是对象的内容

你可能感兴趣的:(Java面试准备-基础篇)