1.字符串内容比较使用equals()方法,char在java中存储的是unicode码
2.值传递和引用传递问题

-
try catch finally
1⃣️、try中没有抛出异常,则catch语句不执行,如果有finally语句,则接着执行finally语句,继而接着执行finally之后的语句;
2⃣️、try中抛出异常,有匹配的catch语句,则catch语句捕获,如果catch中有return语句,则要在finally执行后再执行。
-
java中只有在不显示声明构造方法的时候,系统才会提供默认的无参的构造方法。
-
如果try语句里有return,那么代码的行为如下
a.如果有返回之,就把返回值保存在局部变量中
b.执行jsr指令跳到finally语句里执行
c.执行完finally后,返回之前保存在局部变量表里的值
如果try,finally语句里均有return ,则忽略try的return,而使用finally的return
6.集合容器
Vector & ArrayList 的主要区别
a. 同步性: Vector是线程安全的,也就是说同步的,而ArrayList是线程不安全的,不是同步的。
b. 数据增长: 当需要增长时,Vector默认增长为原来的一倍,而ArrayList却是原来的50%,这样,ArrayList就有利于节约内存空间,如果涉及到堆栈、队列等操作,应该考虑用Vector,如果需要快速随机访问元素,应该使用ArrayList.
扩展知识
(1).Hashtable & HashMap
Hashtable和HashMap它们的性能方面比较类似于Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。
(2).ArrayList & LinkedList
ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更像数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更像一个链表结构,所以,它们在性能上有很大的差别
从上面的分析可以知道,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机的访问其中的元素时,使用ArrayList会提供比较好的性能,而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或者中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
7.Webservice
Webservice是跨平台,跨语言的远程调用技术;
它的通信机制实质就是xml数据交换;
它采用了soap协议(简单对象协议)进行通信
-
intValue()是把Integer对象类型变成int的基本数据类型
parseInt()是把String变成int的基本数据类型
Valueof()是把String转化为Integer对象类型
-
Statement
Statement在JDBC中相当于SQL语句的载体
a, Statement是最基本的用法,采用字符串拼接的方式,存在注入漏洞
b, PreparedStatement对Statement中的SQL语句进行预编译,同时检查合法性,效率高
c, CallableStatement接口扩展了PreparedStatement。用来调用存储过程,它提供了对输出和输入/输出参数的支持。CallableStatement接口还具有对PreparedStatement接口提供的输入参数的支持
d. BatchedStatement用来批量操作数据库,BatchedStatement不是标准的Statement类
10.内联函数总结
说内联函数之前,先说说函数的调用过程.
调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存的地址继续执行。也就是通常说的压栈和出栈。因此,函数调用要有一定的时间和空间方面的开销。那么对于那些函数体代码不是很大,又频繁调用的函数来说,这个时间和空间的消耗会很大。
那么怎么解决这个性能消耗的问题呢,这个时候需要引入内联函数了。内联函数就是在程序编译时,编辑器将程序中出现的内联函数的调用表达式用内联函数的函数体直接进行替换。显然,这样就不会产生转去转回的问题,但是由于在编译时将函数体中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间开销上不像函数调用那么大,可见它是以目标代码的增加为代价换取时间的节省。
在java中使用final关键字来指示一个函数为内联函数,例如:
public final void method1(){
//TODO something
}
这个指示并不是必须的。final关键字只是告诉编译器,在编译的时候考虑性能的提升,可以将final函数视为内联函数。但最后编译器会怎么处理,编译器会分析将final函数处理为内联和不处理为内联的性能比较了。
11.SpringMVC的原理:
SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映射器查找匹配该url的handler,并返回一个执行链,前端控制器再请求处理器适配器调用相应的handler进行处理并返回给前端控制器一个modelAndView,前端控制器再请求视图解析器对返回的逻辑视图进行解析,最后前端控制器将返回的视图进行渲染并把数据装入request域,返回给用户。
DispatcherServlet作为SpringMVC的前端控制器,负责接收用户对请求并根据用户的请求返回相应的视图给用户。
而实现业务操作时在service层.

-
floor: 求小于参数的最大整数。返回double类型.
例如: Math.floor(-4.2) = -5.0
ceil : 求大于参数的最小整数。返回double类型
例如: Math.ceil (5.6) = 6.0
round: 对小数进行四舍五入后的结果。返回int类型
例如: Math.round(-4.6) = -5
13.假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是( 1)
boolean isOdd = false;
for(int i=1;i<=2;++i)
{
if(i%2==1)isOdd = true;
else isOdd = false;
a+=i*(isOdd?1:-1);
}
易知:每个线程对a 均做了两次读写操作,分别是 “ +1 ” 和 “ -2 ”
而题目问了是最终a 的结果,所以 a 的结果取决于各自线程对 a 的先后读写的顺序
结论:a的可能取值为-1、0、-2

网友评论