答案补充中。。。

一、java基础

1、简述java的几种基本数据类型

JAVA的基本数据类型有:byte、char、boolean、short、int、long、float、double

2、什么是装箱和拆箱

3、如何将long转换为int

①强转:int i = (int)123L

②将long装箱为Long,调用  intValue()

③将long转为String,再利用Interger类转换   int i = Integer.parseInt(String.valueOf(123L));

如果待转换的long超出int范围,前两种转出负数,第三种会抛出NumberFormatException异常

4、常用集合考察

①ArrayList初始的大小,以及扩容机制

这里考察源码的阅读,通过阅读源码(JDK1.8)就能找到答案:

ArrayList如果不指定大小,默认构造函数是这么实现的:

public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

其中的elementData 就是实际存储数据的数组,如果是默认初始化,在添加第一个元素的时候会默认将大小初始化为 DEFAULT_CAPACITY,相关源码如下:

/**
* The array buffer into which the elements of the ArrayList are stored.
* The capacity of the ArrayList is the length of this array buffer. Any
* empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
* will be expanded to DEFAULT_CAPACITY when the first element is added.
*/
transient Object[] elementData; // non-private to simplify nested class access
/**
* Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;

至此,可以回答第一个问题,ArrayList默认初始大小就是10,

关于扩容,相关源码如下:

 /**
* Increases the capacity to ensure that it can hold at least the
* number of elements specified by the minimum capacity argument.
*
* @param minCapacity the desired minimum capacity
*/
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}

其中的

int newCapacity = oldCapacity + (oldCapacity >> 1);

表明,扩容时时按照原大小加上原大小的一半进行扩容,这里学到了一个逼格较高的操作,那就是右移一位,等价于除以2,但是效率要更高

②List里面重复数据如何去重

本质都是遍历然后借助相关容器进行去重,比如set,hashmap

③hashmap的实现

底层实现还是数组,通过hashcode确定存放位置,如果同一位置已有数据则采用拉链法解决。

具体就是数组的每个元素做成链表,通过链表进行扩展

5、多线程编程

多线程编程的实现方式,具体参考我整理的相关文章:[JAVA]JAVA实现多线程的三种方式

6、socket编程

7、线程池的使用

创建和关闭

二、javaEE基础

1、springMVC的作用

2、用过Spring的哪些组件

3、Spring Bean的生命周期

4、简述Ioc和AoP

三、SQL基础

关于SQL的基础,参考我转载的:常见的数据库SQL面试题以及答案

四、linux基础

1、如何查看java程序状态

2、linux下的常用命令

五、分布式

1、缓存技术

2、消息队列

3、负载均衡

redis、es、Nginx、solr、rocketMQ

六、项目工具

1、maven常用命令

2、IDEA

3、git常用命令

pull、push、commit、分支概念

4、缺陷管理

用过禅道,okit等

最新文章

  1. Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解
  2. Java日志&mdash;&mdash;2016年5月31日
  3. (转)linux文件读写的流程
  4. XCODE6 提交至 App Store
  5. sizeof(long)
  6. Working with Numbers in PL/SQL(在PL/SQL中使用数字)
  7. PK投票效果
  8. c数据结构学习随笔
  9. javascript第二章--变量、作用域和内存问题
  10. lambda表达式Expression&lt;Func&lt;Person, bool&gt;&gt; 、Func&lt;Person, bool&gt;区别
  11. Log4j详细教程
  12. Python解释器有哪些?Python解释器种类
  13. Delphi过程和函数中变量的作用域
  14. 团队作业8--测试与发布(Beta阶段)
  15. mysqldump脚本crontab执行失败,但是手动执行成功
  16. php解析出带层级关系的mpp文件
  17. [Fiddler] 开启Fiddler抓包的时候产品报“证书错误”
  18. 复制文件到IDE等工具出现乱码解决方案
  19. laravel 控制器中使用 try catch
  20. Hdu3549 Flow Problem 2017-02-11 16:24 58人阅读 评论(0) 收藏

热门文章

  1. hdu4044
  2. 说一下syslog日志吧~~~
  3. dubbo入门学习笔记之入门demo(基于普通maven项目)
  4. js 音乐播放器
  5. 微信小程序拒绝授权,反复调起原生授权框。
  6. c/c++ 栈与队列实现车库的出入与收费
  7. Python字符串练习
  8. Some notes in Stanford CS106A(4)
  9. react 组件导出
  10. Linux中使用sed命令替换字符串小结