第十四期八股文巴拉巴拉说

aecfa8515d076558f8626645e08df9c2.png

点击上方蓝字关注我们

1

Q:原生 jdbc 操作数据库流程?

c472e32288e15372d48130dfb2f1abbb.png

6969430ff4051bc8b66ca59af5d083b6.png

1、Class.forName()加载数据库连接驱动。

2、DriverManager.getConnection()获取数据连接对象。

3、根据SQL获取sql会话对象,有 2 种方式 Statement和PreparedStatement 。

4、执行SQL处理结果集,执行SQL前如果有参数值就设置参数值setXXX()。

5、关闭结果集、关闭会话、关闭连接。

a283404826e675943b2d22d7340ee229.png

a7e0998f4b54883917cf61a3c1215656.png

9dd8d9ef30d0065bffd8c2d694f32664.png

2

Q:内存溢出原因?解决方法?

935cfb5201a92dd8f65ad196f85bac62.png

bb2899d77714c75c459455e58b4b36f7.png

1、原因:内存中加载的数据量过于庞大,如一次从数据库取出过多数据;集合类中有对对象的引用,使用完后未清空,使得 JVM 不能回收;代码中存在死循环或循环产生过多重复的对象实体;使用的第三方软件中的 BUG;启动参数内存值设定得过小;

2、方案:修改 JVM 启动参数,直接增加内存(-Xms,-Xmx 参数一定不要忘记加。);检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误;对代码进行走查和分析,找出可能发生内存溢出的位置;使用内存查看工具动态查看内存使用情况。

3、关于溢出位置:检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。检查代码中是否有死循环或递归调用。检查是否有大循环重复产生新对象实体。检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中 数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。检查 List、MAP 等集合对象是否有使用完后,未清除的问题。List、MAP 等集合对象会始终存有对对象的引用,使得这些对象不能被 GC 回收。

40026bcc880fab51f1ea5a4409a9e664.png

1c443f06c20ee4c20d11abc2911e6bc9.png

e86f4391c9cd4dbcdf5386e9e53a643c.png

3

Q:静态嵌套类和内部类的不同?

47ace64c467ee55474da313c05b0f456.png

49bcbaa3dc8561e0032416272ef49a00.png

1、静态嵌套类:Static Nested Class 是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。

2、内部类:需要在外部类实例化后才能实例化,其语法看起来挺诡异的。

3704a5cd79a77bdb32ceb4eb2d55fde0.png

19f4200100de8a1e9a39644868db6109.png

7288738c03e5bb4e1145f3c50814dc4a.png

4

Q:字节流和字符流的区别

86b469d52555f55fd0cff9fd48f283ce.png

f9d8e516b66b0b63f417f0ab1240539d.png

1、字节流读取的时候,读到一个字节就返回一个字节;字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在 UTF-8 码表中是 3 个字节)时。先去查指定的编码表,将查到的字符返回。字节流可以处理所有类型数据,如:图片,MP3,AVI 视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。字节流主要是操作 byte 类型数据,以 byte 数组为准,主要操作类就是 OutputStream、InputStream。

2、字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。所以字符流是由 Java 虚拟机将字节转化为 2 个字节的 Unicode 字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点。在程序中一个字符等于两个字节,java 提供了 Reader、Writer 两个专门操作字符流的类。

89d64b4d2a34599d1acd0347f985031c.png

10f4cb1d6e1f488061f48f7a829ca6da.png

4b29cffc184bd3180e3b930b60443e14.png

5

Q:错误和异常有什么区别?

6625adcf3165312dd8acf53b0c38bb85.png

fe6a657f6a1d89382f3cf5cba66bb4f9.png

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。Error 表示有 JVM 进行处理的,是 JVM 出错. Exctption 是可以用程序进行处理的,使用 try…catch 进行处理。

7ff139f4a867d63b9aa0a91c6dfe4ee3.png

38f0259f790276a84b36cad9e3713fd7.png

fb671c7259dc839da3b35af5159fc2f7.png

6

Q:设计模式六大原则?

f4297ead98c69576150ddb32bcc541b5.png

7fafb2cbb41b2d92584ab31553651aad.png

1、单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

2、开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

3、里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。

4、依赖倒转原则(Dependency Inversion Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

5、接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

6、迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。

b88e7e66726938b928434c853ad63122.png

10b4d86fb75f8b0fbb8951ffe4dddbe9.png

aa20ca69e305d2e7ebc4205a76d108ae.png

4794a1441a780f13eb7ca925ace60eb8.png

点个在看你最好看

5667a43c681cfa2f051b2fd37816f872.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值