RecursiveG 发表于 2015-10-23 12:43:47

[编程开发]开发能力自测

本帖最后由 RecursiveG 于 2015-10-25 23:56 编辑



编程开发板块 能力自测




说明

本能力自测题为活跃气氛、增加交流而设计。
欢迎各位触手用力拍砖并提供提供新的题目。
开放答题,欢迎讨论。禁止水回复,否则直接警告+删回复。
回贴按倒序排列

基础篇是任何想要进行Mod/插件开发的人员应知应会的内容
中级篇考察更高级/MC相关的内容
高级篇为专(chù)家(shǒu)准备
部分题目有mod方向和插件方向的区别,可以选择性做题

通常,基础篇接近满分,可以近似无阻碍学习Mod/插件开发。
中级篇接近满分,可以有效完成大部分Mod/插件开发任务。
高级篇……不来写份教程么骚年?




初级篇


1. 连线

项目分类
JAVA运行时环境
JVM编程语言
JRE开发文档
JDK运行时虚拟机
JAVAC开发环境
*.java目标文件
*.classIntegrated Development Environment
Eclipse编译器
IDEIDE
Gradle源文件
Javadoc构建工具

2.以下哪些代码能通过编译?假设用到的变量都被正确定义,需要的包也被导入1. int i=0;
2. for(;;);
3. List<String> myList = null;
4. Map<Integer, Integer> map = new Map<Integer, Integer>;
5. Map anotherMap = new Map();
6. if (currentIndex==index=getIndex()) doSomething();
7. while(true);
8. /*/* Important Comment */*/
9. public static main() {}
10. private foo(){foo();}
11. @NotNull MyClass instance = null;
12. throw RuntimeException();
13. List<Player> myList = new List<Player>();
3. 使用泛型构造一个适合并便于使用的类型用于存储以下JSON{
"list1": [
    {
      "subVal1": 11,
      "subVal2": 12
    }, {
      "subVal3": 13,
      "subVal4": 14,
      "subVal5": 15
    }
],
"list2": [
    {
      "subVal6": 16
    }
]
}
4. 将上一题中的JSON改写为YAML
5. 32位操作系统无法寻址4G以上的内存,请简述原因
6. Java中 foreach 循环的本质是什么?
7. 举出 Java 中的一处语法糖
8. 清楚理解 for, while, do while, for, break/continue 的作用和用法
9. 指出下列哪些函数定义是本质相同的:void foo(int a, int b);
void foo(int x, int y);
void bar(List<Integer> list);
void bar(List<Double> list);
void foo(Integer a, Integer b);
void foo(List<Integer> list);
void bar(List list);
10. 简述 extends 关键字和 implements 关键字的区别
11. 编译以下代码会生成几个.class文件?public class A {
    public interface IFoo { }
    public static class B implements IFoo { }
    public static void method1(IFoo foo) { }
    public static void method2() {
    method1(new IFoo() { });
    }
}
12. 用命令行环境编译并执行以下程序需要执行什么命令?public class A {
public static void main() {
    System.out.println("hello, world");
}
}





中级篇


1. 描述以下函数的作用并说明该函数是否高效。若不,试写出一个高效的函数完成同样工作。int func(int x) {
    if (x == 0 || x == 1) return 1;
    if (x < 0) throw new IllegalArgumentException();
    return func(x - 1) + func(x - 2);
}
2. 阅读以下程序段:public static MyClass {
    public String x;
    public MyClass(String x) {
      this.x = x;
    }
}

