zoukankan      html  css  js  c++  java
  • JAVA面试总结

    JAVA基础知识

    string的常用方法 

     https://blog.csdn.net/lz_1014/article/details/86241850

       1. length():获取字符串的长度,其实也就是字符个数

       2. equals(Object obj):比较字符串的内容是否相同

       3. split():去除字符串中指定的的字符,然后返回一个新的字符串

       4. substring(int start):从start开始截取字符串

       5. charAt(int index):获取指定索引处的字符

       6. indexOf(String str):获取str在字符串对象中第一次出现的索引

       7. replace(char oldChar, char newChar):将指定字符替换成另一个指定的字符

       8. contains(CharSequence s):查看字符串中是都含有指定字符

       9. concat(String str):在原有的字符串的基础上加上指定字符串

     10. trim():去除字符串两端空格

     11. subSequence(int beginIndex,int endIndex ):截取字符串中指定位置的字符组成一个新的字符串

     12. toCharArray():把字符串转换为字符数组

     13. toLowerCase():把字符串转换为小写字符串

     14. toUpperCase():把字符串转换为大写字符串

    字符串转换成整数
       interget.parseInt()​
    ​   interget.valueOf()

       这两个方法都是java.lang.Integer类中的静态方法。当输入的字符串不是有效的整数,这两个方法都会抛出NumberFormatException异常。

       Integer.parseInt()和Integer.valueOf()最主要的不同的就是

         . Integer.parseInt()方法返回基础数据类型int

          .valueOf()返回的是java.lang.Integer对象。

    String,Stringbuilder与Stringbuffer的区别    

    String,StringBuffer,StringBuilder三者都是用来创建和操作字符串的,

    而String创建的字符串的值是不可变的,每次对字符串操作都会产生一个新的Sting对象,这样不仅效率低而且浪费内存空间,

       StringBuffer和StringBuilder两者创建的字符串,值是可变的,并且多次操作并不会产生新的对象,

    三者的区别:

    1)字符修改上的区别(主要)

        String:不可变字符串;

        StringBuffer:可变字符串、效率低、线程安全;

        StringBuilder:可变字符序列、效率高、线程不安全;

    2)初始化上的区别,String可以空赋值,后者不行,报错

    小结:

        1)速度:StringBuilder ----->StringBuffer ----->String (快----->慢);
        2)如果操作的数据很少,则使用String;
        3)单线程操作字符缓冲区,数据量大,使用StringBuilder;
        4)多线程操作字符串缓冲区,操作数据量大,使用StringBuffer;

    字符串返回指定字符的下标的方法
       indexof()​,返回字符的首次出现的下标
       lastindexof()​返回字符最后一次出现的下标

    字符串拼接的方法,以及区别

       append()​,concat(),+ 

      a:   concat()方法:String类的concat()方法(只能用于拼接字符串,不能拼接其他类型的数据)将指定的字符串拼接到该字符串的末尾。 并且字符串本身和拼接的字符串都不能为null,否则运行程序后会报空指针异常NullPointerException(编译时没有报错)。

      b:    "+":可以对字符,数字,字符串等数据类型的拼接

      c:   append()方法:可以对字符,数字,字符串等数据类型的拼接,结果返回一个StringBuffer类型的对象

     两个日期类型比较大小

       1.java.util.Date类实现了Comparable接口,可以直接调用Date的compareTo()方法来比较大小

           compareTo()方法的返回值,date1小于date2返回-1,date1大于date2返回1,相等返回0

       2.通过Date自带的before()或者after()方法比较

           before()或者after()方法的返回值为boolean类型

       3.通过调用Date的getTime()方法获取到毫秒数来进行比较

    https://blog.csdn.net/lz199719/article/details/81261336?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

    ArrayListLinkedList的区别

    1).数据结构

          ArrayList是实现了基于动态数组的数据结构实现的,LinkedList是基于双链表实现的。

    2).随机访问集合元素

          Array是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的,可以直接返回数组中index位置的元素,因此在随机访问集合元素上有较好的性能。

         LinkedList的随机访问集合元素时性能较差,因为需要在双向列表中找到要index的位置,再返回;

    3).新增和删除操作

         对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

        因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组

    4).内存

        因为ArrayList的每个索引的位置是实际的数据,

       而LinkedList需要更多的内存,因为LinkedList中的每个节点中存储的是实际的数据和前后节点的位置。

    hashmap的遍历模式,怎么写的,怎么获取key的集合

    第一种:遍历HashMap的entrySet键值对集合

                1.通过HashMap.entrySet()得到键值对集合;

                2.通过迭代器Iterator遍历键值对集合得到key值和value值;

    第二种:遍历HashMap键的Set集合获取值;

                1.通过HashMap.keySet()获得键的Set集合;

                2.遍历键的Set集合获取值;

    第三种:遍历HashMap“值”的集合;

                1.通过HashMap.values()得到“值”的集合

                2.遍历“值”的集合;

    https://www.cnblogs.com/xyfer1018/p/10434827.html

     hashmap和hashtable的区别

      HashMap和Hashtable都实现了Map接口,线程安全性,主要的区别有:线程安全性,同步(synchronization),以及速度。

       1).HashMap支持空键值对,而HashTable不支持空键值对

       2).HashMap的方法不是Synchronize的,所以线程不安全,效率高

             HashTable的方法是Synchronize的,所以线程安全,效率低

       3).HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsValue 和 containsKey。

       4).HashTable 继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的 Map interface 的一个实现 

    hashmap

    线程不安全

    允许有null的键和值

    效率高一点、

    方法不是Synchronize的要提供外同步

    有containsvalue和containsKey方法

    HashMap 是Java1.2 引进的Map interface 的一个实现

    HashMap是Hashtable的轻量级实现

    hashtable

    线程安全

    不允许有null的键和值

    效率稍低、

    方法是是Synchronize的

    有contains方法方法

    、Hashtable 继承于Dictionary 类

    Hashtable 比HashMap 要旧

    数据库

    oracle​分页 ,MySQL分页 

      MySQL: 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。

       oracle​分页:通过ROWNUM以及子查询的帮助下来进行分页

        select *from(

           select rownum r,t.* from(
                 select e.*

                  from emp e , dept d

                where e.deptNo = d.deptNo

                 order by e.empNo desc ) t
            where rownum < =n)
        where r >= m;

     MySQL分页: select * from 【表名】 limit m,n;

        1)limit  前面不需要加 and 或者 where ,一般直接跟在语句末尾即可。 
        2)m 表示起始数据位置,即从第m条数据开始查询 
        3)n 表示该页数显示n条数据
     
    mysql动态标签有哪些
     动态SQL片段  <sql>,<include>
     动态SQL标签  <select>,   <insert>,   <update>,   <delete>
     动态 sql 拼接   <if>,<foreach>,<choose>
     格式化输出     <where>,<set>,<trim>
     
     

    mysql动态sql标签

       4.1 if 标签

          if 标签通常用于 WHERE 语句、UPDATE 语句、INSERT 语句中,

          通过判断参数值来决定是否使用某个查询条件、判断是否更新某一个字段、判断是否插入某个字段的值。

      4.2 foreach 标签

          foreach 标签主要用于构建 in 条件,可在 sql 中对集合进行迭代。也常用到批量删除、添加等操作中。

      4.3 choose 标签
          有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。

          MyBatis 提供了 choose 元素,按顺序判断 when 中的条件是否成立,如果有一个成立,则 choose 结束。

           当 choose 中所有 when的条件都不满则时,则执行 otherwise 中的 sql。类似于 Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。

      if 是与(and)的关系,而 choose 是或(or)的关系。

    3.mysql取当天的函数

      mysql要实现获取当前时间、前后一天等时间需要用到两个函数:date_sub()函数和now()函数

        1、DATE_SUB() 函数:从日期内减去指定的时间间隔
                语法:DATE_SUB(date,INTERVAL expr type)

                 date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。

        2、时间函数NOW()、CURDATE()、CURTIME()
                 NOW()函数:当前时间(年月日时分秒)
                 CURDATE()函数:当前时间(只包含年月日)
                 CURTIME()函数:当前时间(只包含时分秒)

    详细参照:https://blog.csdn.net/xhf852963/article/details/102794167


    4.​mysql什么情况下索引失效

    框架

    forward和redirect的区别

       这两者都是servlet种的两种主要的跳转方式。forward又叫转发,redirect叫做重定向。

     两者的区别总结:

    1. 从地址栏显示来说:
        1)forward是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。
        2)redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的地址。

    2. 从数据共享来说:
        1)由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。即可以共享数据
        2)redirect不能共享

    3. 从运用的地方来说
        1)forword 一般用于用户登录的时候,根据角色转发到相应的模块
        2) redirect一般用于用户注销登录时返回主页面或者跳转到其他网站

    4. 从效率来说:

              forword只有一次请求;而redirect有两次请求,
        1)forword效率高,而redirect效率低

    5. 从本质来说:

        1)forword转发是服务器上的行为,而redirect重定向是客户端的行为

       详细的讲解: https://blog.csdn.net/weixin_37766296/article/details/80375106

    1.redis

    2.springboot

    3.MyBatis

       ${}和#{}的区别

          #{}是预编译处理,${}是字符串替换。

         1) . Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的set 方法来赋值;

              Mybatis 在处理${}时,就是把${}替换成变量的值。

         2) .#{} 的参数替换是发生在 DBMS 中,而 ${} 则发生在动态解析过程中,

        3) .#{}方式能够很大程度防止sql注入,提高系统安全性。而${}方式无法防止Sql注入。

       4) .一般能用#{}的就别用${}。${}方式一般用于传入数据库对象,例如传入表名.

           MyBatis排序时使用order by 动态参数时需要注意,用${}而不是#{}

    tomat部署文件放到呢: https://blog.csdn.net/liangjiabao5555/article/details/103875387

    左连接和右连接的区别

    左连接: LEFT JOIN 

                    只要左边表中有记录,数据就能检索出来,而右边有的记录必要在左边表中有的记录才能被检索出来。

    右连接: INNER JOIN

                     右连接是只要右边表中有记录,数据就能检索出来。

    having的用法

    动态标签where和写死的where的区别


    几种设计模式


    单例模式的懒汉模式以及饿汉模式的区别
    线程池的主要参数
    什么时候创建核心线程池,什么时候在队列里,什么时候在最大线程池
    aop和ioc是什么
    常用注解方式
    多列索引,最左匹配
    rides的常用数据类型

    1.死锁的原理

    2.乐观锁,悲观锁
    3.java跨平台的原理

    5.代码管理怎么管理的

    为什么有线程池
    线程的创建

    线程池的核心线程数,最大线程池

    数据库去重的关键字

  • 相关阅读:
    多线程——Thread与Runnable的区别(28)
    多线程——Runnable接口实现多线程(27)
    多线程——调用start()方法与直接调用run()方法的区别
    动态规划---优化编辑器问题(计算字符串距离)
    网易2017春招笔试真题编程题集合(4)——消除重复元素
    网易2017春招笔试真题编程题集合(3)——调整队形
    网易2017春招笔试真题编程题集合(2)——赶去公司
    网易2017春招笔试真题编程题集合(1)——双核处理
    Delphi2010安装win10不能编译问题
    数据类型转换byteushotint64(long)
  • 原文地址:https://www.cnblogs.com/1123-wyl/p/14605689.html
Copyright © 2011-2022 走看看