开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
Computer Science
Computer Science

Java 几个基本数据类型长度

对 Java 来说,我们通常会有下面几个基本数据类型。 需要了解的一个定义是,一个字节(byte) 是 8 位(Bit)。 针对 Java 的所有数据类型,最小的是 1 个字节,最多的是 8 个字节 数据长度对照表 下面是 Java 数据长度使用的对照表。 类型 长度(位) 长度(字节) 范围 byte(字节型) 4 1 -128~127 boolean(布尔型) 4 1 true或false int(整型) 32 4 -2147483648~2147483647 short(短整型) 16 2 -32768~32767 long(长整型) 64 8 -9223372036854775808 ~ 9223372036854775807 char(字符型) 16 2 0~65535 float(浮点型) 32 4 -3.4E38~3.4E38 double(双精度型) 64 8 -1.7E308~1.7E308 记不住可以实际的取值范围? 其实是人都记不住。 Java API Java 的 API 提供了方法是可以让直接输出的。 比如说,你想知道 Float 的最大值,可以运行下面的代码 System.out.println(Float.MAX_VALUE); 程序上将会输出为:3.4028235E38 不知道上面什么意思? 科学计数法的表达。 又比如 Long 这个整数可以存储的最大数值为:9223372036854775807 直接运行就可以输出了:     同时你可以可以读 Java 的 API,在构造函数中,Java 已经定义了 Max_value。     上面的图片中的内容就定义了值。 我们看到是用 16 进制定义的。 https://www.isharkfly.com/t/java/14695

2023年09月05日 0Comments 435Browse 0Like Read more
Computer Science

开始投简历了

歇了好长时间,也该开始找点事情折腾了。 第一周基本上是没有什么太多的消息,大部分情况就是收到回复的邮件说你很优秀,希望下次合作这种礼节性的拒绝邮件。 给人有点感觉都是在忽悠,有点感觉现在的公司一边到处拒绝,一边又在到处找人。 一个招聘放网站能放 3 个月,真的不知道他们是招人来工作还是就是给自己做点广告啥的,毕竟这招聘广告可比 Google 广告便宜多。 第二周 一直到第二周才有一些正儿八经的面试了,通常都是第一轮大家见个面聊聊。   还有更奇葩的,发消息过来说你能接受做个 OA 吗?回答,当然是 Yes 了。然后就没有下文了。   其中还发了个消息过去说,你不是说要做 OA 吗?链接呢? 从这个事情上,感觉这 OA 也就是一个毛。 如果你 OA 做不出来,没关系,不是你的能力问题,而是这 OA 实在就是没啥意义,千万不要因为自己 OA 没有做好就觉得自己有问题。 也算是个好消息 以前有一个 Google 的广告账号的,不知道怎么被封了。 早上打开电脑后,莫名其妙的说账号可以用了。     有时候觉得还挺奇葩的,当你需要的时候,不是这有问题那有问题。 生活上,也许总会有那么点小挫折吧,然后就是一些小惊喜。   https://www.isharkfly.com/t/topic/14673

2023年09月05日 0Comments 389Browse 0Like Read more
Computer Science

Java 中的移位运算符(Shift Operator)

