Java面试题(全)
时间:2022-08-15 14:00:00
Java面试大全
- 1. 说一些数据库优化的经验(重点)
- 2. 你有优化 SQL 查询数据经验吗?你通常用什么方法来优化它?
- 3. 事务的四个特点是什么?隔离级别是什么?
- 4. 数据类型 char 与 varchar2 有什么区别?性能有什么优势?
- 5. 如何知道查询? SQL 性能高还是低?
- 6. 数据库锁在开发过程中遇到过吗?如何解锁?
- 7. 如何处理并发数据? (重点)
- 8. delete from table 与 truncate table 的区别?drop table 呢
- 9. union 和 union all 有什么区别?
- 10. JDBC 访问数据库的步骤?(重点)
- 11. 大数据量下的分页解决方案.
- 12. 简要介绍了建立索引和索引分类的作用 ?
- 13. 什么是存储过程,有什么优缺点(重点)
- 14. 存储过程与 SQL 的区别?
- 15. 如何创建视图?
- 16. JAVA 常用的运算符有哪些?这些运算符之间的优先级是什么?
- 17. 在 JAVA 自定义生产 10-100 随机数之间的公式?
- 18. switch 句子中的表达式可以是什么样的数据?
- 19. while 循环结构与 do...while 不同的循环结构?
- 20. 程序中 break、continue、return 不同的跳转语句?(重点)
- 21. 定义数组的方法是什么?
- 22. 编程实现费波拉契数
- 23. 成员变量和局部变量有什么区别?
- 24. JAVA 中包有什么作用?
- 25. 包命名规范有哪些?
- 26. String 是最基本的数据类型吗?
- 27. `说明类变量和实例变量的区别. (重点) `
- 28. `说明实例法和类法的区别? (重点) `
- 29. 数组有没有 length( )方法? String 有没有 length( )方法
- 30. String s=new String("a");共创造了几个 String 对象?
- 31. Java 传引用和传值有什么区别?
- 32. 如果去掉了 main 方法的 static 修饰符会怎样?
- 33. 如何将 String 类型转化成 Number 类型?
- 34. 什么是 Java 虚拟机?
- 35. Java 访问修饰符是什么?
- 36. &操作符和&&操作符有什么区别? (重点)
- 37. 声明变量和定义变量有什么区别?
- 38. 如何理解变量?
- 39. 如何判断数组是 null 还是为空?
- 40. Java 短路指的是什么?
- 41. `switch 句子能否作用于 byte 上,能否作用于 long 上,能否作用于 String 上? (重点)`
- 42. `short s = 1; s = s 1;有什么问题? short s = 1; s = 1;有什么问题? (重点)`
- 43. char 一个中文汉字存储在变量中吗?为什么? (重点)
- 44. 实现泡沫排序(重点)
- 45. "=="和 equals 方法有什么区别?(重点)
- 46. 静态变量和实例变量的区别?
- 47. 谈谈你对 static 理解关键词(重点)
- 48. 能不能从一个开始? static 方法内部发出对非 static 调用方法?
- 49. Integer 与 int 区别(重点)
- 50. Math.round(11.5)等多少? Math.round(-11.5)等多少?
- 51. `请说出作用域 public,private,protected,以及不写的区别(重点)`
- 52. Java 有过程和函数吗?
- 53. String 和 StringBuffer 区别(重点)
- 54. StringBuffer 与 StringBuilder 区别(重点)
- 55. 数组有没有 length( )这个方法? String 有没有 length( )这个方法?
- 56. 使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 57. 类别和对象之间的关系是什么?
- 58. 什么是封装
- 59. this 关键字
- 60. 什么是继承
- 61. `Overload 和 Override 的区别.Overload 返回值的类型可以改变吗? (重点)`
- 62. super 关键词(重点)
- 63. 抽象和抽象方法
- 64. final, finally, finalize 的区别. (重点)
- 66. 什么是接口
- 67. abstract class 和 interface 有什么区别? (重点)
- 68. 接口可继承接口吗? 抽象是否可以实现(implements)接口? 抽象类是否可以继承实体类(concrete class)? 抽象中能否有静态? main 方法(重点)
- 69. 什么是异常
- 70. `运行时异常(RuntimeException)与一般异常有什么异同? (重点)`
- 71. `java 如何处理语言异常?关键词:throws、throw、try、catch、finally 分别代表什么意义? try 块中能抛出异常吗? (重点)`
- 72. 程序中try{}里面有一个 return 然后跟着这个句子,try 后的finally{}中的代码会被接受吗? 执行?什么时候执行?(重点)
- 73. error 和 exception 有什么区别?
- 74. Java 异常处理机制的简单原理和应用
- 75. throws 和 throw 区别(重点)
- 76. 异常分为几类
- 77. Collection 和 Collections 的区别(重点)
- 78. 数组和集合的主要区别(重点)
- 79. 列出你知道的容器类(即集合类)
- 80. List, Set, Map 是否继承自 Collection 接口? (重点)
- 81. ArrayList、LinkedList 集合的差异(重点)
- 82. Set、List、Map 它们的区别(重点)
- 83. Set 元素不能重复,那么如何区分重复呢? 是用==还是
- 84. List、Map、Set 三个接口,存取元素时,各有什么特点?
- 85. HashMap 和 Hashtable 区别(重点)
- 86. 说出 ArrayList,Vector, LinkedList 存储性能和特性 (重点)
- 87. ArrayList 和 Vector 的区别
- 集合框架中 Collections 和 Arrays 集合框架中有两种非常实用的公:
- 88. 数组和链表在数据结构上有什么区别?为什么?(重点)
- 89. 描述一下 JVM(JAVA 加载虚拟机) class 文件的原理机制
- 90. ClassLoader如何加载(类加载器) class .
- 91. Class.forName 为什么要用?
- 92. 为什么要用 ORM? 和 JDBC 有什么不同?
- 93. JDBC 中的 PreparedStatement 相比 Statement 好处(最后一句话是重点) (重点)
- 94. 分层开发的优势
- 95. 分层开发的原则特点:
- 96. Java 有多少种流?JDK 为每种类型的流量提供了一些抽象的继承,请告诉我它们是什么类型的?
- 97. `字节流和字符流的区别?(重点)`
- 98. `什么是java 如何实现序列化java 序列化?或者请解释Serializable 接口的作用. (重点)`
- 99. 概念和序列化 ID 作用?(这个问题需要看)
- 100. JavaScript 变量的数据类型是什么?
- js 中的 3 弹出新闻提醒
- 101. 什么是 BOM?
- 102. 什么是 DOM?
- 103. Javascript 中定时执行如何实现
- 104. DOM 模型中的常用对象及其方法?
- 105. 如何设置页面元素的显示和隐藏?
- 106. 鼠标事件
- 107. DOM 如何操作文档的标准节点
- 108. 什么是 jQuery
- 109. 你为什么要使用 jQuery?
- 110. 你在公司是怎么用 jQuery 的?(重点)
- 111. jQuery 能做什么?
- 112. $(document).ready( )方法和 window.onload 有什么区别?(重点)
- 113. Jquery 对象和 dom 对象的区别
- 114. jQuery 对象和 dom 对象是怎样转换的?
- 115. 什么是 jQuery 选择器
- 116. jQuery 选择器的种类
- 117. Query 中的选择器 和 css 中的选择器有区别吗?
- 118. jQuery 中的 hover( )和 toggle( )有什么区别?
- 119. 你是如何使用 jQuery 中的 ajax 的?
- 120. jQuery 中 . g e t ( ) 提交和 .get( )提交和 .get()提交和.post( )提交有区别吗?
- 121. jQuery 中的 load 方法一般怎么用的?
- 122. 在 jQuery 执行 ajax 中,提交的 data(数据)主要有几种方式?
- 123. 你知道 jQuery 中的事件冒泡吗,它是怎么执行的,何如来停止冒泡事件?
- 124. jQuery 中的动画吗是怎样用的?(重点)
- 125. 怎样给 jQuery 动态附加新的元素?那么怎样给新生成的元素绑定事件呢?
- 126. 什么是 URL
- 127. Web 应用的目录结构:
- 128. Tomcat 的目录结构:
- 129. `Tomcat 工作原理?(重点)`
- 130. `JSP 的执行过程? (重点)`
- 132. page 指令常用属性?
- 133. JSP 有哪些内置对象?作用分别是什么? (重点)
- 134. Request 对象的主要方法(重点)
- 135. Response 对象的主要方法(重点)
- 136. Servlet API中 forward( ) 与 sendRedirect ( )的区别?
- 137. 在 JSP 中如何实现页面跳转?
- 138. 什么是 Session 机制(重点)
- 139. session 对象的常用方法
- 140. 四种会话跟踪技术(重点)
- 141. Web 应用中的四大作用域 (重点)
- 142. 什么是 Cookie?
- 143. 在 JSP 中如何设置 Cookie?(重点)
- 144. Cookie 的应用场景?
- 145. cookie 与 session 有什么区别?(重点)
- 146. 说出数据连接池的工作机制是什么? (重点)
- 147. 什么是 MVC 设计模式(重点)
- 148. MVC 设计模式的优缺点:(重点)
- 149. 什么是 Servlet
- 150. 说一说 Servlet 的生命周期? (重点)
- 151. 服务器如何响应 Web 客户请求?
- 152. 什么情况下调用 doGet( )和 doPost( )?
- 153. JSP 和 Servlet 有哪些相同点和不同点,他们之间的联系是什么? (重点)
- 154. 如何实现 servlet 的单线程模式
- 155. 在 servlets 和 JSP 之间能共享 session 对象吗?
- 156. EL 隐式对象有哪些?
- 157. jsp 乱码如何解决,给出三种以上的对应解决方案,并给出对应的程序案例;
- 158. 请简述 Cookie, Session 和 Application 它们的区别. (重点)
- 159. `Hibernate 使用步骤(重点)`
- 160. `Hibernate 中实体对象的三种状态. (重点) `
- 161. Hibernate 的数据加载方式
- 162. `Hibernate 如何延迟加载?(重点) `
- 163. Hibernate 中怎样实现类之间的关系?(如:一对多、多对多关系)
- 164.`如何优化 Hibernate?(重点) `
- 165. 说下 Hibernate 缓存机制(重点)
- 166. hibernate 的工作原理
- 167. hibernate 如何连接数据库?
- 168. hibernate 如何进行数据库写操作?
- 169. hibernate 如何从数据中载入对象?
- 170. hibernate 如何进行数据库查询操作?
- 171. cascade 属性和 inverse 属性的作用和区别?
- 172. hibernate 中 get( )与 load( )区别(重点)
- 173. Hibernate 支持两种查询方式:
- 174. 为什么使用 HQL 查询?
- 175. `使用 HQL 步骤以及 HQL 优化(重点) `
- 176. Spring 是什么?
- 177. 使用 Spring 的好处?(重点)
- 178. 什么是依赖,什么是依赖注入? (重点)
- 179. Spring 如何实现 IOC 容器功能(重点)
- 180. 什么是 AOP(Aspect-oriented programming 面向切面编程) (重点)
- 181. Spring AOP 原理(重点)
- 182. AOP 核心概念
- 183. Spring 自动装配的优缺点(重点)
- 184. Spring 依赖检查机制
- 185. 实际开发过程中为什么拆分 Spring 配置文件?
- 186. 采用何种策略拆分 Spring 配置文件?
- 187. Spring 对持久层的支持:(重点)
- 188. Spring 的事务机制(重点)
- 189. 什么是声明式事务.
- 190. Spring 如何使用声明式事务管理 Hibernate 的事务
- 191. `SpringMVC 工作机制?(重点) `
- 192. `什么是 POJO 类(重点) `
- 193. 你熟悉的应用服务器有哪些?
- 194. 什么是 Web 服务(web service)
- 195. `Web 服务的优点有哪些?(重点)`
- 196. Java 领域中的主流框架有哪些?
- 197. `权限管理怎么做的,用到了几张表? (重点)`
- 199. freemarker 静态页面怎么做的,与 jsp 动态页面的区别? (重点)
- 200. 讲讲购物车的设计方案.
- 201. `FastDFS 如何搭建的?怎么用的? (重点)`
- 202. ArrayList,HashMap,HashSet 初始化容量为多少?如果超出自己扩容多少?
- 203. `说说 redis 的五种数据类型(重点)`
- 204. `Solr 在项目里用到了哪些地方? (重点)`
- 205. 电商项目高并发这块,你们怎么做的?
- 206. 使用过 log4j 吗?log4j 中有哪些优先级?
- 207. `实现多线程的方法? (重点)`
- 208. 手写 MySQL,Oracle 分页(重点)
- 209. 手写一个单例(重点)
- 210. Spring 与 SpringMVC 的区别(重点)
- 211. 将 Map 转换为 List
- 212. `拦截器和过滤器的区别(重点)`
- 213. `请讲下堆与栈. (重点)`
- 214. `如何判断 List 集合是否为空? (重点)`
- 215. list.isEmpty( )和 list.size( )==0 有什么区别? (重点)
- 216. list !=null 与 ! list.isEmpty( )有什么区别? (重点)
- 217. 怎么给 tomcat 增加内存? (重点)
- 218. SpringMVC 的运行原理(重点)
- 219. 你觉得 Redis 有哪些优点?有哪些缺点? (重点)
- 220. Mybatis 如何处理结果集
- 221. `内存溢出这块怎么解决? (重点)`
- 223. `Mybatis 的缓存(重点)`
- 224. `线程池有哪些优点? (重点)`
- 225. `项目里文件上传怎么做的? (重点)`
- 226. `项目里 zookeeper 是什么? (重点)`
- 227. `Ajax 的应用场景有哪些? (重点)`
- 228. `Ajax 的工作原理(重点)`
- 229. `简要阐述 Ajax 的实现步骤(重点)`
- 230. `Redis 与 mysql 的区别? (重点)`
- 231. `为什么使用 redis 来生成商品 ID?(重点)`
- 232. `Mybatis 中#与$的区别? (重点)`
- 233. `怎么防止表单重复提交(重点)`
- 234. @Controller 和@Service 的区别,控制器上能写@Service 吗?
- 235. `Java 中交互方式同步与异步是什么?区别是什么? (重点)`
- 236.` Freemarker 生成商品静态页之后,如果商品的数据需要修改怎么办? (重点)`
- 237. JDK1.7 与 JDK1.8 的区别?
- 238. `聚合函数有哪些? (重点)`
- 239. `JUnit4 中@AfterClass@BeforClass@after@before 的区别对比(重点)`
- 240. `悲观锁乐观锁的区别? (重点)`
- 241. 项目为什么使用垂直应用架构?
- 242. 说说你对springboot的理解(什么是springboot)
- 243. Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
- 244. Spring Boot 的配置文件有哪几种格式?它们有什么区别?
- 245. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
- 246. 你如何了解 Spring Boot 中的 Starters?
- 247. Spring Boot 有哪几种读取配置的方式?
- 248. 什么是微服务,你知道哪些微服务框架
- 249. 什么是服务熔断?什么是服务降级?
- 250. Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
- 251. springcloud如何实现服务的注册和发现?
- 252. ribbon和feign区别与联系
- 253. springcloud断路器的作用
- 254. Zookeeper是什么框架?
- 255. 常见的starter会包几个方面的内容?分别是什么?
- 256. Spring boot starter的工作原理
- 257. springboot集成mybatis过程
- 258. springcloud和dubbo的区别
- 259. Redis持久化的两种方式
- 260. HashMap底层实现原理
- 261. 深入理解Java类加载器机制
- 262. 在分布式场景,生成唯一ID有几种实现方案?
- 263. Mybatis一级缓存与二级缓存
- 264. == 和 equals 的区别是什么?
- 265. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
- 266. final 在 java 中有什么作用?
- 267. java 中操作字符串都有哪些类?它们之间有什么区别?
- 268. 接口和抽象类有什么区别?
- 269. 给一个项目模块,怎么去设计开发?
- 270. 2、有写的比较好的代码,可以分享一下吗?见过写的比较差的代码吗?
- 271. 3、数据库优化有哪些了解?
- 272. 数据库的乐观锁如何实现?
- 273. Spring事务传播机制
- 274. 多线程的实现方法?
- 275. 同步的实现方法?
- 276. Redis过期键的删除策略
- 277. redis击穿,穿透,雪崩
- 278. SpringCloud组件
- 279. HashMap,Hashtable,ConcurrentHashMap区别
- 280. Mysql常见索引以及创建
- 281. Mysql引擎MyLSAM和InnerDB
- 282. Redis为什么快?
- 283. Nacos和Eureka区别
- 284. HashMap的底层原理
- 285. Spring,SpringMVC,SpringBoot的区别
- 286. String,StringBuilder,StringBuffer
- 287. Mysql的4种隔离级别
- 288. Spring Bean的生命周期
- 289. 什么是缓存雪崩、缓存穿透,怎么解决
- 290. 说说sleep与wait的区别
- 291. 说说Synchronized与Lock的区别
- 293. 什么是分布式锁?
- 294. 怎么实现分布式锁
- 295. 解锁需要注意什么
- 296. 说说如何实现分布式锁
- 297. 谈谈什么是分布式CAP
- 298. 事务管理(ACID)
- 299. 线程的生命周期包括哪几个阶段?
- 300. 使线程阻塞的方法有哪些?
- 301. Java中的有哪些线程池?
- 302. Java集合ArrayList和LinkedList区别
- 303. 列出一些你常见的运行时异常?
- 304. MySQL有几种关联方式?
- 305. #{}和${}的区别是什么?
- 306. Spring的优缺点
- 307. .Spring中用到的设计模式
- 308. 什么是IOC 和 AOP?
- 309. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
- 310. 声明式事务的隔离级别
- 311. Spring Cloud的优缺点
- 312. spring cloud组件
- 313. Eureka怎么实现高可用
- 314. Nginx与Ribbon的区别
- 315. - Spring Cloud组件--Hystrix
- 316. - 什么是断路器
- 317. - Hystrix有四种防雪崩方式:
- 318. - 谈谈服务降级、熔断、服务隔离
- 319. - Redis有哪些优缺点
- 320. 为什么要用 Redis /为什么要用缓存
- 321. Redis为什么这么快
- 322. Redis 的持久化机制是什么?各自的优缺点?
- 323. 缓存穿透
- 324. 缓存击穿
- 325. redis中的数据类型
- 326. 消息队列的几种工作模式:
- 327. 什么是死锁
- 328. 死锁产生的原因
- 329. 产生死锁的四个必要条件:
- 330. 死锁的避免与预防:
1. 说出一些数据库优化方面的经验?(重点)
-
从 JDBC 编程的角度讲,用 PreparedStatement 一般来说比 Statement 性能高,因为在使用时,SQL 语句被预编译并存储在 PreparedStatement 对象中.然后可以使用PreparedStatement 对象多次高效地执行该语句.
-
有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就可以去掉外键.(比喻:就好比免检产品,就是为了提高效率,充分相信产品的制造商)
-
表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等,将姓名和密码单独从用户表中独立出来等,这些都是分析了业务的特点后,对数据库中表做了优化后的解决方案.也就是说在有些情况下,我们设计数据库可以适度的违反三个范式的设计原则,来获得更好的程序性能.
-
sql 语句全部大写,特别是列名和表名都大写.因为数据库中的语句执行机制是这样的:sql 语句发给 oracle 服务器语法检查和编译成为内部指令缓存和执行指令.而数据库在对语句进行检查和编译时,会自动将 sql 语句转换成大写,并且根据 SQL 缓存的特点,不要拼凑条件,而是用?(占位符参数)和 PreparedStatment 来执行参数化的 sql 语句.
-
还有索引对查询性能的改进.当经常查询索引列中的数据时,需要在表上创建索引.索引占用磁盘空间,并且降低添加、删除和更新行的速度.在多数情况下,索引用于数据检索的速度优势大大超过它的不足之处.但是,如果应用程序非常频繁地更新数据或磁盘空间有限, 则可能需要限制索引的数量
2. 你有优化 SQL 查询数据经验吗?说一下你一般用那些什么方式进行优化?
- 用索引提高效率
- 选择最有效率的表名顺序(ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名,FROM 子句中写在最后的表(基础表 driving table)将被最先处理)
- WHERE 子句中的连接顺序:ORACLE 采用自下而上的顺序解析 WHERE 子句,根据这个原理,表之间的连接必须写在其他 WHERE 条件之前, 那些可以过滤掉最大数量记录的条件必须写在 WHERE 子句的末尾
- SELECT 子句中避免使用 ‘ * ‘:需要写全查询的字段列名.
3. 什么是事务,事务的四个特性是什么?有哪些隔离级别?
- 事务(Transaction):是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元);
- 事务具有 4 个属性,通常称为 ACID 特性:
2.1 原子性(atomicity):事务是一个完整的操作.事务的各步操作是不可分的;要么都执行、要么都不执行.
2.2 一致性(consistency):当事务完成时,数据必须处于一致状态.
2.3 隔离性(isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务.
2.4 持久性(durability):事务完成后,它对数据库的修改被永久保存,事务日志能保持事务的永久性. - 隔离级别分为:Read Uncommitted(读未提交)、Read Committed(读提交)、Repeatable Read(可以重复读)、Serializable(序列化)这 4 种级别
4. 数据类型 char 与 varchar2 有什么区别?性能方面各有什么优势?
char 表示的是固定长度,所占存储空间为你定义时的大小,数据量较大的时候以char 字段为查询条件时查询得快一些.
Varchar2 表示的是实际长度的数据类型,所占存储空间为实际大小,前提是不超过你定义时的长度,如果存储的字段不是定长的,用varchar2 好一些.
5. 你怎么知道查询 SQL 的性能高还是低?
1) 简单的通过查看执行 SQL 的运行时间.
2) 可以通过查看数据库提供的语句执行计划来分析相应的数据信息,例如查看执行计划中对应的COST(即成本耗费)值,反应了运行这段 SQL 的总体估计成本,通常COST 低的执行计划要好一些
6. 在开发过程中遇到过数据库锁吗?怎样解锁?
1) 如果 oracle 中有事务未提交,又打开一个窗口去提交一个新的事务则可能会产生数据库锁.
2) 解锁的方式:
a) 结束当前的 session(会话,此处指和数据库的通讯)自动解锁例如,退出当前数据库连接所用的工具或应用程序.
b) 利用 dba 权限强行关闭掉了执行 Lock 操作的 Session.
示例:通过以上查询知道了 sid 和 SERIAL#(流水号)就可以开杀(就是去关掉会话,俗称杀掉会话)了
–查询出对应会话操作的 sid 和 serial
SELECT sid, serial#, username, osuser FROM v$session;
--根据指定的 sid 和 serial 来关闭对应的会话(杀会话的意思)
ALTER SYSTEM KILL SESSION 'sid,serial';
7. 怎样处理并发数据? (重点)
就数据库操作来说是通过加锁的概念来确保并发数据操作下事务的完整性和数据库的一致性
数据库主要有共享锁和排它锁.当你在修改数据的时候,别人也可以查看,但是他不能修改数据并提交,只能优先你的操作,等你向数据库提交了数据之后他才能执行增删改的操作, 这就是排它锁.共享锁就是你和另外一个用户可以同时共享数据(查看),但是你和他都不能修改.
8. delete from table 与 truncate table 的区别?drop table 呢
- Truncate 是数据定义语言(DDL)做的修改是不能回滚的,就是不可恢复的操作.用了这个命令后就收回了表空间.Delete 是数据操作语言(DML)删除是要把数据写入系统回滚段(rollback segement)中以便恢复时使用.
- 两者都是删除表中的数据而不会影响到表的结构和定义.
- 使用 drop 的话就会删除表的结构
9. union 和 union all 有什么不同?
UNION 在进行表连接后会筛选掉重复的记录,所以在表连接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果.
而 UNION ALL 只是简单的将两个结果合并后就返回.这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了.
从效率上说,UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用 UNION ALL,
10. JDBC 访问数据库的步骤?(重点)
- 加载 JDBC 驱动
- 与数据库建立连接
- 发送 SQL 语句,并得到返回结果
- 处理返回结果
- 关闭资源
11. 大数据量下的分页解决方法.
答:最好的办法是利用 sql 语句进行分页,这样每次查询出的结果集中就只包含某页的数据内容.在 sql 语句无法实现分页的情况下,可以考虑对大的结果集通过游标定位方式来获取某页的数据.
不同的数据库下的分页方案各不一样,下面是主流的三种数据库的分页 sql:
sql server:
String sql =
"select top " + pageSize + " * from students where id not in" +
"(select top " + pageSize * (pageNumber-1) + " id from students order by id)" + "order by id";
mysql:
String sql =
"select * from students order by id limit " + pageSize*(pageNumber-1) + "," + pageSize;
oracle:
String sql = "select * from " +
(select *,rownum rid from (select * from students order by postime desc) where rid<=" + pagesize*pagenumber + ") as t" + "where t>" + pageSize*(pageNumber-1);
12. 简述建立索引的作用和索引的分类 ?
索引的作用:通过使用索引,大大提高数据库的检索速度,改善数据库性能. 索引分类:
- 唯一索引:唯一索引不允许两行具有相同的索引值
- 主键索引:在数据库关系图中为表定义一个主键自动创建主键索引,主键索引是唯一索引的特殊类型
- 聚集索引:在聚集索引中表中各行的事物顺序与键值的逻辑(索引)顺序相同且唯一
- 非聚集索引:非聚集索引建立在索引页上,在查询数据时可以从索引中找到记录存放的位置
- 复合索引:在创建索引时,并不是只能对其中一列创建索引,与创建主键一样,可以将多个列组合作为索引,这种索引称为复合索引
- 全文索引:全文索引是一种特殊类型的基于标记的功能性索引,由 SQL Server 中全文引擎服务创建 和维护
13. 什么是存储过程,有什么优缺点(重点)
存储过程(Stored Procedure)是一组为了完成特定功能的 SQL 语句集,是由流程控制和SQL 语句书写的命名语句块,经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可,可以通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用.
使用存储过程有以下的优点:
具有良好的安全性:可保证数据的安全性和完整性.通过存储过程可以使没有权限直接访问相应数据库对象的用户受控制的间接地执行数据库相关操作,从而保证数据的安全.
执行速度快,效率高:在运行存储过程前,数据库已对其进行了语法和句法分析,并 给出了优化执行方案.这种已经编译好的过程可极大地改善 SQL 语句的性能.由于执行 SQL 语句的大部分工作已经完成,所以存储过程能以极快的速度执行.
减少网络流量:可以降低网络的通信量.
模块化程序设计:存储过程可以封装业务逻辑,并存入数据服务器中,当业务逻辑发生变化时,无需修改调用存储过程的应用程序,只需修改存储过程即可.
使用存储过程的缺点是:
相对而言,调试比较麻烦
移植问题,数据库端代码当然是与具体数据库相关的.
代码可读性差
14. 存储过程与 SQL 的区别?
存储过程是一组预编译的 SQL 语句,经编译后存储在数据库中,可包含一个或多个 SQL 语句.能够完成一定功能的子程序,需要的时候用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程可以包含数据操作语言,逻辑和调用函数等;它又可分为系统存储过程和用户自定义的存储过程.
SQL 指结构化查询语言,是一种 ANSI 的标准计算机语言.
15. 如何创建视图?
语法:create view 视图名 AS
16. JAVA 中常用的运算符有哪些?这些运算符之间的优先级怎么样?
1、算术运算符
2、比较运算符
3、赋值运算符
4、逻辑运算符
运算符之间的优先级:
算术运算符》比较运算符》逻辑运算符》赋值运算符
17. 在 JAVA 自定义一个生产 10-100 之间的随机数的公式?
int random=(int) (Math.random( )*(max-min)+min) int random=(int) (Math.random( )*(100-10)+10)
18. switch 语句中的表达式可以是什么类型数据?
答:表达式的值可以是 byte、short、int 和 char、String、enum 类型的数据,但不能是 float 和 double 类型的数据.
19. while 循环结构与 do…while 循环结构的不同?
while 结构在循环的开始判断下一个迭代是否应该继续.do/while 结构在循环的结尾来判断是否将继续下一轮迭代.do 结构至少会执行一次循环体.
20. 程序中 break、continue、return 跳转语句的不同?(重点)
1、break:跳出循环而执行循环后面的语句
2、continue:跳过循环体中剩余的语句而执行下一次循环
3、return 结束方法的调用.
21. 数组的定义有哪些方式?
int[] arr=new int[5]; int arr[]=new int[5];
int[] arr=new int[]{
1,2,3,4,5};
int[] arr={
1,2,3,4,5};
22. 编写一个程序实现费波拉契数
int[] num=new int[20]; num[0]=0;
num[1]=1;
for(int i=2;i<20;i++){
num[i]=num[i-1]+num[i-2];
}
for(int j=1;j<=20;j++){
if(j%5==0){
System.out.println( );
}
System.out.print(num[j-1]+" ");
}
23. 成员变量和局部变量的区别是什么?
作用域不同
局部变量的作用域仅限于定义它的方法
成员变量的作用域在整个类内部都是可见的
初始值不同
Java 会给成员变量一个初始值
Java 不会给局部变量赋予初始值
24. JAVA 中包的作用是什么?
1、允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件
2、更好的保护类、属性和方法
3、防止命名冲突
25. 包命名规范有哪些?
1、包名由小写字母组成,不能以圆点开头或结尾
2、包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名
3、包名后续部分依不同机构内部的规范不同而不同
26. String 是最基本的数据类型吗?
String 不是基本数据类型,
基本数据类型包括 byte、int、char、long、float、double、boolean 和 short.
Java.lang.String 类是 final 类型的,因此不可以继承这个类、不能修改这个类.
27. 说明一下类变量和实例变量的区别. (重点)
类变量是所有对象共有的,所有的实例对象都共用一个类变量,内存中只有一处空间存放类变量的值.如果其中一个对象改变了类变量的值,其他对象得到的就是改变后的结果. 当类被加载到内存时,类变量就会分配相应的内存空间.
28. 说明实例方法和类方法的区别? (重点)
方法前面有 static 关键字修饰的为类方法,否则为实例方法. 实例方法可以调用该类中的其他方法;类方法只能调用其他类方法,不能调用实例方法;当类文件加载到内存时, 实例方法不会被分配内存空间,只有在对象创建之后才会分配.而类方法在该类被加载到内 存时就分配了相应的内存空间.
29. 数组有没有 length( )方法? String 有没有 length( )方法
数组没有 length( )方法,只有 length 的属性.String 有 length( )方法.
30. String s=new String(“a”);共创建了几个 String 对象?
两个.其中包括一个字符对象和一个字符对象引用对象.
31. Java 里的传引用和传值的区别是什么?
传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝.
32. 如果去掉了 main 方法的 static 修饰符会怎样?
程序能正常编译.运行时会抛 NoSuchMethodError 异常.
33. 如何将 String 类型转化成 Number 类型?
Integer 类的 valueOf 方法可以将String 转成 Number.下面是代码示例:
String numString = “1000″;
int id=Integer.valueOf(numString).intValue( );
34. 什么是 Java 虚拟机?
Java 虚拟机是能移植到不同硬件平台上的软件系统.
35. Java 的访问修饰符是什么?
访问权限修饰符是表明类成员的访问权限类型的关键字.使用这些关键字来限定程序的方法或者变量的访问权限.它们包含:
public: 所有类都可以访问 protected: 同一个包内以及所有子类都可以访问 private: 只有归属的类才能访问默认: 归属类及相同包下的子类可以访问
36. &操作符和&&操作符有什么区别? (重点)
当一个&表达式在求值的时候,两个操作数都会被求值,&&更像是一个操作符的快捷方式.当一个&&表达式求值的时候,先计算第一个操作数,如果它返回 true 才会计算第二个操作数.如果第一个操作数取值为 fale,第二个操作数就不会被求值.
37. 声明变量和定义变量有什么不同?
声明变量我们只提供变量的类型和名字,并没有进行初始化.定义包括声明和初始化两个阶段 String s;只是变量声明,String s = new String(“bob”); 或者 String s = “bob”;是变量定义.
38. 你怎么理解变量?
变量是一块命名的内存区域,以便程序进行访问.变量用来存储数据,随着程序的执行, 存储的数据也可能跟着改变.
39. 怎么判断数组是 null 还是为空?
输出 array.length 的值,如果是 0,说明数组为空.如果是 null 的话,会抛出空指针异常.
40. Java 中的“短路”是指什么
在 java 逻辑运算中使用逻辑运算符||与&&时将采取“短路”运算.举一个例子
上面一段代码的执行过程是当 a 满足大于 0 的时候将不会再执行后面的 a<1 代码,
这就是“短路”.
41. switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上? (重点)
switch支持的数据类型有: int,short,char,byte,String,enum,不支持long
42. short s = 1; s = s + 1;有什么错? short s = 1; s += 1;有什么错? (重点)
对于 short s = 1; s = s + 1; 由于 s1+1 运算时会自动提升表达式的类型,所以结果是 int 型,再赋值给 short 类型 s1 时,编译器将报告需要强制转换类型的错误.
对于 short s1 = 1; s1 += 1;由于 += 是 java 语言规定的运算符,java 编译器会对它进行特殊处理,因此可以正确编译.
43. char 型变量中能不能存贮一个中文汉字?为什么? (重点)
char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字, 所以,char 型变量中当然可以存储汉字啦.不过,如果某个特殊的汉字没有被包含在
unicode 编码字符集中,那么,这个 char 型变量中就不能存储这个特殊汉字.补充说明:
unicode 编码占用两个字节,所以,char 类型的变量也是占用两个字节.
备注:后面一部分回答虽然不是在正面回答题目,但是,为了展现自己的学识和表现自己对问题理解的透彻深入,可以回答一些相关的知识,做到知无不言,言无不尽.
44. 冒泡排序实现(重点)
口诀:n 个数字来比较,外层循环 N-1,内层循环 N-1-i,两两相比小靠前.
代码示例:
45. "=="和 equals 方法究竟有什么区别?(重点)
操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用操作符
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如 Objet obj = new Object( );引用变量 obj 是一个内存,new Object( )是另一个内存,此时,变量 obj 所对应的内存中存储的数值就是对象占用的那块内存的首地址.对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较.
equals 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的.例如,对于下面的代码:
String a=new String(“foo”); String b=new String(“foo”);
两条 new 语句创建了两个对象,然后用 a,b 这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即 a 和 b 中存储的数值是不相同的,所以,表达式 ab 将返回 false,而这两个对象中的内容是相同的,所以,表达式 a.equals(b)将返回 true.
在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = new String(“quit”); input.equals(“quit”),许多人稍不注意就使用进行比较了, 这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误.记住,字 符串的比较基本上都是使用 equals 方法.
如果一个类没有自己定义 equals 方法,那么它将继承 Object 类的 equals 方法,Object 类的 equals 方法的实现代码如下:
boolean equals(Object o){
return this==o;
}
46. 静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加 static 关键字,而实例变量前则不加.
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了.总之,实例变量必须创建对象后才可以通过这个对象来使用, 静态变量则可以直接使用类名来引用.
47. 谈谈你对 static 关键词的理解(重点)
通常,在一个类中定义一个方法为 static,那就是说,无需本类的对象即可调用此方法,
明为 static 的方法有以下几条限制:
- 它们仅能调用其他的 static 方法.
- 它们只能访问 static 数据.
- 它们不能以任何方式引用 this 或 super.
声明为 static 的变量实质上就是全局变量.当声明一个对象时,并不产生 static 变量的拷贝,而是该类所有的实例变量共用同一个 static 变量.静态变量与静态方法类似.所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间.
48. 是否可以从一个 static 方法内部发出对非 static 方法的调用?
不可以.
因为非 static 方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static 方法调用时不需要创建对象,可以直接调用.也就是说,当一个 static 方法被调用时,可能还没有创建任何实例对象,如果从一个 static 方法中发出对非 static 方法的调用,那个非 static 方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个
static 方法内部发出对非 static 方法的调用.
49. Integer 与 int 的区别(重点)
int 是 java 提供的 8 种原始数据类型之一.Java 为每个原始类型提供了封装类,Integer 是 java 为 int 提供的封装类.int 的默认值为 0,而 Integer 的默认值为 null,即 Integer 可以区分出未赋值和值为 0 的区别,int 则无法表达出未赋值的情况.
另外,Integer 提供了多个与整数相关的操作方法,例如, 将一个字符串转换成整数
Integer.parseInt(“数字字符串”);
Integer 中还定义了表示整数的最大值和最小值的常量.
50. Math.round(11.5)等於多少? Math.round(-11.5)等于多少?
Math 类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil 的英文意义是天花板,该方法就表示向上取整(就是往大值靠拢),所以,Math.ceil(11.3)的结果为 12,Math.ceil(-11.3)的结果是-11;floor 的英文意义是地板,该方法就表示向下取整,所以,Math.floor(11.6)的结果为 11,Math.floor(-11.6) 的结果是-12;最难掌握的是 round 方法,它表示“四舍五入”,算法为 Math.floor(x+0.5), 即 将 原 来 的 数 字 加 上 0.5 后 再 向 下 取 整 , 所 以 ,Math.round(11.5) 的 结 果 为12,Math.round(-11.5)的结果为-11.
51. 请说出作用域 public,private,protected,以及不写时的区别(重点)
这四个作用域的可见范围如下表所示.
说明:如果在修饰的元素上面没有写任何访问修饰符,则表示 default (friendly).
作用域 | 当前类 | 同一包内 | 子孙类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default(不写) | √ | √ | × | × |
private | √ | × | × | × |
备注:只要记住了有 4 种访问权限,4 个访问范围,然后将全选和范围在水平和垂直方向上分别按排从小到大或从大到小的顺序排列,就很容易画出上面的图了.
52. Java 是否有过程和函数?
在 Java 中可以存在过程和函数.在Java 中,对于程序的各种功能的实现,都是通过方法实现的;而方法在运行的时候,就被称为过程.Java 中的函数有 main( ),时间函数等.
53. String 和 StringBuffer 的区别(重点)
JAVA 平台提供了两个类:String 和 StringBuffer,它们可以储存和操作字符串,即包含
多个字符的字符数据.String 类表示内容不