1、一个字符串的长度为n,其子串的数目是:n(n+1)/2+1。
向 n 个字符中间插入两片木板,这两片木板之间的即为原串的一个子串。
总共有 n + 1 个空位可以插,第一个木板插入后,第二个还有 n 个空位。
所以共有 n(n+1) 种插法,又由于两片木板交换顺序后,子串还是同一个子串,
所以子串数量应为 n(n+1)/2 。但最后,空串是任意字符串的子串,所以最后还要 +1。
2、多种排序执行方式,及其每种方法的空间时间复杂度,见自己的博文
3、hash冲突解决方法:
哈希函数:一般情况下,需要在关键字与它在表中的存储位置之间建立一个函数关系,以f(key)作为关键字为key的记录在表中的位置,通常称这个函数f(key)为哈希函数。
hash : 翻译为“散列”,就是把任意长度的输入,通过散列算法,变成固定长度的输出,该输出就是散列值。
这种转换是一种压缩映射,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。
3.1 开放地址法:
h0 = h(key);hi = (h(key) +di)Mod m. i = 1,2...s,1<=s<=m-1.m为表的长度,非元素个数
增量di有三种取法:
线性探测再散列 di = 1 , 2 , 3 , ... , m-1
平方探测再散列 di = 1^2 , -1^2 , 2^2 , -2^2 , 3^2 , -3^2 , ... , k^2 , -k^2
随机探测再散列 di 是一组伪随机数列
3.2 链地址法:
所有哈希地址相同的记录都链接在同一链表中。涉及计算ASL
3.3 再哈希,计算新的哈希函数,直至不冲突
4、linux进程:
在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。通过ps命令查看其带有defunct的标志。僵尸进程是一个早已死亡的进程,但在进程表 (processs table)中仍占了一个位置(slot)。
孤儿进程的父进程在它之前退出,会被init进程接管,不会造成资源浪费。
进程是资源管理的最小单位,而线程是程序执行的最小单位。linux下的线程本质上用进程实现
子进程如果对资源只是进行都操作,那么完全和父进程共享物理地址空间。
5、引起进程调度的原因:
正在执行的进程执行完毕。执行中进程自己调用阻塞原语将自己阻塞起来进入睡眠等状态。
执行中进程调用了P原语操作,从而因资源不足而被阻塞;或调用了v原语操作激活了等待资源的进程队列。
执行中进程提出I/O请求后被阻塞。在分时系统中时间片已经用完。
在执行完系统调用等系统程序后返回用户进程时,这时可看作系统进程执行完毕,从而可调度选择一新的用户进程执行。
以上都是在不可剥夺方式下的引起进程调度的原因。在CPU执行方式是可剥夺时.还有就绪队列中的某进程的优先级变得高于当前执行进程的优先级,从而也将引发进程调度。
6、SQl查询中,like语句中%表示一个或多个字符;_表示一个字符;*是一个实际字符
7、白盒测试:
语句覆盖:只需要让程序中的语句都执行一遍即可
分支/判定覆盖:使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假均曾被满足。
条件覆盖:要使得每个判断中的每个条件的可能取值至少满足一次。
路径覆盖:要求覆盖程序中所有可能的路径。
8、检查HDFS文件系统健康状况的命令是:fcks
9、设计一个离线大数据处理系统,需要追求的性能指标有:健壮性,高吞吐,处理的数据规模
10、欠拟合是模型不能很好的拟合数据。解决办法:添加其他特征项。添加多项式特征。减少正则化参数。
过拟合的泛化能力太差。解决办法:重新清洗数据。增大数据的训练量。采用正则化方法:L0范数是指向量中非0的元素的个数。L1范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”(Lasso regularization)。
L2范数是指向量各元素的平方和然后求平方根。可以使得W的每个元素都很小,都接近于0。采用dropout方法在训练的时候让神经元以一定的概率不工作。
package niukemosan;
import java.util.Scanner;
public class MosanMain {
/**
* 牛牛从生物科研工作者那里获得一段字符串数据s,牛牛需要帮助科研工作者从中找出最长的DNA序列。
* DNA序列指的是序列中只包括'A','T','C','G'。
* 例如: s = "ABCBOATER"中包含最长的DNA片段是"AT",所以最长的长度是2。
*
*/
/*public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
int max = 0;
int count = 0;
for(int i = 0;i0;){
if(s.substring(0, i/2).equals(s.substring(i/2, i))){
count = i;
break;
}else{
i = i-2; //保证每次减少两个,保证偶数串
}
}
System.out.println(count);
}
}*/
/**
* 牛牛的房间内铺有L块正方形瓷砖。每块砖的颜色有四种可能:红、绿、蓝、黄。
* 给定一个字符串S, 如果S的第i个字符是'R', 'G', 'B'或'Y',那么第i块瓷砖的颜色就分别是红、绿、蓝或者黄。
* 牛牛决定换掉一些瓷砖的颜色,使得相邻两块瓷砖的颜色均不相同。请帮牛牛计算他最少需要换掉的瓷砖数量。
*
*/
/*public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 0;
String s = sc.next();
char[] c = s.toCharArray();
for(int i = 0;i0;i--){
if(s.charAt(i) == s.charAt(i-1)){
count++;
}else{
if(count>1){
num += count/2;
count = 1;
}
}
}
if(count>1){
num += count/2;
}
System.out.println(num);
}
*/
}