针对移位(Shift Operator)操作符是最基本的操作符之一,几乎每种编程语言都包含这一操作符。 同时我们对移位运算又会觉得比较陌生和困惑,这是因为移位运算除了在 JDK 底层你会遇到不少,还有就是在各种奇葩的面试题会遇到一些,在实际使用的时候,这个运算其实很难用得上。 因为用得不多,所以在大部分人的面对的代码情况下,根本不会考虑移位运算,所以对移位运算我们大致知道下就可以了,至于如何奇葩的运算,你只知道一些基本概念就行,其实很多时候并不需要你直接用移位运算算出来。 基本概念 针对移位运算,我们需要了解有几个基本概念。 3 个移位运算符 Java 只有 3 个移位运算符, << (左移)、 >> (带符号右移)和 >>> (无符号右移)。 为什么有 3 个,移位运算不是左就是右,为什么有 3 个? 因为 Java 的整数是有符号的整数,所以针对符号转换 Java 添加了一个无符号右移。 只能用于整数 Java 的移位运算,不能用于浮点数,只能用于整数。 因为 Java 可以处理整数的长度不一样,所以移位运算只会用在 int 上,虽然其他数据类型也可以用,但是都是在转换成 int 后进行计算的。 类型 长度 long 64 位 int 32 位 short 16 位 byte 8 位 char 16 位 整数 2 进制表达 在 Java 的整数 int 表达中,其中有一个位留给了符号位置,所以真正可以存储数据的位为 31 位。 因此,Int 的存储范围为:[-2^31,2^31-1],所以上面的指数为 31, 而不是 32 的原因是其中有一位留给了符号位。 左移操作符 << 左移操作符 << 是将数据转换成二进制数后,向左移若干位,高位丢弃,低位补零 。 如下面的代码: log.debug("{}/{}", Integer.toBinaryString(12), Integer.parseInt(Integer.toBinaryString(12), 2)); log.debug("{}/{}", Integer.toBinaryString(12 << 1), Integer.parseInt(Integer.toBinaryString(12 << 1), 2)); log.debug("{}/{}", Integer.toBinaryString(12 << 8), Integer.parseInt(Integer.toBinaryString(12 << 1), 2)); 程序的输出为: 12:16:18.985 [main] DEBUG com.ossez.toolkits.codebank.tests.EmptyQuickTest - 1100/12 12:16:18.986 [main] DEBUG com.ossez.toolkits.codebank.tests.EmptyQuickTest - 11000/24 12:16:18.986 [main] DEBUG com.ossez.toolkits.codebank.tests.EmptyQuickTest - 110000000000/24 因为都在末尾补 0 ,所以在范围内,不管你是左移 1 位还是超过 1 位,都是等于 10 进制的数乘以 2。     带符号右移操作符 >> Java中整型表示负数时,最高位为符号位,正数为0 ,负数为1 。 >> 是带符号的右移操作符,将数据转换成二进制数后,向右移若干位,高位补符号位,低位丢弃 。 对于正数作右移操作时,具体体现为高位补0 ;负数则补1 这个主要是针对右移动的时候高位出现空白,我们应该还是补 0 还是 1 的问题。 带符号的右移意思就是:当高位出现空白的时候,我们补符号位,根据当前的数据不同而不同。 如下面的代码: log.debug("{}", Integer.toBinaryString(-12)); log.debug("{}", Integer.toBinaryString(-12 >> 1)); log.debug("{}", Integer.toBinaryString(-12 >> 8)); 运行结果为: 12:25:32.765 [main] DEBUG com.ossez.toolkits.codebank.tests.EmptyQuickTest - 11111111111111111111111111110100 12:25:32.765 [main] DEBUG com.ossez.toolkits.codebank.tests.EmptyQuickTest - 11111111111111111111111111111010 12:25:32.765 [main] DEBUG com.ossez.toolkits.codebank.tests.EmptyQuickTest - 11111111111111111111111111111111 我们可以看到上面的移位为带有符号的移位置,所有移动的高位在负数的时候都被补充为符号位了。 如果是负数的话,就会补充为 1 。 无符号右移操作符 >>> 无符号右移操作符 >>> 与>> 类似,都是将数据转换为二进制数后右移若干位,不同之处在于,不论负数与否,结果都 是高位补零,低位丢弃 。 这个操作符的计算对负数的计算会因为补位的不同而变成整数。 如下面的代码。 log.debug("---- Shift Operator >>> ---"); log.debug("{}", Integer.toBinaryString(-12)); log.debug("{}/{}", Integer.toBinaryString(-12 >>> 1), Integer.parseInt(Integer.toBinaryString(-12 >>> 1), 2)); log.debug("{}/{}", Integer.toBinaryString(-12 >>> 8), Integer.parseInt(Integer.toBinaryString(-12 >>> 8), 2)); 程序输出如下: 13:25:19.374 [main] DEBUG com.ossez.toolkits.codebank.tests.EmptyQuickTest - ---- Shift Operator >>> --- 13:25:19.374 [main] DEBUG com.ossez.toolkits.codebank.tests.EmptyQuickTest - 11111111111111111111111111110100 13:25:19.374 [main] DEBUG com.ossez.toolkits.codebank.tests.EmptyQuickTest - 1111111111111111111111111111010/2147483642 13:25:19.374 [main] DEBUG com.ossez.toolkits.codebank.tests.EmptyQuickTest - 111111111111111111111111/16777215     从上面的代码输出中,我们会发现对应的 2 进制长度不一样,因为在 Java 程序中对于二进制,前面为 0 的时候,在输出的时候会进行丢弃的。 所以显示的长度不一样,如果希望显示长度一致的话,前面补 0 就可以了。   https://www.isharkfly.com/t/java-shift-operator/14594

