java面试总结2

来源:互联网 发布:caxa加工中心编程 编辑:程序博客网 时间:2024/05/19 22:52

java面试总结2


今天又去了一家公司面试,别的不说单说技术,个人觉得早已超出了实习水平的问答了,难道这是和公司的规模有关系吗?但是同时这也让我意识到了自己还有需要要学习的和基础部分的不足。
虽然问题问的很繁琐,但是还是要总结一下,毕竟有些问题还是挺有意义的。


1.画出集合方面的图:

Collection接口    丨------List接口:存储有序,可以重复的元素        丨-------ArrayList(主要的实现类,首选)        丨-------LinkedList(频繁的插入,删除)        丨-------Vector(古老的实现类,线程安全)    丨------Set接口:存储无序,不可重复的元素,Set中常用的方法都是Collection下定义的        丨-------HashSet(主要实现类)        丨-------LinkedHashSet        丨-------TreeSetMap接口,存储“键-值”对的数据:    丨------HashMap、LinkedMap、TreeMap、Hashtable(子类:Properties)



1.1 其中HashMap的key怎么保证唯一性的?

*1.key是用Set来存放的,不可重复,value是用Collection来存放的,可重复 一个key-value对,是一个Entry,所有的Entry是用Set存放的,也是不可重复的。
*2.向HashMap中添加元素时,会调用key所在类的equals()方法,判断两个key是否相同,若相同则只能够添加进一个,则只能添加进后加的那个元素。


2. 请你写出jdbc重要的部分,同时写出LinkedList。。。。(这里压根就没看过LinkedList源码。。)
jdbc的连接实例:

import java.sql.*;public class FirstExample {   // JDBC driver name and database URL   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";     static final String DB_URL = "jdbc:mysql://localhost/EMP";   //  Database credentials   static final String USER = "username";   static final String PASS = "password";   public static void main(String[] args) {       Connection conn = null;       Statement stmt = null;       try{          //STEP 2: Register JDBC driver          Class.forName("com.mysql.jdbc.Driver");          //STEP 3: Open a connection          System.out.println("Connecting to database...");          conn = DriverManager.getConnection(DB_URL,USER,PASS);          //STEP 4: Execute a query          System.out.println("Creating statement...");          stmt = conn.createStatement();          String sql;          sql = "SELECT id, first, last, age FROM Employees";          ResultSet rs = stmt.executeQuery(sql);          //STEP 5: Extract data from result set          while(rs.next()){             //Retrieve by column name             int id  = rs.getInt("id");             int age = rs.getInt("age");             String first = rs.getString("first");             String last = rs.getString("last");             //Display values             System.out.print("ID: " + id);             System.out.print(", Age: " + age);             System.out.print(", First: " + first);             System.out.println(", Last: " + last);          }          //STEP 6: Clean-up environment          rs.close();          stmt.close();          conn.close();       }catch(SQLException se){          //Handle errors for JDBC          se.printStackTrace();       }catch(Exception e){          //Handle errors for Class.forName          e.printStackTrace();       }finally{          //finally block used to close resources          try{             if(stmt!=null)                stmt.close();          }catch(SQLException se2){          }// nothing we can do          try{             if(conn!=null)                conn.close();          }catch(SQLException se){             se.printStackTrace();          }//end finally try       }//end try       System.out.println("Goodbye!");    }//end main}//end FirstExample


LinkedList源码:这里抽时间好好总结一下,因为不是一两句就可以说清楚的(此处保留)


3.SpringMVC流程图,请你画一下

这里写图片描述

这里写图片描述


4.
当你客户端的cookie被禁用了,那么session还能起作用吗?
答:

作者:林灿斌
链接:https://www.zhihu.com/question/35307626/answer/66000415
来源:知乎
Session是用户会话,那么要实现用户会话,服务器端应该有个储存会话信息的程序存在。
Session的服务端服务实现由很多种,常见有磁盘文件保存(PHP默认方式,会阻塞)、MySQL(Discuz! 的自己的实现方式)、Memcached(性能较高的一种实现)、Redis。
大致原理就是储存一个独一无二的用户令牌(这里暂且称为SessionID吧)和令牌对应的用户数据,例如这样:
SessionID | UserID
1A6B78E7 | 195
B6SE3C66 | 0 (默认,未登陆状态)
E135C338 | 131 (用户将账号密码验证码和SessionID发回服务器后,将UserID改为用户主键值)

客户端要实现Session就需要从服务端获取一个SessionID(服务端可以用一个meta tag把SessionID发到客户端,客户端用js获取,方法简直不要太多),永久性或半永久性地保存在本地(起码不能再开一次网页,会话就没了),每次访问需要Session的页面,就将SessionID发出。
想到这里,难点就只有两个了,保存和发送。主要难点是前者。
前面有人提到的URL传参但没有提到保存方式,永久性或半永久性地储存,除了Cookie外还有什么呢?Etag单页有效并且缓存容易被冲掉,想了想,HTML5新增的LocalStorage就可实现近乎永久性的保存。(IE 8+)
解决了客户端接收和储存这个问题,那么发出SessionID就简单了:
1、前端模板实现的全异步网站,在需要SessionID的请求时,使用:
xhr.setRequestHeader(‘X-SessionID-Header’, ‘B6SE3C66’);
这样就实现了SessionID的收发。
2、非异步网站,粗暴的做法可以让JS可以遍历所有a标签,判断host,如果非跨域,则为其href指向链接追加SessionID参数,同样实现了收发。当然也还有更加精细的做法。
LocalStorage虽然不如Cookie方便,相对于Cookie来说也是有一定好处的,同域的所有页面请求都会附加上同个Cookie,这会影响加载速度,很多网站的静态资源都另外使用了一个域名一部分原因就是这个。LocalStorage的令牌发送是可控的,Cookie的发送是不可控的。


5.Servlet创建以后能实例几个对象?
servlet 只有一个实例,具有生命周期 即:
①.初始化阶段 调用init()方法

②.响应客户请求阶段调用service()方法

③.终止阶段调用destroy()方法


6.Spring MVC中哪个工具可以解析json?

http://blog.csdn.net/gwblue/article/details/43269323


7.JSP和EL中用的内置对象?

JSP:

对象名                     类型                          作用域 request         javax.servlet.ServletRequest            RequestScope response        javax.servlet.ServletResponse           PageScope pageContext     javax.servlet.jsp.PageContext           PageScope session         javax.servlet.http.HttpSession          SessionScope application     javax.servlet.ServletContext            ApplicationScope out             javax.servlet.jsp.JspWriter             PageScope config          javax.servlet.ServletConfig             PageScope page            java.lang.Object                        PageScope exception       javax.lang.Throwable                    PageScope 
JSP EL的内置对象: pageContext pageScope requestScope sessionScope applicationScope param paramValues header headerValues cookie initParam 
0 0
原创粉丝点击