• 2018-11-28-Summary


    1.String、StringBuilder、StringBuffer区别

      String:底层使用final修饰了一个不可变的字符数组;StringBuilder和StringBuffer是内容可变的,append方法进行追加内容;

      StringBuilder:线程不安全,效率高;

      StringBuffer:线程安全,效率低;

    2.集合:

      存值:

        List:有序的,可以重复;

            ArrayList(ArrayList不是线程安全的,Vector使用同步方法来实现线程安全):底层是数组:

              数组具有索引,查询比较快;

              数组在内存中是一块连续的内存,在插入和删除的时候都需要移动内存,插入删除比较慢;

            LinkedList:底层是链表:

              链表具有指针的效果,需要从头开始一个一个找引用指向,查询效率低;

              插入和删除只需要改变引用的指向即可,插入和删除快;

        Set:无序的,不可以重复;

        重复与否:是根据equals 和 hashCode来判断的,也就是说如果一个对象要存储在Set里,必须重写equals 和 hashCode方法;

      存key-value:

        Map:(HashMap(线程不安全,效率高,可以把null值作为key或value)和HashTable(线程安全,效率低))

          HashMap:用数组存数据,

               调用键的HashCode()获取键的哈希值,

               用哈希值,计算一个下标i,

               新建Entry对象来封装键和值,

               把Entry对象放在i的位置,

                 有位置,直接放入;

                 没有位置,使用equals()比较是否相等,

                  找到相等的,新值覆盖旧值;不相等,使用链表连接在一起,

                      (JDK1.8中,链表长度到8,转成红黑树,红黑树数量减少到6,转回链表)

               (当负载率(加载因子)到0.75,新建翻倍容量的新数组,所有数组重新哈希,放入新数组);

      问题:即想线程安全,又想效率高?怎么解决?

        JDK1.5后引入的ConcurrentHashMap,

        通过把整个Map分为N个Segment(类似HashTable),

        可以提供相同的线程安全,效率提升N倍,默认提升16倍;

    3.高并发下的多线程处理:

      3.1线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程的实际运作单位;

      3.2线程是进程的子集,一个进程中可以有多个线程,每个线程执行不同的任务,不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间;

      3.3Java中实现线程的方式:继承Thread类,实现Runable接口(重写Run方法);【java只支持单继承多实现】;

      3.4start():用来启动新创建的线程,而且start()内部调用了Run方法,(当你直接调用Run()的时候,只是会在原来的线程中调用,没有新的线程启动)

      3.5Runable和Callable的区别:

        Runable从JDK1.0就有了,Callable在JDK1.5增加的,

        主要区别是Callable的call方法可以返回值和抛出异常,而Runable的run方法没有这些功能;

      3.6线程安全:

        如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码,如果每次运行的结果和单线程运行的结果是一样的,就是线程安全的;

      3.7JDK1.5增加了线程并发库

        Java.util.concurrent包提供了线程的运行,线程池的创建,线程生命周期的控制;    

        Executors创建4种线程池:

          可以缓存的线程池:newCacheThreadPool;

          控制最大并发数的:newFixedThreadPool,超出的线程会在队列中等待;

          支持定时及周期性任务执行的:newScheduledThreadPool;

          单线程化的线程池:newSingleThreadExecutor;

    4.反射:

      获取私有方法:class.getDeclaredMethods

      使用反射的优缺点:

        优点:

          能够运行时动态获取类的实例,提高了系统的灵活性和扩展性;

          与Java动态编译相结合;

        缺点:

          使用反射性能较低;

          使用反射相对不安全;

          破坏了类的封装性,可以通过反射获取类的属性和私有方法;

    5.Spring与SpringMVC父子容器:

      

    6.优化数据库:

      优化sql语句(根据主键查询、使用单表查询、条件用in);

      创建索引(CREATE INDEX 索引名字 ON 表名称(列名称 [规定你需要索引的列]));

      添加缓存;

      数据库读写分离;

      定期将历史数据进行转储;

      分库分表;

    7.Nginx怎么实现的图片回显:

      使用的是反向代理机制;

      当用户发起一个请求,被nginx的监听器拦截,

      nginx通过配置文件,将用户的请求路径进行中转,转化为数据真实的磁盘路径,根据路径发起Http请求,

      从服务器中正确获取数据后,返回给nginx,

      nginx将返回的数据返回给用户;

      Nginx的功能:

        反向代理、负载均衡、Http服务器(动静分离)、正向代理;

    8.Mysql读写分离、主从复制:

      让主数据库响应事务性的操作,丛数据库响应非事务性的操作;

      然后采用主从复制把主数据库的事务性操作同步到从数据库;

      why什么实现读写分离:

        数据库的写入会影响查询的效率;

      主从复制过程:

        主库将更新的事件记录到二进制文件中,记录完成后,主库会告诉存储引擎提交事务,

        丛库将主库的二进制文件复制到本地的中继日志中,丛库会启动一个I/O线程跟主库建立一个连接,将二进制日志中的事件记录到中继日志中,

        丛库的SQL线程会从中继日志中读取事件并在备库执行;

    9.基础:  

      1.接口不可以被类继承,但是接口可以被接口继承;

      2.类实现接口,必须实现接口的方法;抽象类可以不用实现接口的方法;

      3.一个类只能继承一个父类,但可以实现多个接口;

      4.一个接口可以继承多个接口,却不能实现任何接口,接口是支持多继承的;

    10.Mysql:

      1.查询每门课都大于80的学生姓名:

      select distinct name from score where name not in(select distinct name from score where fenshu <=80)

      或者:select name from score group by name having min(fenshu) >80

      2.case when 语句:

      select id,name,kecheng,fenshu,case when fenshu >=90 then 'pass+pass' when (fenshu >=80 and fenshu <90) then 'pass' else 'fail' end as remark from score

    11.自动装箱:基本数据类型转换成对应的包装类型(valueOf方法)

      自动拆箱:包装类型转换成对应的基本数据类型(intValue方法)

    12.JDK1.8新特性:

      

      

      

        

  • 相关阅读:
    LeetCode 517 超级洗衣机(贪心)
    LeetCode 42 接雨水
    LeetCode 1289 下降路径最小和 II
    LeetCode 828 统计子串中的唯一字符
    LeetCode 363 矩形区域不超过 K 的最大数值和
    LeetCode 1278 分割回文串 III
    201771010128王玉兰《面象对象程序设计(Java)》第七周学习总结
    201771010128 王玉兰《面象对象程序设计(Java)》第六周学习总结
    201771010128 王玉兰《面象对象程序设计 (Java) 》第六周学习总结
    王玉兰201771010128《面象对象程序设计》第四周学习总结
  • 原文地址:https://www.cnblogs.com/yikuan-919/p/10036208.html
Copyright © 2020-2023  润新知