• 面试记-(1)


    1. Object对象有哪些方法:

      toString: 返回ClassName+@+hashcode;

      hashcode: 返回内存地址的整数形式.

      equals: 对比2个引用是否相等.

      clone();

      wait();

      notify();

      notifyAll();

      finalize();

    2. java 堆的了解:

      java内存是分为java堆和java栈.

      Java 堆是虚拟机管理的内存中最大的一块. 此内存的唯一目的就是存放对象实例. 从内存回收的角度, 由于现在采用的收集器是分代收集算法, java堆可以分成 新生代和老年代. 新生代可以分成Eden, from survivor, to survivor空间等.  如果从内存分配的角度看, 线程共享的java堆中可能划分出多个线程私有的分配缓冲区空间(TLAB). 进一步的划分为了更好的回收内存, 更快的分配内存.

      java堆可以处于物理上不连续的内存空间中, 只要逻辑上是连续的即可. 如果在堆中没有内存完成实例分配, 并且堆也没有办法再扩展, 就会抛出outOfMemoryError的异常.

    ThreadLocal的了解:

      不是一个线程的本地实现版本, 它不是一个线程, 而是线程局部变量, 为每一个使用该变量的线程提供一个变量值的副本, 是java中一种较为特殊的线程绑定机制, 是每一个线程可以独立改变自己的副本, 而不会和其他线程的副本冲突.

      同步机制采用"以时间换空间"的方式, 而threadLocal采用了以空间换时间的方式.前程提供一份变量, 让不同的线程排队访问, 而后者为每一个线程提供一份变量, 因此可以同时访问互不影响.

      主要API:

      T get(): 返回此线程局部变量的当前线程副本中的值, 如果是线程第一次调用该方法, 则创建并初始化此副本.

      void set(T value): 将此线程局部变量的当前线程副本中的值设置为指定值.

      void remove(): 移除此线程局部变量的值。这可能有助于减少线程局部变量的存储需求。如果再次访问此线程局部变量,那么在默认情况下它将拥有其 initialValue。

      ThreadLocal.set(T value) 方法中, 得到当前线程thread t, 然后可以属于该线程的threadLocalMap, 然后使用ThreadLocal的hashcode作为索引值, 把value放入threadLocalMap的table[] 数组中.

    (个人理解,望指正:为什么需要threadLocal实例?   比如2个工程, 如果没有threadLocal的实例, 因为Thread.currentThread是jvm系统方法,得到的是当前线程的引用, 用当前线程的hashcode去作为键值, 可能就一个工程覆盖另一个工程, 如果2个工程各有各的threadLocal, 用这个threadLocal的hash作为map里table的索引,那就能区分出各个工程所要保存的值.)

    mysql优化:

    方法主要有优化查询, 优化数据库结构, 优化mysql服务器.

      优化查询可以通过建立索引来加速. 如果使用了索引,查询语句只会查询索引字段。这样就减少查询的记录数,达到提高查询效率的目的。

    索引举例: CREATE INDEX index_name ON student(name);

      优化数据库结构有几种方法. 1将字段很多的表分成多个表. 2增加中间表 3增加冗余字段 4优化插入记录的速度, 可以一次插入多条记录, 而不是多次插入insert语句. 在增加前不实用索引, 插入后再使用索引.

      优化mysql服务器: MySQL参数的优化:内存中会为MySQL保留部分的缓冲区。这些缓冲区可以提高MySQL的速度。缓冲区的大小都是在MySQL的配置文件中进行设置的。

    • key_buffer_size:表示索引缓存的大小。这个值越大,使用索引进行查询的速度就越快
    • table_cache:表示同时打开的表的个数。这个值越大,能同时打开的表的个数就越多。这个值不是越大越好,因为同时打开的表过多会影响操作系统的性能。
    • query_cache_size:表示查询缓冲区的大小。使用查询缓存区可以提高查询的速度。这个方式只使用与修改操作少且经常执行相同的查询操作的情况;默认值是0.
    • Query_cache_type:表示查询缓存区的开启状态。0表示关闭,1表示开启。
    • Max_connections:表示数据库的最大连接数。这个连接数不是越大越好,因为连接会浪费内存的资源。
  • 相关阅读:
    postman一健导入swagger api所有接口
    pycharm 通过project interpreter国内镜像源设置
    Linux常用软件tree,autojump,lrzsz安装
    文献下载好用网站推荐
    SCIP,Clp,Gurobi和Cplex安装
    Linux下SuperLU安装
    【微服务理论】康威定律
    项目实战:动态系统的设计(类似朋友圈)
    认知提升:工作和薪资
    博客园美化 Cnblogs-Theme-SimpleMemory
  • 原文地址:https://www.cnblogs.com/chenyao/p/3166894.html
Copyright © 2020-2023  润新知