2023年09月04日 0Comments 482Browse 0Like Read more
Computer Science

Java 乘等赋值运算

下面这个题目是在一公司发过来的,如果你对 Java 的赋值运算比较了解的话,会很快知道答案的。     这个运算符在 Java 里面叫做乘等或者乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数。 例如下面的:density *= invertedRatio; 其实等于的就是 density = density * invertedRatio; 这个语法是从 C 语言里面借鉴过来的,运算的目的就是把 2 个数相乘后把结果赋值给自己。 因为上面题目中的 Result 已经被赋值为 0 了。 因此这个循环不管循环多少次的结果都应该为 0。 因这个题目太简单了,所以我们就不把代码敲上来验证了。   https://www.ossez.com/t/java/14590

2023年09月02日 0Comments 414Browse 0Like Read more
Computer Science

题目有点太简单了,不知道怎么选了

有个公司给了下面一个题目,看了下太简单了,都怕选错了。     后来拿着程序跑了下,就是这个意思嘛。 结论 程序跑出来的结果就是对输入的列表进行倒序排列。 public void testGetPut() throws Exception { List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7); List<Integer> result = new ArrayList<Integer>(); for (int i = numbers.size() - 1; i >= 0; i--) { result.add(numbers.get(i)); } System.out.println(result); } 一度怀疑是不是写错了。 按照套路来说,上面的代码不应该还是要复杂点的吗?     觉得,有时候在公司给你做 OA 的时候,自己也需要相信自己,不是所有的东西都是复杂的。 其实有时候你做的 OA ,很多公司可能看都不会看。   https://www.ossez.com/t/topic/14588/1

2023年09月02日 0Comments 385Browse 0Like Read more
Computer Science

Ramp 有点意思的题目

