笔试翻车实况 - KelovpString

/ 1评 / 0

    最近投了一些公司。然后凉了不少(每次拿C++/C我就不想说话,现在我只想安静的投Java再也不跳随便投岗了)。选择题大家都很友善,问问二叉树遍历顺序什么的,还有求求散列值之类,题目难度不大还算好应付,但是后面编程和简答题目几乎成了灾区QAQ(strcpy和sprintf的区别我:。。。。strcpy能复制字符串。。这个sprintf我。。。)当然也有勉强AC出的一些程序(大部分都是0.4、0.3之类。。捞破天际,算法值得去深究//练习的不多,那就尝试多几次。)但中间很多东西我的确忘记(操作系统如何分配内存)或者没有听说(简述PCB的作用/后来一查才发现是进程控制模块!)的,这应该是个长久更新或者会有续篇的博文吧(顺便恭喜RNG3-0小组第一)

1、字符转大写下划线

    给出一个字符(题目说好像要在宏定义的时候我们通常使用_ASDA_11_SA_这样的格式),在输出的时候前后都有_且中间的.替换为_而遇到数字在之前加上下划线。小米的第一道题目。看到第一反应Replace,之后数字处理不了,AC只有0.3。当时因为做完简答没什么时间,本人比较捞的情况下也没想到什么好的解决办法,只好GG。而我现在的解决办法也十分普通:

package Test;
public class Main {
	public static void to_Big(String str){
		char a[] = str.toCharArray();
		boolean flag = true;
		System.out.print("_");
		for(int i =0;i<a.length;i++){
			if(a[i]>='a'){
				System.out.print((char)(a[i]-32));
				flag = true;
			}
			else if(a[i]=='.'){
				System.out.print("_");
				flag = true;
			}else if(a[i]<='9'){
				if(flag == true){
					System.out.print("_");
					flag = false;
				}
				System.out.print(a[i]);
			}else{
				System.out.print(a[i]);
				flag = true;
			}
		}
		System.out.println("_");
//		str = str.replace(".", "_");
//		System.out.println("_"+str.toUpperCase()+"_");
	}
	public static void main(String[] args) {
		String str0 = "atrDF.as11234d";//_ATRDF_AS_11234D_
		String str1 = "aas11aa11d";//_AAS_11AA_11D_
		String str2 = "sd.s11.11";//_SD_S_11__11_
		to_Big(str0);
		to_Big(str1);
		to_Big(str2);
	}
}

2、字母密码游戏

    小米我觉得最简单的一道。还是没有完全正确,所以我还是决定拿出来再写下。题目是说a=1,b=2...z=26;然后你输入一串数字比如:123 则能输出a b c l x 也就是一个数字串最终得出可能的所有结果。当时这个也是AC不到一半就凉了。我还是按照原来的老套路继续去做

package Test;

	public class Main {
	public static void main(String[] args) {
		String str0 = "123";
		String str1 = "12211";
		char tki[] = { ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
				'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 'u', 'v', 'w',
				'x', 'y', 'z' };
		char log[] = str1.toCharArray();
		for(int i =0;i<log.length;i++){
			System.out.print(" "+tki[Integer.parseInt(""+log[i])] );
			System.out.print(" "+tki[Integer.parseInt(""+log[i]+log[i+1])] );
		}
	}
}

而上面这个由于格式问题一直很难满AC。因为数组越界的缘故还有异常抛出,所以绝不是首选。凉的心服口服

3、数字转中文

    一开始我是有想法的。可是直到做到编程五分钟DBUG两小时之后也结束了我的笔试。这个题一开始特别想用字符串处理。但是一想到位数没法控制(一个.length解决的事情也是很无语)只好放弃。但是在后来经过一番思考之后还是字符串来的简单

package Test;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		char tki[] = {' ','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
		char tks[] = {' ','兆','亿','万','仟','佰','拾','元','角','分'};
		Scanner tp = new Scanner(System.in);
		double sks = tp.nextDouble(),kar;
		int i = (int) Math.pow(10, Double.toString(sks).length()/2+1);
		while(i!=0){
			kar = sks;
			sks = sks % i;
			i = i/10;
			double cs = kar - sks;
			if(cs!=0){
				if(cs >=100000000)
					System.out.print(tki[(int) (cs/100000000)]+""+tks[1]);
				else if(cs >=10000000)
					System.out.print(tki[(int) (cs/10000000)]+""+tks[4]);
				else if(cs >=1000000)
					System.out.print(tki[(int) (cs/1000000)]+""+tks[5]);
				else if(cs >=100000)
					System.out.print(tki[(int) (cs/100000)]+""+tks[6]);
				else if(cs >=10000)
					System.out.print(tki[(int) (cs/10000)]+""+tks[3]);
				else if(cs >=1000)
					System.out.print(tki[(int) (cs/1000)]+""+tks[4]);
				else if(cs >= 100)
					System.out.print(tki[(int) (cs/100)]+""+tks[5]);
				else if(cs >=10)
					System.out.print(tki[(int) (cs/10)]+""+tks[6]);
				else if(cs >=0)
					System.out.print(tki[(int) (cs)]+""+tks[7]);
			}
		}
	}
}

