小菜鸟之面试题上

感谢四两先生

此文只为笔记

  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

猜你喜欢

转载自www.cnblogs.com/czg-0705/p/11871580.html