粗一看都不知道这个要干什么,这 B 装得不错。     IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKJycnCktlZXAgdXMgb3V0IG9mIGdvb2dsZSBzZWFyY2ggcmVzdWx0cy4uCgokIG9kIC1kIC9kZXYvdXJhbmRvbSB8IGhlYWQKMDAwMDAwMCAgICAgNjAyMTUgICAyODc3OCAgIDI5MjI3ICAgMjg1NDggICA2MjY4NiAgIDQ1MTcxICAgIDc4MjYgICA0ODc2NgowMDAwMDIwICAgICAxNzExOCAgIDE1MjI1ICAgMTI4NTIgICAzNDc4MSAgIDMxOTU1ICAgMTkwODcgICAzOTU2MyAgIDQzNjE0CjAwMDAwNDAgICAgICA2NzEwICAgMzg1MTUgICAxNDU3MyAgIDY0MDg3ICAgMTcwMjYgICAyNTU5OCAgIDQyOTEzICAgMTQyMDkKMDAwMDA2MCAgICAgMTA3MjMgICAzMTMwNyAgIDE5MDcxICAgMTQ3OTggICAgMjQ2MiAgIDQ2MjUzICAgMzU2MjYgICAzMjQzNgowMDAwMTAwICAgICAgMTczOSAgIDI3NzEyICAgIDU2NjcgICAxMjIxMiAgIDQ3MDc3ICAgNDE3MjIgICA1NDQ1MiAgIDM4NDYxCjAwMDAxMjAgICAgICA0ODE2ICAgMTUwMTQgICAyODYyMyAgIDEwOTI4ICAgNTQwMjggICA2NDUyMyAgIDU0NjMyICAgNTQxODcKMDAwMDE0MCAgICAgNjE2MzEgICA1NDQ5OSAgIDE4MzA3ICAgIDU1MTQgICA1MDc0MyAgIDUwNTkxICAgMjUxNzIgICA1NDAxOAowMDAwMTYwICAgICAzMTk5MCAgIDI2MjQ4ICAgIDQzODMgICA0NjQ1MiAgIDQyMTU2ICAgNjIzMjAgICA1MTA1MiAgIDI4NjIxCjAwMDAyMDAgICAgIDI3MjI2ICAgNjUyOTYgICA1NjMwNSAgIDMzMzc1ICAgIDQ4MTMgICA0MjI4MyAgIDE5OTgwICAgIDE5MjIKMDAwMDIyMCAgICAgNTcwNjEgICAyOTMyMiAgIDI3MDczICAgNjQ5ODYgICAxNTIxOSAgIDI2MjM0ICAgMjQxMDAgICAyMTIwNAonJycKCicnJwpDb3B5IHRoaXMgZmlsZSBhbmQgcnVuIGBwYnBhc3RlIHwgYmFzZTY0YCB0byBnZW5lcmF0ZSBjaGFsbGVuZ2UgdGV4dC4gQ29waW91cwp3aGl0ZSBzcGFjZSBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlIHRvIGVuc3VyZSB0cmFpbGluZyBgPT1gIGFuZCBoaW50IGF0CmJhc2U2NC4KJycnCgppbXBvcnQgY29kZWNzCmltcG9ydCBzdHJpbmcKaW1wb3J0IHN5cwppbXBvcnQgdGltZQoKZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LmJhY2tlbmRzIGltcG9ydCBkZWZhdWx0X2JhY2tlbmQKZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LnByaW1pdGl2ZXMuaGFzaGVzIGltcG9ydCBTSEExCmZyb20gY3J5cHRvZ3JhcGh5Lmhhem1hdC5wcmltaXRpdmVzLnR3b2ZhY3Rvci50b3RwIGltcG9ydCBUT1RQCgoKT05FX1dFRUtfSU5fU0VDT05EUyA9IDYwNF84MDAKCgpkZWYgZ2VuZXJhdGVfc2VjcmV0KCk6CiAgICB0b3RwID0gVE9UUCgKICAgICAgICBrZXk9Y29kZWNzLmVuY29kZShzdHJpbmcuYXNjaWlfbGV0dGVycywgZW5jb2Rpbmc9InV0Zi04IiksCiAgICAgICAgbGVuZ3RoPTgsCiAgICAgICAgYWxnb3JpdGhtPVNIQTEoKSwKICAgICAgICB0aW1lX3N0ZXA9T05FX1dFRUtfSU5fU0VDT05EUywKICAgICAgICBiYWNrZW5kPWRlZmF1bHRfYmFja2VuZCgpLAogICAgKQogICAgc2VlZCA9IGludCh0aW1lLnRpbWUoKSkKICAgIHRva2VuID0gY29kZWNzLmRlY29kZSh0b3RwLmdlbmVyYXRlKHNlZWQpLCBlbmNvZGluZz0idXRmLTgiKQogICAgcmV0dXJuIGYie3Rva2VufS17c2VlZH0iCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHN5cy5zdGRvdXQud3JpdGUoCiAgICAgICAgZiJQbGVhc2UgaGVhZCB0byBodHRwczovL3JhbXAuY29tL2NhcmVlcnMgYW5kIHVzZSB0aGlzIHNlY3JldCB3aGVuICIKICAgICAgICBmInlvdSBhcHBseToge2dlbmVyYXRlX3NlY3JldCgpfVxuIgogICAgKQoKCg== 其实看一下就知道这个应该是 Base 64 加密的,随便拉个工具用 Base64 解密下的结果是: #!/usr/bin/env python3 ''' Keep us out of google search results.. $ od -d /dev/urandom | head 0000000 60215 28778 29227 28548 62686 45171 7826 48766 0000020 17118 15225 12852 34781 31955 19087 39563 43614 0000040 6710 38515 14573 64087 17026 25598 42913 14209 0000060 10723 31307 19071 14798 2462 46253 35626 32436 0000100 1739 27712 5667 12212 47077 41722 54452 38461 0000120 4816 15014 28623 10928 54028 64523 54632 54187 0000140 61631 54499 18307 5514 50743 50591 25172 54018 0000160 31990 26248 4383 46452 42156 62320 51052 28621 0000200 27226 65296 56305 33375 4813 42283 19980 1922 0000220 57061 29322 27073 64986 15219 26234 24100 21204 ''' ''' Copy this file and run `pbpaste | base64` to generate challenge text. Copious white space is at the bottom of the file to ensure trailing `==` and hint at base64. ''' import codecs import string import sys import time from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.hashes import SHA1 from cryptography.hazmat.primitives.twofactor.totp import TOTP ONE_WEEK_IN_SECONDS = 604_800 def generate_secret(): totp = TOTP( key=codecs.encode(string.ascii_letters, encoding="utf-8"), length=8, algorithm=SHA1(), time_step=ONE_WEEK_IN_SECONDS, backend=default_backend(), ) seed = int(time.time()) token = codecs.decode(totp.generate(seed), encoding="utf-8") return f"{token}-{seed}" if __name__ == "__main__": sys.stdout.write( f"Please head to https://ramp.com/careers and use this secret when " f"you apply: {generate_secret()}\n" ) 上面的代码是 Python 的,然后你把上面的代码拷贝到你的计算机跑一下,应该可以看到下面的结果:     下面的字符串就是你在申请的时候需要填入的字符串了。 另外,你需要在你的 python 环境中安装 pip install cryptography 。     简单来说,就是上面的代码需要访问服务器,生成一个字符串,类似数据校验的意思。 这个还是在申请的时候第一次遇到,有点意思。   https://www.ossez.com/t/ramp/14586

