zoukankan      html  css  js  c++  java
  • 面试记-(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:表示数据库的最大连接数。这个连接数不是越大越好,因为连接会浪费内存的资源。
  • 相关阅读:
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 390 消除游戏
    Java实现 LeetCode 390 消除游戏
  • 原文地址:https://www.cnblogs.com/chenyao/p/3166894.html
Copyright © 2011-2022 走看看