美文网首页2019年JAVA面试 问题总结
2019java面试基础问题总结(21~40题)

2019java面试基础问题总结(21~40题)

作者: WinkTink | 来源:发表于2019-05-15 14:43 被阅读18次

    21.  String、StringBuffer与StringBuilder之间有什么区别?

       ① 安全方面
            StringBuilder:线程非安全的

       StringBuffer:线程安全的

       当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

    ②速度方面

             StringBuilder >  StringBuffer  >  String

     ③ 对于三者使用的总结: 

         1) 如果要操作少量的数据用 = String

      2) 单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

      3) 多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

    22.  速度 String <(StringBuffer,StringBuilder)的原因?

         String:字符串常量

      StringBuffer:字符创变量

      StringBuilder:字符创变量

         从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问  ,比如这段代码:

    1 String s = "abcd";

    2 s = s+1;

    3 System.out.print(s);// result : abcd1\

           我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。

        而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。

    33. 使用代理的有什么优点?

            业务类只需要关注业务逻辑本身,保证了业务类的重用性。

    34. 聊一聊Java静态代理和Java动态代理?

            静态代理: 代理对象和目标对象实现了相同的接口,目标对象作为代理对象的一个属性,具体接口实现中,代理对象可以在调用目标对象相应方法前后加上其他业务处理逻辑。

    缺点:一个代理类只能代理一个业务类。如果业务类增加方法时,相应的代理类也要增加方法。

            动态代理:Java动态代理是写一个类实现InvocationHandler接口,重写Invoke方法,在Invoke方法可以进行增强处理的逻辑的编写,这个公共代理类在运行的时候才能明确自己要代理的对象,同时可以实现该被代理类的方法的实现,然后在实现类方法的时候可以进行增强处理。

    实际上:代理对象的方法 = 增强处理 + 被代理对象的方法

    35. JDK和CGLIB生成动态代理类的区别?

            JDK动态代理只能针对实现了接口的类生成代理(实例化一个类)。此时代理对象和目标对象实现了相同的接口,目标对象作为代理对象的一个属性,具体接口实现中,可以在调用目标对象相应方法前后加上其他业务处理逻辑

            CGLIB是针对类实现代理,主要是对指定的类生成一个子类(没有实例化一个类),覆盖其中的方法 。

            默认的策略是如果目标类实现接口,则使用JDK动态代理技术,如果目标对象没有实现接口,则默认会采用CGLIB代理

    36. Servlet和Filter的区别?

            整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

    Filter有如下几个用处:

            Filter可以进行对特定的url请求和相应做预处理和后处理。

            在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。

            根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。

            实际上Filter和Servlet极其相似,区别只是Filter不能直接对用户生成响应。实际上Filter里doFilter()方法里的代码就是从多个Servlet的service()方法里抽取的通用代码,通过使用Filter可以实现更好的复用。

    37. Filter和Servlet的生命周期?

            1.Filter在web服务器启动时初始化

            2.如果某个Servlet配置了 1 ,该Servlet也是在Tomcat(Servlet容器)启动时初始化。

            3.如果Servlet没有配置1 ,该Servlet不会在Tomcat启动时初始化,而是在请求到来时初始化。

            4.每次请求, Request都会被初始化,响应请求后,请求被销毁。

            5.Servlet初始化后,将不会随着请求的结束而注销。

            6.关闭Tomcat时,Servlet、Filter依次被注销。

    38. Linux常用命令有哪些?

            cd,cp,mv,rm,ps(进程),tar(用来压缩和解压文件),cat(查看内容),chmod,vim,find,ls

    39. Switch能否用string做参数?

            在 Java 7 之前, switch 只能支持byte,short,char,int 或者其对应的封装类以及 Enum 类型。在Java 7中,String 支持被加上了。

    40.  Object有哪些公用方法?

            a.方法equals测试的是两个对象是否相等

            b.方法clone进行对象拷贝

            c.方法getClass返回和当前对象相关的Class对象

            d.方法notify,notifyall,wait都是用来对给定对象进行线程同步的


    相关文章

      网友评论

        本文标题:2019java面试基础问题总结(21~40题)

        本文链接:https://www.haomeiwen.com/subject/wmugoqtx.html