Java面试题(全)

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. 说出一些数据库优化方面的经验?(重点)

  1. 从 JDBC 编程的角度讲,用 PreparedStatement 一般来说比 Statement 性能高,因为在使用时,SQL 语句被预编译并存储在 PreparedStatement 对象中.然后可以使用PreparedStatement 对象多次高效地执行该语句.

  2. 有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就可以去掉外键.(比喻:就好比免检产品,就是为了提高效率,充分相信产品的制造商)

  3. 表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等,将姓名和密码单独从用户表中独立出来等,这些都是分析了业务的特点后,对数据库中表做了优化后的解决方案.也就是说在有些情况下,我们设计数据库可以适度的违反三个范式的设计原则,来获得更好的程序性能.

  4. sql 语句全部大写,特别是列名和表名都大写.因为数据库中的语句执行机制是这样的:sql 语句发给 oracle 服务器语法检查和编译成为内部指令缓存和执行指令.而数据库在对语句进行检查和编译时,会自动将 sql 语句转换成大写,并且根据 SQL 缓存的特点,不要拼凑条件,而是用?(占位符参数)和 PreparedStatment 来执行参数化的 sql 语句.

  5. 还有索引对查询性能的改进.当经常查询索引列中的数据时,需要在表上创建索引.索引占用磁盘空间,并且降低添加、删除和更新行的速度.在多数情况下,索引用于数据检索的速度优势大大超过它的不足之处.但是,如果应用程序非常频繁地更新数据或磁盘空间有限, 则可能需要限制索引的数量

2. 你有优化 SQL 查询数据经验吗?说一下你一般用那些什么方式进行优化?

  1. 用索引提高效率
  2. 选择最有效率的表名顺序(ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名,FROM 子句中写在最后的表(基础表 driving table)将被最先处理)
  3. WHERE 子句中的连接顺序:ORACLE 采用自下而上的顺序解析 WHERE 子句,根据这个原理,表之间的连接必须写在其他 WHERE 条件之前, 那些可以过滤掉最大数量记录的条件必须写在 WHERE 子句的末尾
  4. SELECT 子句中避免使用 ‘ * ‘:需要写全查询的字段列名.

3. 什么是事务,事务的四个特性是什么?有哪些隔离级别?

  1. 事务(Transaction):是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元);
  2. 事务具有 4 个属性,通常称为 ACID 特性:
    2.1 原子性(atomicity):事务是一个完整的操作.事务的各步操作是不可分的;要么都执行、要么都不执行.
    2.2 一致性(consistency):当事务完成时,数据必须处于一致状态.
    2.3 隔离性(isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务.
    2.4 持久性(durability):事务完成后,它对数据库的修改被永久保存,事务日志能保持事务的永久性.
  3. 隔离级别分为: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 呢

  1. Truncate 是数据定义语言(DDL)做的修改是不能回滚的,就是不可恢复的操作.用了这个命令后就收回了表空间.Delete 是数据操作语言(DML)删除是要把数据写入系统回滚段(rollback segement)中以便恢复时使用.
  2. 两者都是删除表中的数据而不会影响到表的结构和定义.
  3. 使用 drop 的话就会删除表的结构

9. union 和 union all 有什么不同?

UNION 在进行表连接后会筛选掉重复的记录,所以在表连接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果.
而 UNION ALL 只是简单的将两个结果合并后就返回.这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了.
从效率上说,UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用 UNION ALL,

10. JDBC 访问数据库的步骤?(重点)

  1. 加载 JDBC 驱动
  2. 与数据库建立连接
  3. 发送 SQL 语句,并得到返回结果
  4. 处理返回结果
  5. 关闭资源

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. 简述建立索引的作用和索引的分类 ?

索引的作用:通过使用索引,大大提高数据库的检索速度,改善数据库性能. 索引分类:

  1. 唯一索引:唯一索引不允许两行具有相同的索引值
  2. 主键索引:在数据库关系图中为表定义一个主键自动创建主键索引,主键索引是唯一索引的特殊类型
  3. 聚集索引:在聚集索引中表中各行的事物顺序与键值的逻辑(索引)顺序相同且唯一
  4. 非聚集索引:非聚集索引建立在索引页上,在查询数据时可以从索引中找到记录存放的位置
  5. 复合索引:在创建索引时,并不是只能对其中一列创建索引,与创建主键一样,可以将多个列组合作为索引,这种索引称为复合索引
  6. 全文索引:全文索引是一种特殊类型的基于标记的功能性索引,由 SQL Server 中全文引擎服务创建 和维护

13. 什么是存储过程,有什么优缺点(重点)

存储过程(Stored Procedure)是一组为了完成特定功能的 SQL 语句集,是由流程控制和SQL 语句书写的命名语句块,经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可,可以通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用.

使用存储过程有以下的优点:

具有良好的安全性:可保证数据的安全性和完整性.通过存储过程可以使没有权限直接访问相应数据库对象的用户受控制的间接地执行数据库相关操作,从而保证数据的安全.

执行速度快,效率高:在运行存储过程前,数据库已对其进行了语法和句法分析,并 给出了优化执行方案.这种已经编译好的过程可极大地改善 SQL 语句的性能.由于执行 SQL 语句的大部分工作已经完成,所以存储过程能以极快的速度执行.

减少网络流量:可以降低网络的通信量.

模块化程序设计:存储过程可以封装业务逻辑,并存入数据服务器中,当业务逻辑发生变化时,无需修改调用存储过程的应用程序,只需修改存储过程即可.

使用存储过程的缺点是:

相对而言,调试比较麻烦

移植问题,数据库端代码当然是与具体数据库相关的.

代码可读性差

14. 存储过程与 SQL 的区别?

存储过程是一组预编译的 SQL 语句,经编译后存储在数据库中,可包含一个或多个 SQL 语句.能够完成一定功能的子程序,需要的时候用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程可以包含数据操作语言,逻辑和调用函数等;它又可分为系统存储过程和用户自定义的存储过程.
SQL 指结构化查询语言,是一种 ANSI 的标准计算机语言.

15. 如何创建视图?

语法:create view 视图名 AS