面试准备
Writen By CoolGhost,Started With 2016/10
- 连接Oracle数据库操作
ResultSet rs = null; Statement stmt = null; Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:thin:@ip:port", "username", "password"); stmt = conn.createStatement(); rs = stmt.executeQuery("select * from dept"); while (rs.next()) { System.out.println(rs.getString("deptno")); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) { rs.close(); rs = null; } if (stmt != null) { stmt.close(); stmt = null; } if (conn != null) { conn.close(); conn = null; } } catch (SQLException e) { e.printStackTrace(); } }
- java单例模式
public class Singleton { private Singleton() {} private static Singleton single=null; public static Singleton getInstance() { if (single == null) { single = new Singleton(); } return single; } }
- java路径
两种方法:一种是\\\
另外一种是/
- java正则
注意,java中只用正则public class RegexMatches { private static final String REGEX = "\\bcat\\b"; private static final String INPUT = "cat cat cat cattie cat"; public static void main( String args[] ){ Pattern p = Pattern.compile(REGEX); Matcher m = p.matcher(INPUT); // 获取 matcher 对象 int count = 0; while(m.find()) { count++; System.out.println("Match number "+count); System.out.println("start(): "+m.start()); System.out.println("end(): "+m.end()); } } }
\
需要进行转义,如\\d
- String、StringBuffer、StringBuilder
- 其中,String被final修饰,为不可变类,不能被继承,并且其值不能被改变。进行添加操作的时候会转换成 StringBuffer类型
- StringBuffer、StringBuilder均为可变类,其功能基本类似,但是StringBuilder线程不安全
- String因为是不可变类,因此不适合用来频繁的进行修改操作,而StirngBuilder和StringBuffer主要看是否运用在多线程中。另外三者都是借助
char[]
实现
- 浮点默认为dobule类型,如需float类型,(float)0.1或0.1f
- Switch
基本类型中long、float、double类型不能用于switch、而非基本类型的String可以用于switch - 线程
线程也被称为轻量级进程,是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间。 - 多线程有点
- 多线程可以减少程序响应时间
- 线程的创建和切换开销较小
- 单线程浪费多CPU执行能力
- 多线程能简化程序结构,便于理解和维护
- Servlet的生命周期
初始化阶段:调用init()方法;响应客户请求阶段:调用service()方法,并依据请求类型调用dopost和doget方法;终止阶段:调用destroy()方法 - java读取文件
//字节流,不会出现乱码 File file=new File(filePath); if(file.isFile() && file.exists()){ //判断文件是否存在 InputStreamReader read = new InputStreamReader(new FileInputStream(file),encoding);//考虑到编码格式 BufferedReader bufferedReader = new BufferedReader(read); String lineTxt = null; while((lineTxt = bufferedReader.readLine()) != null){ System.out.println(lineTxt); } read.close(); }else{ System.out.println("找不到指定的文件"); }
//字符流,可能出现乱码 FileReader fr=new FileReader(filePath); BufferedReader bufferedReader = new BufferedReader(fr);
- servlet和cgi
servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 - jsp跳转方式
有两种:- forward跳转:<jsp:forward page ="跳转页面地址">
- 服务器端跳转,地址栏不改变。
- 执行到跳转语句后马上执行跳转,之后的代码不再执行(跳转之前一定要释放全部资源)。
- request设置的属性在跳转后的页面仍然可以使用。
- response跳转:response.sendRedirect("跳转页面地址")
- 客户端跳转,地址栏改变。
- 所有代码执行完毕后跳转。
- 跳转后页面不能使用上一个页面的request。
- 使用地址重写传递参数(response.sendRedirect("URL?参数名=参数值"))。
- forward跳转:<jsp:forward page ="跳转页面地址">
- java数组初始化赋值
int[] nums = {0,1,2,3,4,5,6,7,8,9}; int[] nums = new int[]{0,1,2,3,4,5,6,7,8,9};
- 抽象类
其子类权限只能扩大,不能缩小。 - java static
public class Alpha { static int i = 1; static { i++; } public Alpha() { i++; } public static void main(String[] args) { Alpha t1 = new Alpha(); System.out.println(t1.i); //3 Alpha t2 = new Alpha(); System.out.println(t2.i);//4 静态资源只执行一次 } }
- SQL truncate 、delete与drop区别
- truncate 和 delete 只删除数据不删除表的结构
- delete 语句是数据库操作语言(dml),事务提交之后才生效。truncate、drop 是数据库定义语言(ddl),立即生效,不处罚事务。
- mybatis
-
statementType
设置为CALLABLE
,默认情况下是PREPARED
- 一般使用#,$符号只有在特定情况下,如表前缀才使用,可能带来SQL注入
- jdbctype如果不设定,并且如果参数为null,则会1111错误
-
- spring mvc
-
运行流程
- 用户发送请求时,首先被DispatcherServlet捕获
- DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping
- HandlerMapping根据请求,访问不同Controller进行处理
- Controller进行业务的处理,完成后将返回的数据和跳转到的界面封装到ModelAndView
- ViewResolver解析Controller返回的ModelAndView,读取其信息,然后渲染界面完成一次请求
-
mvc:view-controller
,让请求不通过Handler,直接访问到响应视图。而在配置这个标签之后,默认的@RequestMapping将会失效,这个时候需要配置mvc:annotation-driven
。而mvc:resources
则是用来配置静态资源比如:css,js之类。
-