感谢四两先生
此文只为笔记
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