2023年09月02日 0Comments 531Browse 0Like Read more
Computer Science

有点意思的 Java 递归调用

最近在刷一些问题的时候看到有下面一个问题     上面问的是当输入的字符串为什么的时候返回 True 总结 在做题目的时候,第一次还做错了。 这是因为解答这个题目的时间只有 3 分钟,没有自己看题目 后来拿着程序跑了下。 public void testGetPut() throws Exception { String text = "abcdef"; System.out.println(text.equals(alertText(text))); } private String alertText(String inputText) { if (StringUtils.isBlank(inputText)) return inputText; return inputText.charAt(inputText.length() - 1) + alertText(inputText.substring(0, inputText.length() - 1)); } 上面代码的运行结果如下:     如果仔细看这个问题就可以发现在子函数里面有一个递归调用。 这个可能是会比较困惑的地方。 这行代码 inputText.charAt(inputText.length() - 1) 将会返回你输入字符串的最后一个字符。 然后在使用 + 这个是 String 的字符串连接计算。 随后再递归调用了这个方法,可以看到递归调用输入的字符串为为上次使用的字符串,去掉最后一个字符的字符串。 然后在递归调用方法中又取得了最后一个字符。 通过上面的算法,我们会知道需要满足返回为 TRUE 的情况。 只有一种可能就是字符串应该需要对称排列。 所以答案应该是 :ab1221ba 只要满足对称排列就可以了,所以如果你输入:abc123321cba 这个也会返回 TRUE。 我说的对称是输入字符串从中间拆开,左右对称。 很遗憾的是,在这个题目的选择时候,我选错了。   https://www.ossez.com/t/java/14584

