经典JAVA面试题及答案

时间:2021-05-08 14:20:29

QUESTION NO: 1 publicclass Test1 {       publicstaticvoid changeStr(String str){         str="welcome";     }     publicstaticvoid main(String[] args) {           String str="1234";         changeStr(str);         System.out.println(str);     } } //输出结果:1234 //这里虽然是一个静态方法,但是里面的变量是一个局部变量, //所以这里不因为是静态方法,就误认为里面的变量也是静态变量了     QUESTION NO:2 publicclass Test2 {     staticboolean foo(char c) {        System.out.print(c);        returntrue;     }     publicstaticvoid main(String[] argv) {        int i = 0;        //for(65;88&&(i<2);67)        for (foo('A'); foo('B') && (i < 2); foo('C')) {            i++;            foo('D');        }     } }
What is the result? A. ABDCBDCB B. ABCDABCD C. Compilation fails. D. An exception is thrown at runtime.
/*
1.其实foo('A');就是初始化条件,只会执行一次,所以第一个打印的肯定是A
2.因为i=0;循环条件是i<2 (由此可知循环i等于2的时候就会停止循环,)所有0<2满足条件,接着会输出B,然后执行i++;i就变成1了,在输出D
,在最后输出C,
一次循环后的结果是:ABDC
3.第二次循环的开始是foo('A');是初始条件所以不会执行,直接从foo('B')开始,输出B,然后i为1,且小于2,此时循环体内再次执行i++;i的值为2了,再次输出D,最后输出C
第二次循环输出:BDC
4.然后循环再次执行for(foo('A');foo('B')&&(i<2);foo('C'))
直接输出B,i的值在第二轮循环后的值变成了2,2<2不成立,终止循环,输出B
//故输出结果是:ABDCBDCB
*/   QUESTION NO: 3   1. class A { 2. protected int method1(int a, int b) { return 0; } 3. } Which two are valid in a class that extends class A? (Choose two) A. public int method1(int a, int b) { return 0; } B. private int method1(int a, int b) { return 0; } C. private int method1(int a, long b) { return 0; } D. public short method1(int a, int b) { return 0; } E. static protected int method1(int a, int b) { return 0; }
publicclass B extends A{
    //can not reduce the visibility of the inherited method from A     //即不能够使从类A中继续来的方法的可见性降低       //private int method1(int a, int b) { return 0; }         //This static method cannot hide the instance method from A     //静态方法不能够隐藏继承于A的实例     //static protected int method1(int a, int b) { return 0; }         //返回类型与A中的该方法不一致     //public short method1(int a, int b) { return 0; }         /**      *总结:类的继承中,如果要想重载父类的方法,必须要和父类中的返回类型、可见性等等都要操作一致      *否则,程序就会报错。一定遵守子类要遵从于父类的原则      *而我选择的答案居然是privateintmethod1staticprotectedint      *我选择第一个的错误理由是:因为原来为保护的,如果我这里设为public,那么就扩展了其原来的可见性      *本来原来就是对包外不可见的,现在变成对包外可见的了,所以就选择的是private      *选择第二个的错误理由是:都是保护的,这里只是变成了静态的而已      */         //这里是写了一个重载方法,因为参数类型不一致,不会报错     privateint method1(int a, long b) { return 0; }         //可见性可以增大,但是不能够缩小,正确     publicint method1(int a, int b) { return 0; }     } //答案:AC   QUESTION NO: 4   1. public class Outer{ 2. public void someOuterMethod() { 3. // Line 3 4. } 5. public class Inner{} 6. public static void main( String[]argv ) { 7. Outer o = new Outer(); 8. // Line 8 9. } 10. }   Which instantiates an instance of Inner? A. new Inner(); // At line 3 B. new Inner(); // At line 8 C. new o.Inner(); // At line 8 D. new Outer.Inner(); // At line 8//new Outer().new Inner()
publicclass Outer {     publicvoid someOuterMethod() {        // Line 3        new Inner();//放在这里不出错     }     publicclass Inner {     }       publicstaticvoid main(String[] argv) {        Outer o= new Outer();        // Line 8        //o不能够被解释成为一种类型,出错        //new o.Inner();        /**         *下面两种用法,都报下面的错误:         *NoenclosinginstanceoftypeOuterisaccessible.         *Mustqualifytheallocationwithanenclosinginstance         *oftypeOuter(e.g.x.newA()wherexisaninstanceofOuter)         */           //new Outer.Inner();        //new Inner();           } } 答案:A
  QUESTION NO: 5   Which method is used by a servlet to place its session ID in a URL that is written to the servlet’s response output stream? (译:那个方法是servlet用于将其session ID入在一个URL中,该URL写入servlet的响应输出流) A. The encodeURL method of the HttpServletRequest interface. B. The encodeURL method of the HttpServletResponse interface. C. The rewriteURL method of the HttpServletRequest interface. D. The rewriteURL method of the HttpServletResponse interface.
//答案:B
    QUESTION NO: 6   Which two are equivalent? (Choose two) (译:哪两个是等价的?) A. <%= YoshiBean.size%> B. <%= YoshiBean.getSize()%> C. <%= YoshiBean.getProperty("size")%> D. <jsp:getProperty id="YoshiBean" param="size"/> E. <jsp:getProperty name="YoshiBean" param="size"/> F. <jsp:getProperty id="YoshiBean" property="size"/> G. <jsp:getProperty name="YoshiBean" property="size"/>
//答案:C、G

取得属性<jsp:getProperty>

语法<jsp:getProperty name="实例化对象名称(id)" property="属性名称" />
等同于getter方法的调用

  QUESTION NO: 7   Which of the following statements regarding the lifecycle of a session bean are correct?   1. java.lang.IllegalStateException is thrown if SessionContext.getEJBObject() is invoked when a stateful session bean instance is passivated.   2. SessionContext.getRollbackOnly() does not throw an exception when a session bean with bean-managed transaction demarcation is activated.   3. An exception is not thrown when SessionContext.getUserTransaction() is called in the afterBegin method of a bean with container-managed transactions.   4. JNDI access to java:comp/env is permitted in all the SessionSynchronization methods of a stateful session bean with container-managed transaction demarcation.   5. Accessing resource managers in the SessionSynchronization.afterBegin method of a stateful session bean with bean-managed transaction does not throw an exception.         二、三大框架方面问题

1、Spring 事务的隔离性,并说说每个隔离性的区别
解答: Spring事务详解

2、Spring事务的传播行为,并说说每个传播行为的区别
解答: Spring事务详解

3、hibernate跟Mybatis/ ibatis 的区别,为什么选择?
解答: Hibernate与 MyBatis的比较

4、struts跟spring mvc的优缺点,让你选会如何选
解答: spring mvc与struts的区别

5、简单说说Spring 事务机制
解答: Spring事务机制

6、Spring 4.0新特性
解答: Spring4新特性

三、负载均衡、集群相关
1、weblogic 负载均衡的原理和集群的配置
解答: a、WEBLOGIC负载均衡原理       b、负载均衡和集群的配置(参考)

2、Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享  
解答: 参考配置

3、nginx配置文件详解——nginx.conf
解答: Nginx配置文件详细说明

四、项目优化相关
1、web如何项目优化
解答:这个我整理过一次, web项目性能优化(整理)

2、单例模式有几种? 如何优化?
解答: 单例模式的7种用法

3、简单说说线程池的原理和实现
解答: 线程池的原理和实现

五、并发和安全方面
1、项目并发如何处理?(我们是web项目)
解答: 高并发量网站解决方案 ,另外,还有数据库乐观锁,数据库读写分离、使用消息队列、多用存储过程等等

2、简单说说功能权限存在的水平权限漏洞和垂直权限漏洞的场景和解决办法(因为我们目前权限级别就是功能权限)
解答:
A、水平权限漏洞,如下图
经典JAVA面试题及答案
假设机构有 用户A和用户B 两个用户,其中A有1、2和3权限 ,  用户B有 2 和3 的权限,这时候假设用户B 知道1,并给自己添加1的权限,这时候就是水平权限漏洞。
目前解决办法: 1、限制入口,让用户B无法编辑自己的权限   2、对用户B无法进行向上扩展 。最根本的解决办法是深入到数据权限
水平权限漏洞和解决办法

B、垂直权限漏洞
垂直权限案例和解决方案

3、平台上的图片如何防盗链
解答: http下载防盗链原理:http协议的字段referer 记录来实现

4、如何区分上传的图片是不是木马?
解答:1、看上传的图片后缀  2、如何后缀是篡改的,那么每个文件有个魔术数字 文件上传-魔术数字

5、消息队列的原理和实现
解答: 1、消息队列原理      2、 深入浅出 消息队列 ActiveMQ

六、数据库方面
1、mysql查询字段区不区分大小写?
解答:不区分,哪怕值也不区分(我当时还反问了,区不区分大小的应用含义有哪些,面试官没说得出来)

2、简单说说数据库集群和负载均衡、分布式(我不懂这块)
解答: 负载均衡和集群参考  ,  参考2

3、存储过程的结构和优点
解答: 大概结构   
存储过程的优缺点

4、触发器的原理和作用
解答: 参考     六、SQL问答题   表结构:   1、    表名:g_cardapply 字段(字段名/类型/长度): g_applyno        varchar   8;//申请单号(关键字) g_applydate     bigint     8;//申请日期 g_state        varchar     2;//申请状态   2、    表名:g_cardapplydetail 字段(字段名/类型/长度): g_applyno        varchar     8;//申请单号(关键字) g_name        varchar     30;//申请人姓名 g_idcard        varchar     18;//申请人身份证号 g_state        varchar     2;//申请状态 其中,两个表的关联字段为申请单号。   题目: 1、    查询身份证号码为440401430103082的申请日期
2、    查询同一个身份证号码有两条以上记录的身份证号码及记录个数   3、    将身份证号码为440401430103082的记录在两个表中的申请状态均改为07
4、    删除g_cardapplydetail表中所有姓李的记录   //答案
1). select g_applydate from g_cardapply a,g_cardapplydetail b
where a.g_applyno=b.g_applyno and b.g_idcard='440401430103082'

2). select g_idcard,count(g_idcard) as records from g_cardapplydetail
group by g_idcard having count(g_idcard)>=2

3). 为了保持状态的一致性,这里最好用事务提交
begin tran
update g_cardapply set g_state='07' from g_cardapplydetail
where g_cardapply.g_applyno=g_cardapplydetail.g_applyno
and g_cardapplydetail.g_idcard='440401430103082'

update g_cardapplydetail set g_state=07 where g_idcard='440401430103082'

commit

4). delete from g_cardapplydetail where g_name like '李%'