最终还是头很铁的用了字符串:

package Test;

import java.util.Scanner;

public class Main {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		char tki[] = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
		char tks[] = {' ','分','角','元','拾','佰','仟','万','亿','兆'};
		Scanner tp = new Scanner(System.in);
		String sks = tp.next();
		String log[] = sks.split("[.]");
		char tk_before[] = log[0].toCharArray();
		char tk_behind[] = log[1].toCharArray();
		int length = tk_before.length;
		for(int i =0;i<tk_before.length;i++){
			System.out.print(tki[Integer.parseInt(""+tk_before[i])]);
			if(length==9){
				System.out.print(tks[8]);
				length --;
			}else if(length==8){
				System.out.print(tks[6]);
				length--;
			}else if(length==7){
				System.out.print(tks[5]);
				length--;
			}else if(length==6){
				System.out.print(tks[4]);
				length--;
			}else if(length==5){
				System.out.print(tks[7]);
				length--;
			}else if(length==4){
				System.out.print(tks[6]);
				length--;
			}
			else if(length==3){
				System.out.print(tks[5]);
				length--;
			}
			else if(length==2){
				System.out.print(tks[4]);
				length--;
			}else if(length==1){
				System.out.print(tks[3]);
				length--;
			}
		}
		String tklind;
		if(tk_behind[2]>5)
			tklind = ""+tk_behind[0]+(char)((int)(tk_behind[1]+1));
		else
			tklind = ""+tk_behind[0]+tk_behind[1];
		char tk_behinds[] = tklind.toCharArray();
		length = tk_behinds.length;
		for(int i=0;i<tk_behinds.length;i++){
			System.out.print(tki[Integer.parseInt(""+tk_behinds[i])]);
			if(length==2){
				System.out.print(tks[2]);
				length--;
			}else if(length==1){
				System.out.print(tks[1]);
				length--;
			}
		}
	}
}

而问答也是惊喜满满:

    TCP UDP 区别:(我含含糊糊的回答了三次握手和UDP丢包什么的,但讲真我说不全XD)

        1.基于连接与无连接;
        2.对系统资源的要求(TCP较多,UDP少);
        3.UDP程序结构较简单;
        4.流模式与数据报模式 ;

        5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

    操作系统如何分配内存,对内存进行管理(作为补考通过的操作系统,我勉强想起有那么几个算法//具体名字也不知道XD)

        浅谈操作系统对内存的管理
暂时到这,我会持续更新,我坚信我会更多次翻车的(233)



  1. wooyaa说道:

    python、安全两个岗位,考虑不,考虑回邮件

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注