本文共 2667 字,大约阅读时间需要 8 分钟。
总体来说我这次和网上大家的问题不太一样,侧重数据库操作系统网络的考察,算法题只考了一道,还问了我一点ML的东西。
面试官当时就说我基础不太好。总共面了45分钟。已凉。
1. 实习经历 介绍
2. 机器学习:
3. 操作系统
上下文切换的开销
当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行。这种切换称为“上下文切换”(“context switch”)。CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另外一个线程。
中断上下文:在中断中执行时依赖的环境,就是中断上下文(不包括系统调用,是硬件中断)
进程上下文:当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文
用语言编写的指令将正在运行的程序中断是软中断,而断电或是重启等属于硬中断。一般是硬件请求引起的,用来通知操作系统系统外设状态变化。
软中断发生的时间是由程序控制的,而硬中断发生的时间是随机的;
软中断是由程序调用发生的,而硬中断是由外设引发的;
硬件中断处理程序要确保它能快速地完成它的任务,这样程序执行时才不会等侍较长时间。硬中断可以直接中断CPU。它会引起内核中相关的代码被触发。软中断并不会直接中断CPU。也只有当前正在运行的代码(或进程)才会产生软中断。
4. 网络
5. 数据库
纵表,其特点是行数多,字段少。纵表在使用时由于行数多,统计用户数或对用户进行分档时还需要进行GROUP BY 操作,性能低,且操作不便,为提高性能,通常根据需要将纵表进行汇总,形成横表,
横表
优点:一行表示了一个实体记录,清晰可见,一目了然。
缺点:如果现在要把这个表加一个字段,那么就必须重建表结构。
纵表
优点:如果现在要把这个表加一个字段,只需要添加一些记录。
缺点:数据描述不是很清晰,而且会造成数据库数据很多。另如果需要分组统计,要先groupby,较繁琐。
结论:应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。MyISAM的索引方式也叫做“非聚集”的。
InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。
第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。
这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。
第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址。换句话说,InnoDB的所有辅助索引都引用主键作为data域。
联合索引(复合索引)
首先介绍一下联合索引。联合索引其实很简单,相对于一般索引只有一个字段,联合索引可以为多个字段创建一个索引。它的原理也很简单,比如,我们在(a,b,c)字段上创建一个联合索引,则索引记录会首先按照A字段排序,然后再按照B字段排序然后再是C字段,因此,联合索引的特点就是:
第一个字段一定是有序的 当第一个字段值相等的时候,第二个字段又是有序的,比如下表中当A=2时所有B的值是有序排列的,依次类推,当同一个B值得所有C字段是有序排列的| A | B | C |
| 1 | 2 | 3 | | 1 | 4 | 2 | | 1 | 1 | 4 | | 2 | 3 | 5 | | 2 | 4 | 4 | | 2 | 4 | 6 | | 2 | 5 | 5 | 其实联合索引的查找就跟查字典是一样的,先根据第一个字母查,然后再根据第二个字母查,或者只根据第一个字母查,但是不能跳过第一个字母从第二个字母开始查。这就是所谓的最左前缀原理。A left join(左连接)包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。 right join(右连接),即包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。
而full join(全连接),左右表中所有记录都会选出来。全连接 full join 或者 full outer join,为二个表中的数据都出来,内连接 inner join 或者 join;它为返回字段ID同时存在于表中的记录,交叉连接(完全连接)cross join 不带 where 条件的7. 算法
一个无序数组,数值不连续。用最小的时间复杂度找到最左边的“坑”。
我上来就想到用快排排序然后遍历,就是O(nlgN)。但是应该还有线性的,就想到用桶排序 ,就是一个hashmap,然后对桶从左往右遍历。
public class Main { public int findNum(int[] nums){ int n = nums.length; int min = nums[0], max = nums[0]; for(int i=0;i
转载地址:http://difni.baihongyu.com/