public static main(String args[]) {
    String str1 = "String #1";
    List<String> list1 = new ArrayList<String>();
    list1.add(str1);
    str1 = "Not String #1";
    System.out.println(list1.get(0));

    MyClass myClass = new MyClass("String #2");
    List<MyClass> list2 = new ArrayList<String>();
    list2.add(myClass);
    myClass.x = "Not String #2";
    System.out.println(list1.get(0).x);
}程序输出String #1
Not String #2结合你对`String`类的理解,解释出现以上现象的原因。
3. C++中,使用new构造的对象必须使用delete删除,为什么Java不需要?
4. 结合Java中泛型实现的机制,解释为何 `List<int> a;` 为何无法通过编译
5. 执行下列程序,写出执行结果,并解释原因:public class A {
public static class B {
    private int x;
    public B(int x) {
      this.x = x;
    }
}
public static void main(String[] args) {
    A a = new A(12);
    try {
      Field f = B.class.getDeclaredField("x");
      System.out.println(f.get(a));
    } catch(Exception ex) {

    }
}
}
6. 有一变量定义 “private static final int NUMBER = 42;” ,欲使用反射修改其值,会有什么问题?
7. 简述MC不能有效利用多核处理器的原因
8. 解释mcp和forge项目之间的关系(MOD方向)
9. 解释forge, cauldron, bukkit之间的关系
10. 编写Mod时,我们会用到Proxy,简述Proxy的作用和使用Proxy的必要性。(mod方向)
11. 解释:什么是NMS类,分析使用NMS类的带来的好处和问题(插件方向)
12. Minecraft是一个商业程式,随意散布会面临法律问题。Forge与Bukkit项目组是如何应对这一问题的?





高级篇


1. 观察<version>.json,纯净的游戏的主类是Minecraft,而安装了Forge的游戏主类是LaunchWrapper。简述LaunchWrapper的作用(mod方向)
2. 解释obfName, srgName, mcpName的区别,并简述mod从编译到运行中经历的两次混淆/反混淆的时机和作用。(mod方向)
3. 简述ASM 和Java Bytecode 的关系。(mod方向)
4. 对比 ASMTransformer 和反射,分析其各自的优势和劣势。(mod方向)




拿 BBCode 排版简直就是灾难 2015-10-23 更新

咸鱼配千秋 发表于 2020-9-10 18:00:20

666666666666666

小李子15 发表于 2020-8-24 17:47:01

我该怎么做答,是回复吗[:Strong_smile:]

2574677123 发表于 2020-8-24 11:05:22

666666666666666666666666666666666

guqin 发表于 2020-8-13 23:44:05

好强啊!!

vvvbbbcz 发表于 2020-8-12 14:45:12

我以为我可以写教程了,然而高级篇完全看不懂[:lost_soul:]

jiahao661683 发表于 2020-8-11 20:24:53

看的一脸懵逼的我

BreezyMain 发表于 2020-8-8 17:26:54

MC不能有效运用多核的原因是啥。。

whattress 发表于 2020-8-4 09:01:29

自然_Hungteen 发表于 2020-6-28 16:57
想知道中级篇第一题高效的函数咋写

这个题是算斐波那契数列中第n个数的数值。(斐波那契数列:1、1、2、3、5、8、13...公式为F(n)=F(n-1)+F(n-2))。原题目使用递归解决,这导致整个函数复杂度呈指数级别增长,复杂度为O(2^n)。用顺序循环结构写出代码可以使时间复杂度降低为O(n)也就是线性增长。完整可运行代码如下:
import java.util.Scanner;
public class Fibonacci {
        public static void main(String[] args) {
                Scanner scan = new Scanner(System.in);
                System.out.println("输入n:");
                int n = Integer.parseInt(scan.nextLine().trim());
                long a =1,b = 1,c = 0;
                System.out.print("前"+n+"项为:\n"+a+"\t"+b+"\t");
                //直接从第三项开始
                for(int i=3;i<=n;i++){
                        c = a + b;
                        a = b;
                        b = c;
                        System.out.print(c+"\t");
                        //每十个斐波那契数为一行输出
                        if(i%10==0){
                                System.out.println();
                        }
                }
        }
}
实际上斐波那契数列的计算还有更优的方式,比如使用通项公式,矩阵优化等等,可以将时间复杂度降到对数级别O(logn)。这里就不多做阐释。

bilegole 发表于 2020-8-2 08:49:31

开发能力为0 我枯了

referee0707 发表于 2020-8-1 01:47:49

美好的一天从脱发开始

小满1221 发表于 2020-7-31 23:25:27

看不懂的我。。。。

referee0707 发表于 2020-7-31 11:38:12

膜拜大佬!

canying12345 发表于 2020-7-30 17:39:03

想学习一下

52gta 发表于 2020-7-28 15:48:04


美好的一天从脱发开始
{:701:}

tsunade 发表于 2020-7-25 21:22:03

我也是学编程的
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: [编程开发]开发能力自测