感谢四两先生
此文只为笔记
1 1 面向对象的特征有哪些?
2 抽象 将一些对象的共同特征行为抽离出来,归纳为类
3 封装 将一些方法功能的代码打包起来,使用者不需要知道如何实现,只需要调用 接口,具体体现:setter/getter方法、设计模式、jar包、ssm框架等等
4 继承 将同类对象的共同属性、共同方法,抽离出来形成父类,然后子类直接继承 父类。好处:减少重复代码
5 多态 不同对象对同一消息做出的不同响应。
6 分为编译时多态 和运行时多态。
7 编译时多态 具体表现是 方法的重载;
8 运行时多态 具体表现是 方法的重写;
9
10
11 2 访问修饰符 public /protected/default/private的区别?
12 被public修饰的属性、方法、类,能被本类、子类、同包、其他包访问。
13 被protected修饰的,能被本类、同包、子类访问。不能被其他包访问
14 被default修饰的,能被本类、同包访问。不能被子类、其他包访问
15 被private修饰的,只能被本类访问。不能被子类、同包、其他包访问。
16
17 3 String是基本数据类型吗?
18 不是。基本数据类型有:
19 整型(short/int/long)、浮点型(单精度float、双精度double)
20 、布尔型(boolean)、字符型(char)、字节型(byte)
21 1字节=8位 ,单精度是指数字存储占用4个字节
22 双精度是指数字存储占用8个字节
23 String 是引用数据类型,还有枚举、数组
24
25 4 float f=3.14是否正确?
26 不正确,编译器默认是双精度(double),double型的3.14赋值给单精度float 需要强转,可写成:float f=(float)3.14或者 float f=3.14F
27
28 5 short s=1;s=s+2 正确吗? 29 short s=1 s=+2 正确吗?
30 不正确, 2是int型,s+2是int型,int型赋值short型,需要强转,int占4个字节
31 short类占2个字节
32 正确, s=+2,编译器帮助强转;等价于 s=(short)(s+1)
33
34 6 Java有没有goto?
35 goto在java中是保留字,没有被使用;
36 c语言中使用,表示直接跳出外循环;
37
38 7 int 和Integer的区别?
39 int 是基本数据类型
40 Integer是包装类型
41 java 是一门面向对象的语言,设计者为每个基本数据类型引入了对应的包装类。
42 java5 引进了自动装箱拆箱机制,两者可以自动转换。
43 包装类可以调用属性和方法
44 public static void main(String[] args) {
45 Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
46
47 System.out.println(f1 == f2);//true
48 System.out.println(f3 == f4);//false
49 }
50 51 /* String s1 = "Programming";
52 String s2 = new String("Programming");
53 String s3 = "Program";
54 String s4 = "ming";
55 String s5 = "Program" + "ming";
56 String s6 = s3 + s4;
57 System.out.println(s1 == s2);//false
58 System.out.println(s1 == s5);//true
59 System.out.println(s1 == s6);//false
60 System.out.println(s1 == s6.intern());//true
61 System.out.println(s2 == s2.intern());//false
62 */
63 String s1 ="abc"; 64 String s2 = "abc"; 65 System.out.println(s1 == s2); //true
66 看csdn收藏夹中的文章
67 68 8 &与&&的区别?
69 && 是短路与,左边为false是产生短路,不需要在看右边
70
71 9 解释内存中的堆(stack)、栈(heap)和方法区(method area)的用法?
72 String str= new String("hello");
73 str 存放在栈中 ;new String ("hello")存放在堆里;"hello"存放在方法区
74
75
76 10 Math.round(1.6)等于多少? Math.round(-1.6)等于多少?
77 round 是四舍五入,规则: 数值+0.5,,然后调用floor()方法
78
79 1.6+0.5 等于2.1 ,向下取值2
80 -1.6+0.5 等于-1.1. 向下取值-2
81
82 83 11 switch(key)中的key是哪些类型?
84 java5 之前 byte char short int 85 java5 是 byte char short int enum
86 java7 是 byte char short int enum String
87
88 12 数组有没有length()方法?String有没有length()方法?
89 数组没有length()方法,有length属性;而String有length()方法
90
91 13 java中如何跳出多重循环?
92 使用带标签的break,类似c语言中的goto,但是要慎用。
93
94 14 构造器能否被重写?
95 构造器是不能被继承的,因此不能被重写。但是可以重载。
96
97 15 两个对象 x y 若x.equals(y)==true的话,但却有不同hashcode,对吗?//重点:主要按equals()方法有没有被重写
98 不对,若是equals比较的是引用,若是为true的话,hashcode 一定相同。
99 若是hashcode不同,equals()一定不为true 100 若是 hascode相同,equals()两个对象的引用可以相同,也可能不同
101 java默认的 equals()方法 比较的是 对象引用;
102 == 比较的是 对象的赋值。
103 特例,String类型的equals()方法被重写,比较的不是对象的引用,而是对象的赋值。
104
105 17 String类是否可以被继承?
106 String类是final类,不能被继承。
107
108 18 String与StringBuffer/StringBuilder的区别?
109 String是只读字符串类型
110 StringBuffer/StringBuilder是读写字符串类型
111 StringBuffer与StringBuilder功能一样,但是Builder没有被synchronized修饰, 线程是不安全的,一般在单线程中使用。buffer是线程安全的。
112
113 19 重载和重写的区别?
114 重载和重写都是多态的表现。
115 重载发生在同一类中,方法的参数列表不同,方法名相同,与返回类型无关。
116 重写发生在子类与父类之间,访问修饰符范围不小于被重写的方法,参数列表、方法名、返回类型都要相同。方法体重写。
117
118 20 描述一下JVM加载class文件的原理机制?
119 定义:JVM 是内存中的虚拟机
120 组成:
121 类加载器 Class Loader 将类文件从外存加载到内存中,加载方式
122 运行数据区Runtime data area
123 执行引擎 ExecutionEngine
124 本地接口 Native Interface
125
126 23 抽象类和接口的异同?
127 同 都不能实例化;
128 异 抽象类中可以同时包含抽象方法和普通方法,而接口中必须都是抽象方法。
129 抽象类中可以没有抽象方法,但是接口中必须要有抽象方法。
130 抽象类中可以定义成员变量,而接口中的成员变量其实是常量。
131 抽象类与子类有继承关系。而接口的实现类没有继承关系。
132
133 24 静态嵌套类(Static Nested Class)和内部类(Inner Class)的区别?
134 内部类 需要在外部类实例化后 才能实例化
135 静态嵌套类 不依赖外部实例化后才能实例化
136
137 25 内存泄漏(memory leak)与内存溢出(out of memory)区别?
138 内存泄漏 :程序使用完占用的内存后,不能释放该内存,自己和其他程序也都不 139 能使用该内存,该内存资源就浪费掉了。
140 打比方:你向系统租了一个带锁的柜子,你使用完柜子后,钥匙丢了,自己 141 和系统都不能使用这一柜子,也不能被垃圾回收器回收。或者是冰箱里装鸡蛋,但是鸡蛋永久占位,不释放空间。
142 内存溢出 :程序向系统申请内存空间装不下程序,产生内存溢出。
143 打比方: 你向系统租了一个带锁的柜子,你向放一辆汽车进去,就产生内存 144 溢出现象。或者是 冰箱里装大象。
145
146 25. java中存在内存泄漏吗?
147 理论上不会,但是实际上有些对象不被gc回收,比如hibernate中的一级缓存Session中的对象属于持久态,不被Gc回收。
148
149 26.抽象方法可以是静态的吗? 150 不可以,因为抽象方法需要被重写,静态方法是不能被重写的。
151 152 抽象方法可以是本地方法(native)吗?
153 不可以,本地方法是通过c代码实现的,抽象方法是没有实现的
154 155 抽象方法可以被synchronized修饰吗? 156 不可以,抽象方法是没有方法体的,同步synchronnized修饰的是具体实现的方法体。
157
158 27 静态变量和实体变量的区别?
159 静态变量是属于类,通过类名直接调用;
160 同时在内存中只分配一个共享空间;
161 应用场景:上下文类和工具类,这样节省内存消耗。
162
163 28 静态方法中是否可以调用非静态方法?
164 不可以。
165
166
167 29 如何实现对象克隆?
168 法一;实现接口Cloneable,并重写Object类中clone()方法
169 法二:实现Serializable接口,对对象进行序列化和反序列化实现复制
170
171 30 为什么要有GC机制?
172 防止内存泄漏,缺点:垃圾回收的不可预知性。
173
174 31 抽象类可以实现接口或者继承具体类或者继承抽象类吗?
175 都可以,比如一个被abstract修饰的类,称为抽象类,抽象类中可以实现接口方法,可以重写抽象方法。
176
177
178 33 java 格式文件中是否可以包含多个类?有什么限制?
179 可以,但是只有一个类是public修饰,文件名同该public类名
180
181
182 34 匿名内部类 anonymous inner class 可以继承类和实现接口吗?
183 可以,SWing编程和android开发常用到,实现事件的监听和回调
184
185
186 35 内部类可以调用外部类的成员吗?
187 可以 188
189
190 36 静态成员和构造器的运行顺序(java类加载机制)
191 创建对象时构造器的调用顺序:
192 先初始化静态成员,然后调用父类构造器和非静态方法,然后调用子类构造器
193
194 37 如何字符串转换成基本数据类型?
195 解析成xxx(String) parsexxx(String)
196 或 valueOf(String). ???是怎么转换
197
198
199 38 如何通过递归实现字符串的反转?
200 public static String reverse (String originStr){
201 if(originStr==null || originStr.length()<=1)
202 Return originStr;
203 return reverse(originStr.substring(1))+originStr.charAt(0);
204 }
205
206
207 40 如何将字符串编码格式进行转换?
208 String str=new String("abc".getBytes("gb2312"),"utf-8");
209
210
211 42 如何取得年月日时分秒?
212 Calendar.getInstance().get(Calendar.YEAR)
213 Calendar.getinstance().get(Calendar.MONTH)
214
215 如何取得1970年1月1日000 到现在的毫秒数?
216 Calendar.getInstance().getTimeInMillis()
217
218 如何取得某月的最后一天?
219 Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH)
220 如何格式化日期?
221 new SimpleDateFormat("YYYY-MM-DD hh:mm;ss").format(new Date());
222
223 打印昨天的当前时间?
224 cal=Calendar.getInstance();
225 cal.add(Calendar.DATE,-1)
226 system.out.println(cal.getTime())
227 228
229 43 编写recursive function 递归方法注意什么?
230 注意收敛条件。例如
231 main(){
232 main(null);}
233 例如 生活中的例子 一个男人既是父亲也是儿子
234 循环体是方法
235
236 44 try{ return 语句}finally{} 执行顺序是什么?
237 Return 语句执行完后不会直接向调用者返回值,而是保持在内存中,等finally{}执行完后再返回值,若是finally{}语句修改了返回值,返回修改后的返回值。这样容易产生混乱,实际编程过程要避免。
238
239
240 45 final 、 finally、 finalize() 区别?
241 finalize()方法是在system.gc()回收垃圾之前进行准备工作。
242
243
244 46 异常catch顺序?B继承A, A继承Exception
245 Try{
246 throw new B("b");
247
248 }catch(A e){sysou("a");
249 }catch(Exception e){
250 sysou("Exception");}
251
252 输出 b。此题出自 Java thinking
253
254
255 47 Thread.sleep() / wait() yield() 的区别是什么?
256 257
258 48。如何进行线程同步编程(银行存款)
259 法一:对共享资源(共同方法)前加 synchronized修饰
260 法二:在线程类中调用共享方法的时候,使用同步代码块进行同步
261 run(){
262 synchronized(account){account.deposit(money);}
263 }
264 法三:在共享资源所处的类中,添加一个Lock成员变量
265 private Lock accountLock=new ReentrantLock();
266 法四:Semaphore实现同步
267 法五:CountdownLatch实现同步
268
269
270 49 编写线程类有几种实现方式?
271 法一:继承Thread类 ,是单继承,不推荐
272 法二:实现runnable接口,接口更灵活
273 法三:实现Callable<T>接口,重写 public T call(){}
274
275
276 50 启动一个线程是调用run()还是start()?
277 是调用start(),使jvm运行,jvm调用run()
278
279
280 51 什么是线程池?
281 设计背景
282 创建和销毁对象是非常消耗时间和内存资源的,每创建一个对象,jvm就要一直跟踪它,当对象不是需要了,jvm进行垃圾回收。这样就产生了“池化资源”技术
283 线程池
284 事先创建多个线程对象放入一个容器中,需要时直接从容器中获得,用完再放入池中。这样减少了创建对象和销毁对象对内存资源的开销
285 线程池接口
286 Executor ExecutorService--
287 Executors工具类提供了创建线程池的静态工厂方法
288 newSingleThreadExecutor()
289 newFixedThreadPool()
290 newCachedThreadPool()
291 newScheduledThreadPool()
292
293 52. Synchronized 与 lock的异同是什么?
294 Syn自动释放锁
295 Lock需要手工释放锁
296
297
298 53 Statement /PreparedStatement /CallableStatement 区别?
299 Prepared可以对sql语句进行预编译,减少sql语句编译错误;
300 Pre 使传入sql语句中参数是占位符,减少用字符串拼接sql语句注入带来的不安全;
301 Pre 具有缓存sql语句作用,对频繁执行的相同查询,不需要重复查询数据库,性能好
302 CallableStatement提供对存储过程的调用。存储过程是指数据库中可以实现特定功能的sql语句集合。存储过程优点减少网络传输的开销,缺点数据库迁移,不同数据库之间存储过程的书写不一致,
303
304 54 jdbc操作数据库时,如何提升读取数据的性能?更新数据库的性能?
305 306 读:通过ResultSet的setFetchSize()方法指定每次抓取的记录数,抓取越多,查询越快,用空间换时间;
307 308 更新:使用Preparedstatement构建批量处理。
309
310
311 312
313 55 314
315 事务的四种属性是什么?
316 原子性 atomic
317 一致性 318 隔离性
319 持久性
320
321 56 数据并发访问操作,会产生哪些问题?
322 脏读: A事务读取B事务未提交的数据,若B事务执行回滚,那么A事务读取的就是脏数据
323 不可重复读:A事务前后两次读取的数据不相同,在读取前后数据被B事务修改过
324 幻读:A事务查询的结果集比之前查询多处一些数据,原因是B事务添加了新数据
325 第一类丢失更新:(A回滚,B事务更新的数据丢失)事务A回滚,事务B提交的更新数据都丢失;
326 第二类丢失更新:(A提交,B事务更新的数据丢失)事务A的提交覆盖事务B已经提交的数据,造成事务B所做的操作丢失
327
328 57 如何解决数据并发访问问题?
329 锁机制,数据库为用户提供了自动锁机制;用户通过选择隔离级别给数据加上不同类型的锁。
330 隔离级别
331 READ UNCOMMITED 不允许第一类丢失更新。注明:A事务回滚(uncommitted),B事务更新的数据不丢失。
332 READ COMMITED 注明:当A事务提交成功时,B事务更新的数据不丢失。
333 REPEATALE READ 注明: 当A事务重复读取数据时,事务前后保持一致。
334 SERIALIZABLE 隔离级别最高
335
336 58JDBC 如何进行事务处理?
337 将JDBC连接数据的一系列代码操作当作一个事务,连接过程中若是出现异常,进行回滚。
338 Connection提供了处理事务的方法 339 setAutoCommit(true/false),可以实现系统自动提交和用户手动显式提交。
340 用户手动显式提交 使用 commit();
341 出现异常时,使用rollback();
342 jdk 3.0以后,引入了 savepoint保存点概念,可以设置保存点,实现回滚到指定保存点处
343
344 59 JDBC 能处理Blob和Clob数据类型吗?
345 Blob是Binary large object Clob 是 Character large object 346 可以处理,InputStream in = new FileInputStream("test.jpg")
347 ps.setBinaryStream(2, in)
348
349 60 获得类的类对象有哪些方式?
350 String str="hello";
351 类型.class 例如 String.class
352 对象.getClass() 例如 “hello”.getClass()
353 Class.forName() 例如 Class.forName("java.lang.String")
354
355 61 反射这方面需要恶补
356
357 62 面向对象的 六原则一法则是什么?
358 1单一职责原则:一个类只做它该做的事情,实现高内聚原则
359 2开闭原则:对扩展开放,对修改关闭
360 3依赖倒转原则:面向接口编程,声明方法的参数类型、方法的返回类型、变量的引用类型时,尽可能使用抽象类型而不用具体类型
361 4里氏替换原则:任何时候都可以用子类型来替换掉父类型
362 5接口隔离原则:接口要小而专,不要大而全
363 6合成聚合复用原则:多用组合少用继承实现代码复用(将狗继承宠物改成狗类有一个宠物成员变量)
364 类之间的三种关系:继承/组合/依赖 ,比如学生是人类,学生有姓名/年龄(成员变量),学生使用文具学习(方法参数)
365 迪米特法则:低耦合原则
366
367 63 简述一下你知道的设计模式?
368 工厂模式
369 代理模式
370 适配器模式
371 双亲模式
372
373 64 线程安全和线程不安全的单例模式?
374 public class Singleton {
375 private Singleton(){}
376 private static Singleton instance = new Singleton();
377 public static Singleton getInstance(){
378 return instance;
379 }
380 }
381
382 public class Singleton {
383 private static Singleton instance = null;
384 private Singleton() {}
385 public static synchronized Singleton getInstance(){
386 if (instance == null) instance = new Singleton();
387 return instance;
388 }
389 }
390
391 65 什么是UML?
392 UML是统一建模语言,常用的建模工具:Viso PowerDesign等
393 ————————————————
394 版权声明:本文为CSDN博主「四两数字先生」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
395 原文链接:https://blog.csdn.net/Java_stud/article/details/91129713