共分为三部分:
客观题:50 min,30道选择
主观题:70 min,方向四选一,3道代码题
性格测试:30 min,100道(5分钟就做完了。。)
代码题1(填空处填写):
剑指 第5题 — 替换空格
public class ZYWK_1 {
public static void main(String[] args) {
String s = "I love China";
String str = replaceSpace(s);
System.out.println(str);
}
public static String replaceSpace(String s) {
StringBuilder str = new StringBuilder();
for (char c : s.toCharArray()) {
if (c == ' ')
str.append("%20");
else
str.append(c);
}
return str.toString();
}
}
代码题2(填空处填写):
动态代理模式,注解
//接口
interface Human{
String getBelief();
void eat(String food);
}
//被代理类
class SuperMan implements Human{
@Override
public String getBelief() {
return "I believe I can fly!";
}
@Override
public void eat(String food) {
System.out.println("我喜欢吃" + food);
}
}
//动态代理
class ProxyFactory{
//输入: obj 被代理类对象
//输出: 代理类对象
public static Object getProxyInstance(Object obj){
MyInvocationHandler handler = new MyInvocationHandler();
handler.bind(obj);
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),handler);
}
}
class MyInvocationHandler implements InvocationHandler{
private Object obj;
public void bind(Object obj){ //使用被代理类对象进行赋值
this.obj = obj;
}
//通过代理类对象调用方法a时,自动调用invoke()
//被代理类要执行的方法a的功能声明在invoke()中
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object returnValue = method.invoke(obj, args);
return returnValue;
}
}
public class ProxyTest {
public static void main(String[] args) {
SuperMan superMan = new SuperMan(); //被代理类对象
Human proxyInstance = (Human) ProxyFactory.getProxyInstance(superMan); //代理类对象
//当通过代理类对象调用方法时,会自动的调用被代理类中同名的方法
proxyInstance.eat("四川麻辣烫");
NikeClothFactory nikeClothFactory = new NikeClothFactory(); //被代理类对象
ClothFactory proxyClothFactory = (ClothFactory) ProxyFactory.getProxyInstance(nikeClothFactory); //代理类对象
proxyClothFactory.produceCloth();
}
}
代码题3:
模拟洗牌
题目:一副扑克牌,从上到下数值分别为 1,2,...,n。将扑克牌分为两半,上半部分放在左手上,下半部分放在右手上,如果扑克牌有奇数个,则左手边多放一张。洗牌时,如果是第奇数次洗牌,则先把右手边的扑克牌的最下面一张放在下面,然后把左手边扑克牌的最下面一张放在其上,接着把右手边扑克牌的倒数第二张放在其上,...。如果是第偶数次洗牌,则先把左手边扑克牌的最下面一张放在下面,然后把右手边扑克牌的最下面一张放在其上,接下来的步骤同上。
输入:7 2 1 2 3 4 5 6 7
第一个数为扑克牌的张数,第二个数为洗牌次数,其后为扑克牌的数值。
输出:1 6 2 4 5 7 3
洗牌后的结果。
import java.util.Scanner;
import java.util.Stack;
public class ZYWK_3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
String[] strs = str.split(" ");
int[] nums = new int[strs.length];
for (int i = 0; i < nums.length; i++)
nums[i] = Integer.parseInt(strs[i]);
int n = nums[0];
int k = nums[1];
int[] pocker = new int[n];
for (int i = 0; i < n; i++)
pocker[i] = nums[i+2];
Stack stack1 = new Stack<>();
Stack stack2 = new Stack<>();
for (int i = 1; i <= k; i++) {
for (int j = 0; j < n; j++) {
if (j <= (n-1)/2)
stack1.add(pocker[j]);
else
stack2.add(pocker[j]);
}
int tmp = n;
while (!stack1.isEmpty() || !stack2.isEmpty()) {
if ((i & 1) != 0) {
if (!stack2.isEmpty())
pocker[--tmp] = stack2.pop();
if (!stack1.isEmpty())
pocker[--tmp] = stack1.pop();
}
else {
if (!stack1.isEmpty())
pocker[--tmp] = stack1.pop();
if (!stack2.isEmpty())
pocker[--tmp] = stack2.pop();
}
}
}
for (int num : pocker)
System.out.print(num + " ");
}
}