牛客三模-大数据方向:选择题和编程题

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);	
	}
	*/
}


你可能感兴趣的:(Java,编程语言)