Java 面试题-2

另有:java基础知识总结

1. 执行以下程序后输出的结果是 AB,B

Java 面试题-2

  • y=x;这一句没有任何意义,这只是改变了局部变量的指向,并没有修改哪一个对象,所以对外部无影响。

2. Integer.MAX_VALUE+1=Integer.MIN_VALUE

  • Integer.MAX_VALUE的二进制是0111 1111 1111 1111 1111 1111 1111 1111

  • Integer.MIN_VALUE的二进制是 1000 0000 0000 0000 0000 0000 0000 0000

3. log4j 日志输出级别

  • FATAL level: 指出每个严重的错误事件将会导致应用程序的退出.

这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL

4. 下列哪些方法可以使线程从运行状态进入到阻塞状态( BCD )

A.notify

B.wait

C.sleep

D.yield

5. 下列关于 Thread 类提供的线程控制的方法中,错误的一项是(A )

A. 在线程 A 中执行线程 B 的 join()方法,则线程 A 等待直到 B 执行完成

B. 线程 A 通过调用 interrupt()方法来中断其阻塞状态。

C. currentThread()方法返回当前线程的引用

D. 若线程 A 调用方法 isAlive()返回为 true,则说明 A 正在执行中

6. String s1 =Topwalk; St ring s2 =”Company; ” 以 下 方 法 可 以 得 到 字 符 串“TopwalkCompany ” 有:( ABD )

  • s2+s1;

  • s1.concat(s2)

  • s1.append(s2);(stringbuffer的方法)

  • StringBuffer buf = new StringBuffer(s1);buf.append(s2);

7. String s= new String( “xyz “); 创建几个对象

  • 首先在string池内找,找到?不创建string对象,否则创建,这样就一个string对象
  • 遇到new运算符号了,在内存上创建string对象,并将其返回给s,又一个对象

8. Oracle 的分页语句的关键字:rownum

没有limit

9. 选出可查询出所有的表和视图的方法:B

A.preparedStatement.getMetaData().getTables();
B.connection.getMetaData().getTables();
C.result.getMetaData().getTables();
D..DiverManager.getMeta().getTables();

10. 可以监控到数据库变化的机制

  • 存储过程
  • 数据库日志

11. truncate ,drop,delete

  • truncate 只删数据不删结构
  • delete 类似truncate,但一行一行,慢
  • drop 结构数据都删

12. 触发器

  • 触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。

  • 触发器可查询其他表,且可以包含复杂的 SQL 语句。 主要用于强制服从复杂的业务规则或要求。 例如,根据客户当前的帐户状态,控制是否允许插入新订单。

  • 触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。

DML触发器分为:

1. after触发器(之后触发)

  • insert触发器

  • update触发器

  • delete触发器

2. instead of 触发器 (之前触发)

  • 触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。由系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。

13. 文件对外共享的协议有: FTP;Windows 共享

14. 从 cookie 中拿到 session?

  • session 在服务器端,cookie 在客户端(浏览器),session 默认被存在在服务器的一个文件里(不是内存),session 的运行依赖session id,而session id是存在cookie 中的,也就是说,如浏览器禁用了 cookie ,同时session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id);session 可以放在 文件、数据库、或内存中都可以。用户验证这种场合一般会用 session ,因此,维持一个会话的核心就是客户端的唯一标识,即 session id

