本帖最后由 RecursiveG 于 2015-10-25 23:56 编辑
|
|
|
|
|
拿 BBCode 排版简直就是灾难 2015-10-23 更新 |
真心跪了,本来还打算业余学学来的......还是做盆友简单些
初级和中级基本都可以,高级够呛。。看来还需要多学习
我是iOS的。。。有些C语言的东西还是能看懂的。。。
本帖最后由 henry5041 于 2015-10-25 12:11 编辑
我泛型和反射没学好,初级和中级也只能勉强通过,果然还要多多学习……
我泛型和反射没学好,初级和中级也只能勉强通过,果然还要多多学习……
本帖最后由 andylizi 于 2015-10-25 12:17 编辑
初级篇
1、连线
Java——编程语言
JVM——运行时虚拟机
JRE——运行时环境
JDK——开发环境
JAVAC——编译器
*.class——目标文件
*.java——源文件
Eclipse——IDE
IDE——Integrated Development Environment
Gradle——构建工具
Javadoc——开发文档
2、能通过编译的代码(你这里怎么有2个5!)
1 2 3 6 10
3、使用泛型构造一个适合并便于使用的类型用于存储以下JSON
复制代码
4、将上一题中的JSON改写为YAML
复制代码
5、喂,我6年级
6、本质当然是for循环这不是废话么
7、泛型
8、它们都是循环语句相关= =具体还需要我一个一个解释?
9、复制代码以及复制代码
10、extends是继承,继承的可能是一些有方法体的方法,并且也可以选择不重写已经有方法体了的方法,但implements的存在就是让你重写的
11、4个
12、复制代码(我从来都是用IDE编译,打包jar执行,从未。。)
中级篇
有些太复杂懒得写了,我就说一些吧。。
3、这个我不怎么了解,大概是因为Java有自带的垃圾回收机制?还是因为Java没有指针?【扯谈中】
4、简单类型不能作为泛型的参数。原因?它们不算对象
6、不能修改static final,因为它们在java中的定义是,只能被赋值一次,绝对不能在内存中修改的固定值(static和final单独都有此意),但是有一个办法还是可以:
复制代码用反射对付反射23333
8、mcp帮你获得Minecraft源码,这样forge就可以使用它们= =【胡扯】
9、bukkit基于官服端,forge基于Minecraft,Cauldron基于forge和bukkit
10、没写过mod
11、NMS是net.minecraft.server包的简称,其优点就是让插件可以做到很多很多神奇的功能(ProtocolLib就是使用了它)缺点就是,因为NMS的包中含有服务器版本号比如v1_7_R1,导致插件只能兼容某某版本
当然这个可以使用多个NMS对应的类,或者反射来解决,不过很麻烦
还有就是Cauldron的NMS是混淆过的,因为它的NMS直接基于官服端
12、6年级路过
高级篇
1、LaunchWrapper会在MC加载之前加载,用途?大概就是将自己的相关程序注(tiao)入(jiao)Minecraft,使其可以做一些超出Minecraft的事
2、obfName就是mod导出完成后,你能在代码里找到的东西,因为你编写mod的时候使用的那些方法名呀之类的,都是进过mcp反混淆的,在使用的时候得混淆回去。srgName?没听说过。mcpName?同样没听说过。简述mod从编译到运行中经历的两次混淆/反混淆的时机和作用?我刚刚在回答obfName的时候已经回答了这个问题了
3、ASM什么鬼?似乎见过的样子(我都说过我没写过mod)
4、同上
初级篇
1、连线
Java——编程语言
JVM——运行时虚拟机
JRE——运行时环境
JDK——开发环境
JAVAC——编译器
*.class——目标文件
*.java——源文件
Eclipse——IDE
IDE——Integrated Development Environment
Gradle——构建工具
Javadoc——开发文档
2、能通过编译的代码(你这里怎么有2个5!)
1 2 3 6 10
3、使用泛型构造一个适合并便于使用的类型用于存储以下JSON
- List<Map<String,Integer>> list1 = new ArrayList<>();
- List<Map<String,Integer>> list2 = new ArrayList<>();
4、将上一题中的JSON改写为YAML
- ---
- list1:
- - subVal1: 11
- subVal2: 12
- - subVal3: 13
- subVal4: 14
- subVal5: 15
- list2:
- - subVal6: 16
5、喂,我6年级
6、本质当然是for循环这不是废话么
7、泛型
8、它们都是循环语句相关= =具体还需要我一个一个解释?
9、
- void foo(int a, int b);
- void foo(int x, int y);
- void foo(Integer a, Integer b);
- void bar(List list);
- void bar(List<Integer> list);
- void bar(List<Double> list);
10、extends是继承,继承的可能是一些有方法体的方法,并且也可以选择不重写已经有方法体了的方法,但implements的存在就是让你重写的
11、4个
12、
- javac A
- java A
中级篇
有些太复杂懒得写了,我就说一些吧。。
3、这个我不怎么了解,大概是因为Java有自带的垃圾回收机制?还是因为Java没有指针?【扯谈中】
4、简单类型不能作为泛型的参数。原因?它们不算对象
6、不能修改static final,因为它们在java中的定义是,只能被赋值一次,绝对不能在内存中修改的固定值(static和final单独都有此意),但是有一个办法还是可以:
- field.setAccessible(true);
- Field fieldModifier = field.getClass().getDeclaredField("modifiers");
- fieldModifier.setAccessible(true);
- fieldModifier.setInt(field, field.getModifiers() & ~Modifier.FINAL);
8、mcp帮你获得Minecraft源码,这样forge就可以使用它们= =【胡扯】
9、bukkit基于官服端,forge基于Minecraft,Cauldron基于forge和bukkit
10、没写过mod
11、NMS是net.minecraft.server包的简称,其优点就是让插件可以做到很多很多神奇的功能(ProtocolLib就是使用了它)缺点就是,因为NMS的包中含有服务器版本号比如v1_7_R1,导致插件只能兼容某某版本
当然这个可以使用多个NMS对应的类,或者反射来解决,不过很麻烦
还有就是Cauldron的NMS是混淆过的,因为它的NMS直接基于官服端
12、6年级路过
高级篇
1、LaunchWrapper会在MC加载之前加载,用途?大概就是将自己的相关程序注(tiao)入(jiao)Minecraft,使其可以做一些超出Minecraft的事
2、obfName就是mod导出完成后,你能在代码里找到的东西,因为你编写mod的时候使用的那些方法名呀之类的,都是进过mcp反混淆的,在使用的时候得混淆回去。srgName?没听说过。mcpName?同样没听说过。简述mod从编译到运行中经历的两次混淆/反混淆的时机和作用?我刚刚在回答obfName的时候已经回答了这个问题了
3、ASM什么鬼?似乎见过的样子(我都说过我没写过mod)
4、同上
andylizi 发表于 2015-10-25 12:15
初级篇
1、连线
Java——编程语言
哎唷不错。虽然还是有点小瑕疵。两个5那个确实是我的锅。。。
关于反射那题,除了final还有另一个大问题(编译器你别跑这个锅你背上)
另外高级篇的2问题有点大。首先obfName是指a,b,c这种,srgName是method_XXXX_a这种,mcpName才是能望文生义的。编译时的一次混淆你讲了,但其实运行时还有一次反混淆。。。。
RecursiveG 发表于 2015-10-26 00:28
哎唷不错。虽然还是有点小瑕疵。两个5那个确实是我的锅。。。
关于反射那题,除了final还有另一个大问题 ...
反射那题有啥问题么。。我测试是可以用的。。
高级篇别怪我,我从未写过mod,只不过是配置完forge环境已经无爱了
话说难道我就错了这么几个?
andylizi 发表于 2015-10-26 00:30
反射那题有啥问题么。。我测试是可以用的。。
高级篇别怪我,我从未写过mod,只不过是配置完forge环境已 ...
自己实际写代码试试呗
print一下看看到底变不变
有小瑕疵,不过我全指出来就没有讨论的意义了
RecursiveG 发表于 2015-10-26 00:34
自己实际写代码试试呗
print一下看看到底变不变
然而我在我的ColorMOTD里使用这个方法来注入ProtocolLib的自动更新器使其无法工作,然后ProtocolLib老老实实的提示没有发现更新,只不过那个字段是String[]型。。是因为简单类型还是怎么着。。直接告诉我不行吗,不想开IDE了A.A
想了想90%是因为简单类型,但是具体说不出来
本帖最后由 xiweihai 于 2015-10-26 11:13 编辑
好吧刚刚关完ide看见这个
1.jvm是虚拟机,jre是运行环节,jdk开发环境。javadoc 是api,java编程语言,.java源文件,
eclipse ide, gradle构架工具 .class就是编译好的类
2.第二句就进入死循环的吧,后面都是不可达代。编译不会通过的
3.其实就是一堆集合,jsonarray=arraylist,jsonObject=set
4.对yml使用很少,通常使用自带的gson包用json储存数据
5.2的32次方-1<(4*1024)
6.只知道,遍历数组集合代码更简洁
7.<> : 这样的应该就是语法糖吧
8.for这个不好说多了个定义变量,和执行的环节。while就是为假时跳出。do while 先执行了再判断。
break可以跳出循环或者if这样的语句
9.这个不懂
10 第一个是继承,然后是实现,可以理解为前面做好的,后面的得自己实现
11.两个吧
12.java a
13.int func(int x) {
int y=0;
if(x<0){
throw new IllegalArgumentException();
}else if(x<2){
y=1;
}
//不然会进入死循环
int z=x+x-3;
if(z<0){
return z;
}else{
y=func(z);
}
return y;
}
14.因为string是个对象,而list里面储存是以前的对象。直接=""相当于newle另外一个对象,修改应该是str1.replace(str1,"Not String #1")。
15.因为java有内存回收机制,而且java不支持指针
16.int是个基本类型,而集合里面都是是Object,故不行,可使用Integer(编译器会帮你自动转换)
17.12利用java反射读取对象内的变量
18.setAccessible(true);可以暴力获取,至于后果不知道
19.不知道
20.mcp回编译源码,然后forge在此基础上开发api是这样吗
21.不懂
22.也不懂
23.更不懂
24.可以做其他的事情,比如说删除mc的文件,如果mc被打开后文件就被占有了无法删除
25.不懂
26.不懂
27.稍微了解反射,但是前面的没听说过
好吧刚刚关完ide看见这个
1.jvm是虚拟机,jre是运行环节,jdk开发环境。javadoc 是api,java编程语言,.java源文件,
eclipse ide, gradle构架工具 .class就是编译好的类
2.第二句就进入死循环的吧,后面都是不可达代。编译不会通过的
3.其实就是一堆集合,jsonarray=arraylist,jsonObject=set
4.对yml使用很少,通常使用自带的gson包用json储存数据
5.2的32次方-1<(4*1024)
6.只知道,遍历数组集合代码更简洁
7.<> : 这样的应该就是语法糖吧
8.for这个不好说多了个定义变量,和执行的环节。while就是为假时跳出。do while 先执行了再判断。
break可以跳出循环或者if这样的语句
9.这个不懂
10 第一个是继承,然后是实现,可以理解为前面做好的,后面的得自己实现
11.两个吧
12.java a
13.int func(int x) {
int y=0;
if(x<0){
throw new IllegalArgumentException();
}else if(x<2){
y=1;
}
//不然会进入死循环
int z=x+x-3;
if(z<0){
return z;
}else{
y=func(z);
}
return y;
}
14.因为string是个对象,而list里面储存是以前的对象。直接=""相当于newle另外一个对象,修改应该是str1.replace(str1,"Not String #1")。
15.因为java有内存回收机制,而且java不支持指针
16.int是个基本类型,而集合里面都是是Object,故不行,可使用Integer(编译器会帮你自动转换)
17.12利用java反射读取对象内的变量
18.setAccessible(true);可以暴力获取,至于后果不知道
19.不知道
20.mcp回编译源码,然后forge在此基础上开发api是这样吗
21.不懂
22.也不懂
23.更不懂
24.可以做其他的事情,比如说删除mc的文件,如果mc被打开后文件就被占有了无法删除
25.不懂
26.不懂
27.稍微了解反射,但是前面的没听说过
本帖最后由 u.s.knowledge 于 2015-10-26 04:53 编辑
自学java的路过,看完题目后选择死亡。(基础知识完全不够用系列...)
自学java的路过,看完题目后选择死亡。(基础知识完全不够用系列...)
xiweihai 发表于 2015-10-26 01:51
好吧刚刚关完ide看见这个
1.jvm是虚拟机,jre是运行环节,jdk开发环境。javadoc 是api,java编程语言,.jav ...
你对第二题的回答我已经醉了,他的意思是单独把每一句拿出来,没跟你说连起来啊
本帖最后由 andylizi 于 2015-10-26 15:51 编辑

