java面试题——基础篇(day5)

61、编写多线程程序有几种实现方式?

https://www.cnblogs.com/programb/p/13021440.html\

62、synchronized 关键字的用法?

https://blog.csdn.net/qq441568267/article/details/53259257

63、举例说明同步和异步。

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

Java中交互方式分为同步和异步两种:

同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;

异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。
区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。

哪些情况建议使用同步交互呢?比如银行的转账系统,对数据库的保存操作等等,都会使用同步交互操作,其余情况都优先使用异步交互

64、启动一个线程是调用 run()还是 start()方法?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM 调度并执行,这并不意味着线程就会立即运行。run()方法是线程启动后要进行回调(callback)的方法。

65、什么是线程池(thread pool)?

https://blog.csdn.net/troubleshooter/article/details/78361835

66、线程的基本状态以及状态之间的关系?

https://blog.csdn.net/bornlili/article/details/55805732

67、简述 synchronized 和 java.util.concurrent.locks.Lock 的异同?

主要相同点:Lock能完成synchronized所实现的所有功能 。

主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更强大的功能,例如,它的tryLock方法可以非阻塞方式去拿锁。

68、Java 中如何实现序列化,有什么意义?

https://www.cnblogs.com/z-zzz/articles/6542493.html

69、Java 中有几种类型的流?

字节流和字符流。字节流继承于 InputStream、OutputStream,字符流继承于Reader、Writer。

https://blog.csdn.net/zhaoyanjun6/article/details/54292148

70、写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。

https://blog.csdn.net/Sun_940903/article/details/79931538

71、如何用 Java 代码列出一个目录下所有的文件?

https://zhidao.baidu.com/question/1953037471923949868.html

72、用 Java 写一个折半查找。

https://blog.csdn.net/weixin_35042833/article/details/114111078

73、XML 文档定义有几种形式?它们之间有何本质区别?解析 XML文档有哪几种方式?

https://blog.csdn.net/qq_28061489/article/details/79464865

74、阐述 JDBC 操作数据库的步骤。

https://blog.csdn.net/troubleshooter/article/details/78364786

75、Statement 和 PreparedStatement 有什么区别?哪个性能更好?

https://www.cnblogs.com/gjack/p/8901307.html

76、使用 JDBC 操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?

要提升读取数据的性能,可以指定通过结果集(ResultSet)对象指定每次抓取数据的大小(fetch size);要提升更新数据的性能可以使用PreparedStatement语句构建批处理(batch)。

77、在进行数据库编程时,连接池有什么作用?

由于创建连接和释放连接都有很大的开销(尤其是数据库服务器不在本地时,每次建立连接都需要进行 TCP 的三次握手,再加上网络延迟,造成的开销是不可忽视的),为了提升系统访问数据库的性能,可以事先创建若干连接置于连接池中,需要时直接从连接池获取,使用结束时归还连接池而不必关闭连接,从而避免频繁创建和释放连接所造成的开销,这是典型的用空间换取时间的策略(浪费了空间存储连接,但节省了创建和释放连接的时间)。池化技术在 Java 开发中是很常见的,在使用线程时创建线程池的道理与此相同。基于 Java 的开源数据库连接池主要有: C3P0、Proxool、DBCP、BoneCP、Druid等。

【补充】在计算机系统中时间和空间是不可调和的矛盾,理解这一点对设计满足性能要求的算法是至关重要的。大型网站性能优化的一个关键就是使用缓存,而缓存跟上面讲的连接池道理非常类似,也是使用空间换时间的策略。可以将热点数据置于缓存中,当用户查询这些数据时可以直接从缓存中得到,这无论如何也快过去数据库中查询。当然,缓存的置换策略等也会对系统性能产生重要影响,对于这个问题的讨论已经超出了这里要阐述的范围。

https://www.jianshu.com/p/e0469f2c8b63

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值