15. SpringMvc 拦截器,过滤器,拦截器,监听器有什么区别?

  • 拦截器是指通过统一拦截从浏览器发往服务器的请求来完成功能的增强。
    使用场景:解决请求的共性问题(乱码问题、权限验证问题)
  • 过滤器
    Servlet 中的过滤器 Filter 是实现了 javax.servlet.Filter 接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在 web.xml 文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用
    户是否已经登陆、有没有权限访问该页面等等工作。它是随你的 web 应用启动而启动的,只初始化一次,以后就
    可以拦截相关请求,只有当你的 web 应用停止或重新部署的时候才销毁。
  • 监听器
    Servlet 的监听器 Listener,它是实现了 javax.servlet.ServletContextListener 接口的服务器端程序,它是随 web 应用的启动而启动,只初始化一次,随 web 应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等
  • 拦截器
    拦截器是在面向切面编程中应用的,就是service 或一个方法前调用一个方法,或在方法后调用一个方法。基于 JAVA 的反射机制。拦截器不是在 web.xml

    • 过滤器:所谓过滤器顾名思义是用来过滤的,在 java web 中,你传入的 request,response 提前
      过滤掉一些信息,或者提前设置一些参数,然后再传入 servlet 或者 struts 的 action 进行业务逻辑,比
      如过滤掉非法 url(不是 login.do 的地址请求,如果用户没有登陆都过滤掉),或者在传入 servlet 或者
      struts 的 action 前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话)。
      filter 流程是线性的, url 传来之后,检查之后,可保持原来的流程继续向下执行,被下一个 filter, servlet
      接收等.
    • 监听器:这个东西在 c/s 模式里面经常用到,他会对特定的事件产生产生一个处理。监听在很多
      模式下用到。比如说观察者模式,就是一个监听来的。又比如 struts 可以用监听来启动。Servlet 监听器
      用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。
    • java 的拦截器 主要是用在插件上,扩展件上比如 hivernate spring struts2 等 有点类似面向切
      片的技术,在用之前先要在配置文件即 xml 文件里声明一段的那个东西。

    16. ThreadLocal 的原理和应用场景

  • 每一个 ThreadLocal 能够放一个线程级别的变量,可它本身能够被多个线程共享使用,并且又能够达到线程安全的目的,且绝对线程安全。
  • ThreadLocal 的应用场景:
    最常见的 ThreadLocal 使用场景为 用来解决数据库连接、Session 管理等

17. Spring MVC reqtuest 接收设置是线程安全?

  • 是,request、response 以及 requestcontext 在使用时不需进行同步。根据 spring 默认规则,controller 对于 beanfactory 是单例的。即 controller 只有一个, controller 中的request 等实例对象也只有一个

18. Maven 常见的六种依赖范围

  1. compile:编译依赖范围(默认),对其三种都有效
  2. test:测试依赖范围,只对测试 classpath 有效
  3. runtime:运行依赖范围,只对测试和运行有效,编译主代码无效,例如 JDBC
  4. provided:已提供依赖范围,只对编译和测试有效,运行时无效,例如 selvet-api
  5. system:系统依赖范围.谨慎使用.例如本地的,maven 仓库之外的类库文件
  6. import(maven2.0.9 以上):导入依赖范围,不会对其他三种有影响

19. 自动装配的各种模式,或装配方式。

  • 在 Spring 框架*有 5 种自动装配:
    1. no:Spring 框架的默认设置,该设置下自动装配是关闭的,需自行在 bean 定义中用标签明确的设置依赖关系。
    2. byName:根据 bean名称设置依赖关系。向一个 bean 中自动装配一个属性时,容器将根据 bean 的名称自动在配置文件中查询一个匹配的 bean。找到就装配这个属性,没找到就报错。
    3. byType:可根据 bean 类型设置依赖关系。向一个 bean 中自动装配一个属性时,容器根据bean的类型自动在在配置文件中查询一个匹配的 bean。如果找到的话,就装配这个属性,没找到就报错。
    4. constructor:造器的自动装配和 byType 模式类似,但仅适用于与有构造器相同参数 的 bean,如在容器中没有找到与构造器参数类型一致的 bean,将抛出异常。
    5. autodetect:该模式自动探测使用构造器自动装配或者 byType 自动装配。首先会找合适的带参数的构造器,找到就用构造器自动装配,没找到相应的构造器或是无参构造器,容器就会自动选择 byTpe 的自动装配方式。

20. 反射机制一般应用在什么场景

  1. 逆向代码 ,例如反编译
  2. 与注解相结合的框架 例如 Retrofit
  3. 单纯的反射机制应用框架 例如 EventBus 2.x
  4. 动态生成类框架 例如 Gson