java备忘录 (面试知识点)

synchronized 方法:
这种机制确保了同一时刻对于每一个类实例,其所有声明为 synchronized 的成员函数中至多只有一个处于可执行状态
(因为至多只有一个能够获得该类实例对应的锁),
从而有效避免了类成员变量的访问冲突(只要所有可能访问类成员变量的方法均被声明为 synchronized)
synchronized ():
synchronized 块里面其实锁的是一块内存地址,只要不变就OK
1.在try catch块里return的时候,finally也会被执行。
2.return 语句会把后面的值复制到一份用来返回,如果return的是基本类型的,
finally里对变量的改动将不起效果,如果 return 的是引用类型的,改动将可以起效果。
3.finally里的return语句会把try catch块里的return语句效果给覆盖掉。

6. 什么是 java 序列化,如何实现 序列化?
序列化 :
可以将一个对象保存到一个文件,所以可以通过流的方式在网络上传输,可以将 文
件的内容读取,转化为一个对象。
处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的 对
象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象 流
进行读写操作时所引发的问题。
将需要被序列化的类实现 Serializable 接口,该接口没有需要实现的方法,
implements Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出 流
( 如: FileOutputStream) 来构造一个 ObjectOutputStream( 对象流 ) 对象,接着,使用
ObjectOutputStream 对象的 writeObject(Object obj) 方法就可以将参数为 obj 的对 象
写出 ( 即保存其状态 ) ,要恢复的话则用输入流。
JSP 中动态 INCLUDE 与静 INCLUDE 的区别 ?
<jsp:include page>: 是两个类,是一个调用关系,在运行时动态的调用,不是一家子可以重复变量。
<@include file>: 在将 jsp 生成 servlet 类前将两个文件和在一起 , 生成一个 java 类 ,
一起运行的。所以是一家子,当中的变量名不能重名。
如何确定jsp文件的真实路径?
<%=application.getRealPath("aa.jsp") %>
转换编码字符
new String(str.getBytes("ISO-8859-1"), "GBK");

swith 用于 int short char byte
annotation 中单向一对多要指定
@oneToMany
@JoinColum("")
1+N问题 (典型的面试题)
@ManyToOne(fetch=FetchType.LAZY)
@BatchSize
join fetch
使用QBC的 createCriteria(*.class)执行查询 也可避免N+1问题
继承关系的表的映射
主表:
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="discriminator", discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue("person")
子表
@Entity
@DiscriminatorValue("student")

hibernate 常见优化策略
用最新版本的 hibernate
制定合理的缓存策略
采用合理的 session 管理机制
尽量使用延迟加载
many
大文本、大文件
设定合理的批处理参数 (batch-size)
如有可能 , 选用 uuid 作为主键生成器
如有可能,选用基于 version 的乐观锁替代悲观锁
开发过程中,打开 hibernate 的 SQl 日志输出 (hibernate.show_sql=true) ,
list和iterate不同之处(//主要为了面试 )
a)list取所有
b)iterate先取 ID,等用到的时候再根据ID来取对象
c)session中list第二次发出,仍会到数据库査询
d)iterate 第二次,首先找session 级缓存
spring 事务管理
@transactional(propagation=propagation.REQUIRED)
JVM其实没有内在的支持泛型代码,泛型保证了代码在编译时的安全

hashset中,先调用hashCode方法如果hashCode()方法返回的哈希码与集合已存在对象的哈希码一致,
那么将调用该对象的equals方法,进一步判断其是否为同一对象。

enum实现单例很简单
String hello="hello";
String hel="hel";
String lo="lo";
System.out.println(hello=="hel"+"lo"); true
System.out.println(hello=="hel"+lo);false
31.不是说匿名内部类的参数必须 final
而是一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是 final

1.其他方法前是否加了synchronized关键字,如果没加,则能。
2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。
3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
4.如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this。

数据库的第一、第二、第三、BC范式的定义

一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
ArrayList执行搜索时比较好 数组实现
LinkedList 插入删除时比较好 双向链表实现
round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序
(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,
如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

webservice
Web Service 就是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的 一
种接口。
使用的技术 :
HTTP 、 XML 、 SOAP (简单对象访问协议)、 WSDL
优点 :
跨平台、跨语言、跨系统
SOAP 协议 :
SOAP 协议( Simple Object Access Protocal, 简单对象访问协议)
T cp/ip ? http->soap , soap 通过 xml 文件传送信息
缺点:
(1).WebService 使用了 XML 对数据封装,会造成大量的数据要在网络中传输。
(2).WebService 规范没有规定任何与实现相关的细节,包括对象模型、编程语言, 这
一点,它不如 CORBA 。

System.out.println(2.0-1.1);//0.8999999999999999
char a[]=new char[]{'a','b','c'};
System.out.println(a);//abc//其实是方法重构
System.out.println(a+"123");//[C@c17164123
JSP 的内置对象及方法
request 表示 HttpServletRequest 对象。取客户端表单域信息及 cookie,
header, 和 session
response 表示 HttpServletResponse 对象 , 对客户端的响应返回文本、写
cookies 。
out 向客户端打印 html 文本 .
pageContext : 当前 jsp 页面的上下文环境 , 可以得到 session 、 request 、 applicati on
等内置对象 , 在自定义标签中使用的很多。
session 表示一个请求的 javax.servlet.http.HttpSession 对象。 Session 一
个用户多个页面共享同一变量。
applicaton 表示一个 javax.servle.ServletContext 对象。存放容器级
的变量。
config 表示一个 javax.servlet.ServletConfig 对象。该对象用于存取 servl et
实例的初始化参数。
page 表示从该页面产生的一个 servlet 实例
exception : 异常,当 iserrorpage=true
对象的序列化提供了一种不需要调用构造器也能过实例化对象,单例就没用了,除非用枚举
Properties :
Properties prop=new Properties();
prop.load(new FileInputStream(""));

java的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。

堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用new创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用final修饰后,放在堆中,而不是栈中。
ResultSet.TYPE_SCROLL_SENSITIVE
该常量指示可滚动并且通常受 ResultSet底层数据更改影响的 ResultSet对象的类型。不一定起作用
hashset 放元素时,现根据hashcode 定位置,在用equal方法判断是否相等
因为:hashset 底层是由hashmap实现,hashmap的put方法中判断相等时,e.hash == hash && eq(k, e.key),所以只要e.hash == hash 为false后面的就不用再执行了
简单工厂产生产品系列的时候麻烦,会造成工厂泛滥
抽象工厂产生新的产品的时候要改动的太多
FlowLayout是容器Panel和它的子类Applet默认的布局管理器
BordderLayout是容器Frame和Dialog默认的布局管理器
(java中相对路径绝对路径的理解)
默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名。即System.getProperty(“user.dir”)的值,它的路径始终和我们在哪启动jvm的路径是一致的。但在Eclipse中启动jvm都是在项目根路径上启动的.比如有个项目名为blog,其完整路径为:D:\work\IDE\workspace\blog.那么这个路径就是jvm的启动路径了
A.getClass.getClassLoader.getResource("")是根据bin目录(也就是根)来分析相对路径名,就是D:/workspace/项目名/bin。
A.getClass.getResource("")据该class文件所在目录来分析相对路径名,比如D:/workspace/项目名/bin/test/abc.class
这2个的根目录都是bin目录
JAVA中常见的RuntimeException
NullPointerException,ArrayIndexOutOfBoundsException,ClassCastException,ArithmeticExecption,BufferOverflowException
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值