2023年09月01日 0Comments 464Browse 0Like Read more
Computer Science

Tomcat 部署时 war 和 war exploded区别

在 Tomcat 调试部署的时候,我们通常会看到有下面 2 个选项。     是选择war还是war exploded 这里首先看一下他们两个的区别: war 模式:将WEB工程以包的形式上传到服务器 ; war exploded 模式:将WEB工程以当前文件夹的位置关系上传到服务器; 简单点来说就是 Tomcat 的部署方式不一样。 我们都知道 Tomcat 对 war 包的部署是通过把 War 包解压成文件夹后进行部署的。 我们也知道,你可以把文件夹全部上传上去,Tomcat 也是可以运行的。 war exploded 模式就是把可以运行的文件夹中必要的内容全部上传上去,如果你本地文件夹文件修改了,文件也会进行同步。 很显然,如果你在开发一个 Tomcat 的 Web 应用的时候, war exploded 是你应该选择的模式。   https://www.ossez.com/t/tomcat-war-war-exploded/14571

2023年08月27日 0Comments 524Browse 0Like Read more
Computer Science

IntelliJ 中如何配置 Tomcat 调试

Tomcat 在 IntelliJ 中的配置要求首先你要下载 Tomcat。 设置服务器 在 IntelliJ 下面先选择 Run,然后选择配置运行配置。     在弹出的界面中,有一个编辑配置的选项。 然后在弹出的页面中选择添加。     选择 Tomcat 在弹出的添加页面中选择添加 Tomcat,你可以选择添加本地的,你也可以选择添加远程的。     如果你没有配置 Tomcat 的话,这里的选择是空白的,你可以选择配置来配置你本地 Tomcat 的路径,在这里我们已经配置好了。     针对界面中的 2 个配置选项,都选择相同的目录就好了。     对高版本的 Tomcat ,这 2 个选项没有区别。 部署项目 针对我们当前的项目,我们需要把我们的项目部署到 Tomcat 里面去。 选择 Deployment,然后选择项目下面的添加。     选择要部署的包,然后运行就可以了。     然后应用运行就可以了。   https://www.ossez.com/t/intellij-tomcat/14570

2023年08月27日 0Comments 468Browse 0Like Read more
Computer Science

运行命令出现错误 /bin/bash^M: bad interpreter: No such file or directory

在系统上运行一个 Linux 的命令的时候出现下面的错误信息: -bash: ./build.sh: /bin/bash^M: bad interpreter: No such file or directory     这个是在 Windows 作为 WSL 的时候出的错误。 原因和解决 出现问题的原因在于脚本在 Windows 中使用的回车换行和 Linux 使用的回车换行不一样。 如果你的代码是在 Windows 下被下载的话,那么在 WSL 上运行的时候就有可能会出现上面的问题。 解决办法就是打开 NodePad++ 然后对这脚本文件选择使用 LF 结尾的方式就可以了。     目前很多脚本都需要在 Linux 环境下运行,这个也可能是一些公司要求使用 MacOS 的原因吧,因为 MacOS 自带了 Linux,并且没有回车换行的问题。   https://www.ossez.com/t/bin-bash-m-bad-interpreter-no-such-file-or-directory/14568

2023年08月27日 0Comments 775Browse 0Like Read more
1…4344454647…237
Archives
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,367)
    • Confluence (663)
    • Gradle (12)
  • U.S. (512)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1