2018秋招京东一面(Java开发)

     面试完拖了好久了,今天咬咬牙,把面经写一下,也算是一场面试的收获之一吧。投了京东的简历,接到了笔试通知,感觉笔试做的很不好,应该是挂了,但是很幸运的居然过了,然后发了约面的邮件,本来是要去北京现场面的,但是因为我人不在北京,所以就申请了电话面试,然后就改成了电话面试。

      到了面试的时间点,这里要再说一句,面试官小哥哥真的很准时,约的上午十点面试,九点五十八面试官小哥哥的电话就来了,然后首先让我加了微信,说是微信面,就加了微信,这里说一下,那天微信不知我两谁的网不太好,通话质量不是很好。好了,废话说了一堆,总算要进入正题了。

      首先面试官小哥哥让我说一下个人的规划,可以是长期的也可以是短期的。

      我就针对这个问题,做了一下自我的技能啊,学习经历啊,个人特长啊之类的介绍,要说规划,说实话,从未走出校园的我真的不知道自己的职业生涯该怎么去规划,自己真正的规划,简而言之就是:做好现在能做的,未来再看未来的。

      接着就问了我的项目,让我介绍一下自己的项目。

      因为我的项目都是练习时做的,所以我就介绍了项目的基本模块和各模块的基本功能,项目就说了这些然后面试官说可以了,就算是过了这块儿。

      接下来全是一些基础知识问题:

1.说一下Java中的集合类

    Java中的集合类有三种:set(集合),list(数组),map(映射)。集合接口有collection和map接口,set和list实现了collection接口。

set中的元素数据类型可以是基本数据类型也可以是对象(引用类型),是不可重复的,无序的。集合中的元素无特定的排序方式,只是简单地把元素放在一起。

list中的元素数据类型只可以是基本数据类型,是有序的,可以重复。list关注的是索引,有一系列的针对于索引的方法,查询速度较快,因为list中插入和删除都会引起后边所有索引的改变,所以插入和删除相对比较慢。

map中是以键值对(key-value)的形式存储的,key是不可以重复的,value可以重复,一个key对应一个value,可以根据key找到value。对map进行遍历,先得到key的set,然后对key的set进行遍历找到对应的value。

2..多线程锁

Java中多线程锁的主要是为了解决资源竞争的问题。Java中的锁分为悲观锁和乐观锁。乐观锁是假设各线程在处理事务的时候不会互相影响,在不加锁的情况下只影响自己负责的部分资源,只有在提交数据的时候才会检查资源是否被其他线程改变,如果发生改变,才会将正在提交的事务回滚。悲观锁的思想是认为每次的资源访问都会引起资源的改变,引发线程冲突,所以始终对资源加锁,只有获得锁的线程才可以对资源进行访问。

3.Java的基本数据类型和引用类型

Java中的基本数据类型有八种:byte,int,long,short,float,double,char,boolean,

byte:在内存中占8位,即一个字节,取值范围为-128~127,默认值为0。

short:短整型,在内存中占16位,两个字节,取值范围为-32768~32767,默认值为0。

int:整型,在内存中占32位,四个字节,取值范围为-2^31~2^31-1,默认值为0。

float:浮点数,在内存中占32位,四个字节,用于存储带小数点的数,小数点后边只有6~7位有效数字,默认值为0。

long:长整型,在内存中占64位,八个字节,取值范围为-2^63~2^63-1,默认值为0L。

double:双精度浮点数,用于存储带小数点的数,在内存中占64位,八个字节,默认值为0。

char:字符型,用于存储单个字符,在内存中占16位,即两个字节,取值范围为0~65535,默认值为null。

boolean:布尔类型,占一个字节,用于判断真假(true,false),默认值为false。

引用类型指的是Java中的类,接口类型,数组类型,枚举类型,注解类型等。

基本数据类型和引用类型的区别:

基本数据类型在被创建的时候,在栈上划分一块内存,将数值直接存储在栈上。

引用类型在被创建的时候,首先在栈上给其引用(句柄)分配一块内存,而对象的具体信息存储在堆内存上,然后由栈上的引用指向堆中对象的地址。

4.数据库的优化

数据库优化的常用方法有:SQL语句的优化,索引优化,添加缓存,读写分离,分区,垂直切分建立分布式数据库,水平切分。

5.数据库的索引

数据库索引主要是为了加快查找速度,索引就是对数据库某个字段进行排序的一种方式,对数据库中的某个字段建立索引就会产生另外一种数据结构,其中保留着某个字段的值,每个值又指向与它相关的记录。这种值是经过排序的,所以在查找的时候相对更加快速。

同时,数据库建立索引又会带来一些不好的地方:

第一,索引的创建和维护也需要耗费时间,这种时间的消耗会随着数据量的增加而增加。

第二,索引也会占用物理空间,除了数据表占用的空间外,每个索引也需要占用一定的空间。

第三,当表中的数据增加,删除或修改时,索引也需要动态的维护,这样就降低了数据的维护速度

你可能感兴趣的:(2018秋招京东一面(Java开发))