蚂蚁金服面试记录
1.自我介绍
2.java中,数组和链表的区别
首先:数组在内存空间上是连续的,而链表在内存空间上是可以不连续的。其中链表的每个元素存储了下一个元素的地址,使得一系列的随机的内存地址串在一起。所以只要用足够的内存空间,就能为链表分配内存。数组优于链表:内存空间占用少,数据可随机访问性,查找速度相对较快。链表优于数组:插入和删除的操作优于数组,对内存空间的利用率较高,并且链表的可扩展性高于数组。数组的优缺点:优点:使用方便,查询效率比链表高,内存是连续的空间缺点:大小固定,不适合动态存储,不方便动态添加;链表:优点可以动态删除,大小可变缺点:只能通过顺时针指针去访问,查询效率低
链表和数组的本质差异 1 在访问方式上,数组可以随机访问其中的元素.链表则必须是顺序访问,不能随机访问 2 空间的使用上 链表可以随意扩大数组则不能
3.进程和线程的区别
进程是并发执行的程序在执行过程中分配和管理资源的基本单位。线程是进程的一个执行单元,是比进程还要小的独立运行的基本单位。一个程序至少有一个进程,一个进程至少有一个线程。进程和线程的区别主要有以下方面:根本区别:进程是资源分配最小单位,线程是程序执行的最小单位。 计算机在执行程序时,会为程序创建相应的进程,进行资源分配时,是以进程为单位进行相应的分配。每个进程都有相应的线程,在执行程序时,实际上是执行相应的一系列线程。地址空间:进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段;线程没有独立的地址空间,同一进程的线程共享本进程的地址空间。资源拥有:进程之间的资源是独立的;同一进程内的线程共享本进程的资源。执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。线程是处理机调度的基本单位,但是进程不是。由于程序执行的过程其实是执行具体的线程,那么处理机处理的也是程序相应的线程,所以处理机调度的基本单位是线程。系统开销:进程执行开销大,线程执行开销小
4.索引的种类,使用数据库的数据的量级,数据量大概有多大.
1、普通索引最基本的索引,它没有任何限制,用于加速查询。创建方法:a. 建表的时候一起创建CREATE TABLE mytable ( name VARCHAR(32) , INDEX index_mytable_name (name) );b. 建表后,直接创建索引CREATE INDEX index_mytable_name ON mytable(name);注:如果是字符串字段,还可以指定索引的长度,在列命令后面加上索引长度就可以了(例如:name(11))2、唯一索引索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。创建方法:a. 建表的时候一起创建CREATE TABLE mytable ( name
VARCHAR(32) , UNIQUE index_unique_mytable_name (name
) );b. 建表后,直接创建索引CREATE UNIQUE INDEX index_mytable_name ON mytable(name);c. 修改表结构ALTER TABLE mytable ADD UNIQUE INDEX index_mytable_name (name);注:如果是字符串字段,还可以指定索引的长度,在列命令后面加上索引长度就可以了(例如:name(11))3、主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。创建方法:a. 建表的时候一起创建CREATE TABLE mytable ( id
int(11) NOT NULL AUTO_INCREMENT , name
VARCHAR(32) , PRIMARY KEY (id
) );b. 修改表结构ALTER TABLE test.t1 ADD CONSTRAINT t1_pk PRIMARY KEY (id);注:如果是字符串字段,还可以指定索引的长度,在列命令后面加上索引长度就可以了(例如:name(11))4、组合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合。创建方法:a. 建表的时候一起创建CREATE TABLE mytable ( id
int(11) , name
VARCHAR(32) , INDEX index_mytable_id_name (id
,name
) );b. 建表后,直接创建索引CREATE INDEX index_mytable_id_name ON mytable(id,name);c. 修改表结构ALTER TABLE mytable ADD INDEX index_mytable_id_name (id,name);5、全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用,而不是一般的where语句加like。它可以在create table,alter table ,create index使用,不过目前只有char、varchar,text 列上可以创建全文索引。创建方法:a. 建表的时候一起创建CREATE TABLE article
( id
int(11) NOT NULL AUTO_INCREMENT , title
char(250) NOT NULL , contents
text NULL , create_at
int(10) NULL DEFAULT NULL , PRIMARY KEY (id
), FULLTEXT (contents) );b. 建表后,直接创建索引CREATE FULLTEXT INDEX index_article_contents ON article(contents);c. 修改表结构ALTER TABLE article ADD FULLTEXT INDEX index_article_contents (contents);总结虽然索引可以增加查询数据,但对于更新、创建或者删除的时候,需要去维护索引,导致性能会受影响,因此,索引也不能建立太多。
5.树和图的区别
图表1、图表中每个节点可以有任意数量的边,边可以是单向和双向的。2、图表中没有名为root的根节点的概念。3、图表可以有循环和自循环4、图表中,没有预定义数量的边,它取决于图表。5、图是网络模型结构。树1、常规树由具有任意数量子节点的节点组成;但是在二叉树的情况下,每个节点最多可以有两个子节点。在任意两个节点之间仅存在一条边。2、树中有一个名为root的唯一节点。3、树不能有循环和自循环4、树可以有n-1条边。5、树是分层结构。
6.HashMap与map的区别
map是接口,不能用new出对象hashmap是继承map接口的实现类,可以new出对象