果不其然,但是。。。原因在哪里呀原因在哪里
呃,刚刚又试了下,修改数组。。

为什么数组就可以。。

果不其然,但是。。。原因在哪里呀原因在哪里
呃,刚刚又试了下,修改数组。。

为什么数组就可以。。
andylizi 发表于 2015-10-26 15:38
你对第二题的回答我已经醉了,他的意思是单独把每一句拿出来,没跟你说连起来啊 ...
随便写写而已,别当真
本帖最后由 丶皇天 于 2015-10-31 08:58 编辑
话说中级篇的第一题怎么没有人讨论。第一题效率低的原因是用了递归算法吧,作用是求出斐波那契数列第x+1项复制代码我的答案是:
int func(int x)
{
if (x < 0) throw new IllegalArgumentException();
int i,f1,f2,f3;
f1=1;
f2=1;
for (i=0;i<x;i++)
{
f3=f1+f2;
f1=f2;
f2=f3;
}
return f1;
}
话说中级篇的第一题怎么没有人讨论。第一题效率低的原因是用了递归算法吧,作用是求出斐波那契数列第x+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);
- }
int func(int x)
{
if (x < 0) throw new IllegalArgumentException();
int i,f1,f2,f3;
f1=1;
f2=1;
for (i=0;i<x;i++)
{
f3=f1+f2;
f1=f2;
f2=f3;
}
return f1;
}
丶皇天 发表于 2015-10-30 16:53
话说中级篇的第一题怎么没有人讨论。第一题效率低的原因是用了递归算法吧,作用是求出斐波那契数列第x+1项 ...
的确,递归太耗费栈内存。。
丶皇天 发表于 2015-10-31 08:53
话说中级篇的第一题怎么没有人讨论。第一题效率低的原因是用了递归算法吧,作用是求出斐波那契数列第x+1项 ...
O(log(n))算法?!让我想想
lz指的是通向公式+快速幂吗?
答题卡:
1.
Java语言
JVM虚拟机
JRE环境
JDK开发环境
JAVAC编译器
*.java源文件
*.class目标文件
Eclipse IDE
IDE Integ......
Gradle构建工具
Javadoc开发文档
2.
1,2,3,5,7,10(会出现运行时错误),11,13
3.
List<List> root = new List<>();
List<Map> list1 = new List<>();
Map<String,Integer> sub1to5 = new HashMap<>();
List<Map> list2 = new List<>();
Map<String,Integer> sub6 = new HashMap<>();
root.add(list1);
root.add(list2);
list1.add(sub1to5);
list2.add(sub6);
4.不会
5.32位寻址系统的长度不足以存放4G以上内存的内存地址
6.for
7.泛型
8.for:加强的while while:条件循环 dowhile:执行一次之后条件循环 breakcontinue:跳出循环和开始下一次循环
9.1,2
3.7 4,7
10.extends继承类,implements实现接口
11.4
12.javac A.java
java A
中级
1.不。
int func(int x) {
if (!(x > 1)) return 1;
if (x < 0) throw new IllegalArgumentException();
return func(x - 1) + func(x - 2);
}
接下来的后面填坑
1.
Java语言
JVM虚拟机
JRE环境
JDK开发环境
JAVAC编译器
*.java源文件
*.class目标文件
Eclipse IDE
IDE Integ......
Gradle构建工具
Javadoc开发文档
2.
1,2,3,5,7,10(会出现运行时错误),11,13
3.
List<List> root = new List<>();
List<Map> list1 = new List<>();
Map<String,Integer> sub1to5 = new HashMap<>();
List<Map> list2 = new List<>();
Map<String,Integer> sub6 = new HashMap<>();
root.add(list1);
root.add(list2);
list1.add(sub1to5);
list2.add(sub6);
4.不会
5.32位寻址系统的长度不足以存放4G以上内存的内存地址
6.for
7.泛型
8.for:加强的while while:条件循环 dowhile:执行一次之后条件循环 breakcontinue:跳出循环和开始下一次循环
9.1,2
3.7 4,7
10.extends继承类,implements实现接口
11.4
12.javac A.java
java A
中级
1.不。
int func(int x) {
if (!(x > 1)) return 1;
if (x < 0) throw new IllegalArgumentException();
return func(x - 1) + func(x - 2);
}
接下来的后面填坑
本帖最后由 ufof 于 2015-11-30 05:10 编辑
好吧,看到那么多人参与。我也小试身手一下。
初级篇
1.
Java ---- 编程语言
JVM ---- 运行时虚拟机
JRE ---- 运行时环境
JDK ---- 开发环境
javac ---- 编译器
*.java ---- 源文件
*.class ---- 目标文件(字节码文件更好?)
Eclipse ---- IDE
IDE ---- Integrated Development Environment
Gradle ---- 构建工具
Javadoc ---- 开发文档
2.
复制代码1. 可以
2. 可以通过编译(如果后面没有其他语句),但是会陷入无限循环。如果后面有语句,会是unreachable的,那就会报错
3. 可以
4. 语法问题,写构造方法的参数的括号忘了
5. 可以
6. 不可以,赋值运算符优先级是最低的,然而if中的括号必须是布尔
7. 同②
8. 不可以,多行注释不可以嵌套。最后一个关闭标记没有找到与之对应的开始标记
9. 不可以。主方法也是方法,返回值类型必须声明
10. 如果foo是构造方法,可以通过。如果不是,不可以。另外,这是无限制的递归,会陷入死循环
11. 取决于@NotNull这个Annotation(Java有提供这个Annotation吗?)
12. 不可以。throw抛出的是一个异常的对象。可以使用匿名对象“throw new RuntimeException()”
13. 可以。然而,Java 7之后“new List<Player>()”可以被简化为“new List<>()”,也就是菱形语法
3,4跳过(不了解JSON,惭愧)
5. 因为32位系统位数不够,2^31-1不足以寻址4G内存
6. foreach的本质当然是for
7. Lambda表达式是一个语法糖,用于简化匿名内部类。还有一个前提,就是匿名内部类必须是函数式接口的实现类。例如这段程序:
复制代码
在这个程序中,需要使用匿名内部类的方式实现Runnable并传入Thread类的构造方法。但是Lambda表达式可以把这个化简成:
复制代码
8.
LZ貌似写了两个for。。
9.
复制代码
foo(int a, int b)和foo(int x, int y)两个方法本质相同。很容易理解,因为两个方法的形参列表是相同的(int, int),只是形参名不一样。
然而对于foo(Integer a, Integer b),虽说Integer是int的包装类,但是形参列表是不同的,所以说和前两个本质有区别。
“void bar(List<Integer> list)”和“void foo(List<Integer> list)”两个方法本质一样。只是方法名不一样罢了。
关于三个bar(),虽说形参中的List有着不同的泛型,方法本质依旧一样。因为无论是List<Integer>、List<Double>等,都是instanceof List。只是传入实参时应当注意一下就行了。
10.
extends是指类继承另外一个类;implements是类实现一个接口。
如果A类继承B类,那么A类获得B类中的所有类成员;如果A类实现B接口,那么A类就必须遵守B接口的“规范”,也就是要复写B接口的所有方法。
11. 应该4个
12.
首先使用javac命令对这个源代码文件进行编译,会生成一个.class文件,也就是字节码文件。
然后使用java运行这个字节码文件。
中级篇
1.
这个方法不算是很高效。这是因为在方法中使用递归的算法运算斐波那契数。然而,递归算法每递归一次就会在栈内存给方法分配一个栈区。递归多了又出现栈内存溢出的风险。
应当使用循环来解决这个问题:
复制代码
2. 选择死亡
3.
本人对C++不太了解。但是感觉是因为指针的关系,为了释放资源必须删除。或者因为Java有自动的垃圾回收机制,C++没有。
4. 这是因为指定泛型的类型时必须是引用数据类型。int是基本数据类型。可以改成int的包装类Integer。
5. 选择死亡
6. 不可以。static final的字段十分特殊:首先在内存共享区中只有一个这样的字段,因为属于类而不是实例;还是最终的。所以说这个值永永远远就是刚开始给其赋的值。即使使用反射应该也会报错。
剩下的我全部选择死亡.. 我对插件以及mod还不是太了解,只会Java这个编程语言。请过目@RecursiveG
好吧,看到那么多人参与。我也小试身手一下。
初级篇
1.
Java ---- 编程语言
JVM ---- 运行时虚拟机
JRE ---- 运行时环境
JDK ---- 开发环境
javac ---- 编译器
*.java ---- 源文件
*.class ---- 目标文件(字节码文件更好?)
Eclipse ---- IDE
IDE ---- Integrated Development Environment
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>();
2. 可以通过编译(如果后面没有其他语句),但是会陷入无限循环。如果后面有语句,会是unreachable的,那就会报错
3. 可以
4. 语法问题,写构造方法的参数的括号忘了
5. 可以
6. 不可以,赋值运算符优先级是最低的,然而if中的括号必须是布尔
7. 同②
8. 不可以,多行注释不可以嵌套。最后一个关闭标记没有找到与之对应的开始标记
9. 不可以。主方法也是方法,返回值类型必须声明
10. 如果foo是构造方法,可以通过。如果不是,不可以。另外,这是无限制的递归,会陷入死循环
11. 取决于@NotNull这个Annotation(Java有提供这个Annotation吗?)
12. 不可以。throw抛出的是一个异常的对象。可以使用匿名对象“throw new RuntimeException()”
13. 可以。然而,Java 7之后“new List<Player>()”可以被简化为“new List<>()”,也就是菱形语法
3,4跳过(不了解JSON,惭愧)
5. 因为32位系统位数不够,2^31-1不足以寻址4G内存
6. foreach的本质当然是for
7. Lambda表达式是一个语法糖,用于简化匿名内部类。还有一个前提,就是匿名内部类必须是函数式接口的实现类。例如这段程序:
- new Thread(new Runnable(){
- @Override
- public void run(){
- System.out.println("run");
- }
- });
在这个程序中,需要使用匿名内部类的方式实现Runnable并传入Thread类的构造方法。但是Lambda表达式可以把这个化简成:
- new Thread(() -> System.out.println("runs"));
8.
- for是一个循环语法。相对while来讲,对于变量的初始化,操作(一般自增自减)和循环是否继续的判断都融为一体;
- while也是一个循环语法。通过布尔表达式判断是否继续循环。先判断再循环;
- do while同while,但是先循环再判断
- break从当前循环跳出
- continue从本次循环跳出
LZ貌似写了两个for。。
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);
foo(int a, int b)和foo(int x, int y)两个方法本质相同。很容易理解,因为两个方法的形参列表是相同的(int, int),只是形参名不一样。
然而对于foo(Integer a, Integer b),虽说Integer是int的包装类,但是形参列表是不同的,所以说和前两个本质有区别。
“void bar(List<Integer> list)”和“void foo(List<Integer> list)”两个方法本质一样。只是方法名不一样罢了。
关于三个bar(),虽说形参中的List有着不同的泛型,方法本质依旧一样。因为无论是List<Integer>、List<Double>等,都是instanceof List。只是传入实参时应当注意一下就行了。
10.
extends是指类继承另外一个类;implements是类实现一个接口。
如果A类继承B类,那么A类获得B类中的所有类成员;如果A类实现B接口,那么A类就必须遵守B接口的“规范”,也就是要复写B接口的所有方法。
11. 应该4个
12.
首先使用javac命令对这个源代码文件进行编译,会生成一个.class文件,也就是字节码文件。
然后使用java运行这个字节码文件。
中级篇
1.
这个方法不算是很高效。这是因为在方法中使用递归的算法运算斐波那契数。然而,递归算法每递归一次就会在栈内存给方法分配一个栈区。递归多了又出现栈内存溢出的风险。
应当使用循环来解决这个问题:
- static int func(int x) {
- if (x < 0)
- throw new IllegalArgumentException("only positive integers please");
- int num1 = 1;
- int num2 = 1;
- int result = 0;
- for (int count = 0; count < x; count++) {
- result = num1 + num2;
- num1 = num2;
- num2 = result;
- }
- return result;
- }
2. 选择死亡
3.
本人对C++不太了解。但是感觉是因为指针的关系,为了释放资源必须删除。或者因为Java有自动的垃圾回收机制,C++没有。
4. 这是因为指定泛型的类型时必须是引用数据类型。int是基本数据类型。可以改成int的包装类Integer。
5. 选择死亡
6. 不可以。static final的字段十分特殊:首先在内存共享区中只有一个这样的字段,因为属于类而不是实例;还是最终的。所以说这个值永永远远就是刚开始给其赋的值。即使使用反射应该也会报错。
剩下的我全部选择死亡.. 我对插件以及mod还不是太了解,只会Java这个编程语言。请过目@RecursiveG
ufof 发表于 2015-11-30 04:53
好吧,看到那么多人参与。我也小试身手一下。
初级篇
@RecursiveG
ufof 发表于 2015-11-30 20:53
好吧,看到那么多人参与。我也小试身手一下。
初级篇
恭喜你跟我一样上当了……foreach的本质是迭代器……我后来才想起来……
完全看不懂,比较初二党!
头脑已经烧了......{:10_519:}
本帖最后由 z25096708 于 2016-3-4 20:42 编辑
看到一大堆代码还没注释我脑子就炸了
梨子= =你拿到TDIANT送的梨子没= =
=======================================================
@andylizi 梨子= =上次StupidTdiant还给你在淘宝选购梨子。。。。。。。。
andylizi 发表于 2015-12-8 21:06
恭喜你跟我一样上当了……foreach的本质是迭代器……我后来才想起来……
看到一大堆代码还没注释我脑子就炸了
梨子= =你拿到TDIANT送的梨子没= =
=======================================================
@andylizi 梨子= =上次StupidTdiant还给你在淘宝选购梨子。。。。。。。。
don't have a Chinese input method.
Start with medium level:
1. Do not use recursive. Recursive will break the stack.
复制代码---Pure math...2. Part 1:
Reference to origin string is replaced to the new string while the List is not replaced.
Part2:
Static means same memory location, which means only one MyClass will be referenced.
3.C++ doesn't have automatic GC (But you can write a pure virtual destroyer with delete operation in base class so the compiler will automatically destroy them. Not effective on isolated references)
4. Java: int is not an object.
5. Not even able to compile... (Constructor is not defined)
6. private static final? I'm not sure if this allows reflection to change its value.
7. Not only Minecraft but almost all the games required Drawningto screen. Drawning a frame costs a lot of time and you can only display one frame at a time so (almost) no one will care about multi-threading in a game.
8. MCP=anti-obf tool for MC, NO MCP NO Forge.
9. Forge / Bukkit: API, Bukkit supports for server plugins mostly and Forge supports both. Cauldron is a server-based mixture of Forge and Bukkit (allows Forge/modloader mods and bukkit plugins at the same time)
10. Allows single-file supports both server and client.
11. NMS=net.minecraft.server, for advanced abilities. However, a version number is included.
12. Not allowed to "spread" any Minecraft original file, only modifying is allowed.
Advanced section
1.LaunchWrapper is used to do some stuff before MC really starts, like mod sorting, scanning, class patching...
2.obfName = names like "a","bcd"...
srgname = "func_12345_a"
mcpName = "net/minecraft/itemStack/Itemstack"
modding: obfName, srgname -> mcpName
compiling: mcpName -> srgname, obfName
Running: (Forge) obfName -> srgName
3. ASM is a bytecode manipulation and analysis framework for modifying existing classes or dynamically generate classes directly into bytecode.
4. ASMTransformer is UNSAFE. Reflection is LIMITED.
Start with medium level:
1. Do not use recursive. Recursive will break the stack.
- int Feb(int operation_time)
- {
- if (x < 0) throw new IllegalArgumentException();
- if (x+1<=2) return 1;
- return (1/Math.sqrt(5)*(Math.pow((1+Math.sqrt(5))/2,operation_time+2))-(Math.pow((1-Math.sqrt(5))/2,operation_time+2)))-1;
- }
Reference to origin string is replaced to the new string while the List is not replaced.
Part2:
Static means same memory location, which means only one MyClass will be referenced.
3.C++ doesn't have automatic GC (But you can write a pure virtual destroyer with delete operation in base class so the compiler will automatically destroy them. Not effective on isolated references)
4. Java: int is not an object.
5. Not even able to compile... (Constructor is not defined)
6. private static final? I'm not sure if this allows reflection to change its value.
7. Not only Minecraft but almost all the games required Drawningto screen. Drawning a frame costs a lot of time and you can only display one frame at a time so (almost) no one will care about multi-threading in a game.
8. MCP=anti-obf tool for MC, NO MCP NO Forge.
9. Forge / Bukkit: API, Bukkit supports for server plugins mostly and Forge supports both. Cauldron is a server-based mixture of Forge and Bukkit (allows Forge/modloader mods and bukkit plugins at the same time)
10. Allows single-file supports both server and client.
11. NMS=net.minecraft.server, for advanced abilities. However, a version number is included.
12. Not allowed to "spread" any Minecraft original file, only modifying is allowed.
Advanced section
1.LaunchWrapper is used to do some stuff before MC really starts, like mod sorting, scanning, class patching...
2.obfName = names like "a","bcd"...
srgname = "func_12345_a"
mcpName = "net/minecraft/itemStack/Itemstack"
modding: obfName, srgname -> mcpName
compiling: mcpName -> srgname, obfName
Running: (Forge) obfName -> srgName
3. ASM is a bytecode manipulation and analysis framework for modifying existing classes or dynamically generate classes directly into bytecode.
4. ASMTransformer is UNSAFE. Reflection is LIMITED.
- int func(int x) {
- if (x == 0 || x == 1) return 1;
- if (x < 0) throw new IllegalArgumentException();
- return func(x - 1) + func(x - 2);
- }
- int func(int x)
- {
- if ((x & 0x80000000) > 0)
- {
- return -1;
- }
- if ((x & 0x7ffffffe) > 0)
- {
- return func(x - 1) + func(x - 2);
- }
- return 1;
- }
太有用了qwq
表示不会编辑
看不懂
膜拜大神
膜拜大神
还好我有会c语言
andylizi 发表于 2015-10-26 15:46
果不其然,但是。。。原因在哪里呀原因在哪里
呃,刚刚又试了下,修改数组。。
如果没猜错,在编译的时候编译器就把所有常量的值覆盖到他们对应的位置了,也就是说其实你在编译好的东西里已经看不见NUMBER了
(和c++的const有异曲同工之妙)
最后5个不懂
c#表示异曲同工,不过,还是不会Java,弱弱问一句,c#能不能编插件?
34ft 发表于 2016-11-15 17:04
还好我有会c语言
c语言是非托管代码,和Java/c#差远了,我学C#的都觉得累
本帖最后由 coves 于 2017-2-17 23:11 编辑
int func(int x) {
if (x < 0) throw new IllegalArgumentException();
return (x-1)<1?1:func(x - 1) + func(x - 2);
}
int func(int x) {
if (x < 0) throw new IllegalArgumentException();
return (x-1)<1?1:func(x - 1) + func(x - 2);
}
luojiarui 发表于 2017-3-1 15:09
C#是微软.net框架的编程语言。。
和java长得差不多
密密麻麻头皮发麻

本以为可以通过测试
结果是我没带脑子。。。
结果是我没带脑子。。。
没有答案吗。。。。想找对比啊。。
andylizi 发表于 2015-10-26 15:46
果不其然,但是。。。原因在哪里呀原因在哪里
呃,刚刚又试了下,修改数组。。
数组为引用类型
DefineEvil 发表于 2017-6-6 10:17
数组为引用类型
唔这个问题是我很久以前回答的,现在已经弄明白了,谢谢
第一题为什么两个IDE
看半天“这和我学的C++不一样啊但是好像又一样”
然后“哦原来这是java”
然后“哦原来这是java”
这些都是个啥子哟╮(╯_╰)╭
所有mod方向的都不会,剩余的还能答上来(毕竟学过Java),问我需要多长时间学会mod o(?^`)o