写点什么

ARTS 打卡(2020.06.29-2020.07.04)

用户头像
小王同学
关注
发布于: 2020 年 07 月 05 日



Algorithm:

leetcode 第6题

Z字形变换

思路:遍历字符填充即可

class Solution {
public String convert(String s, int numRows) {
if (numRows == 1) return s;
List<StringBuilder> list = new ArrayList<>();
for (int i = 0; i < Math.min(numRows, s.length()); i++) {
list.add(new StringBuilder());
}
int curRow = 0;
boolean b = false;
for (char c : s.toCharArray()) {
list.get(curRow).append(c);
if(curRow == 0 || curRow == numRows - 1) {
b = !b;
}
curRow += b ? 1 : -1;
}
StringBuilder ret = new StringBuilder();
for (StringBuilder row : list) ret.append(row);
return ret.toString();
}
}

leetcode第5题

整数反转

class Solution {
public int reverse(int x) {
if(x > Integer.MAX_VALUE) {
return 0;
}
if(x < Integer.MIN_VALUE) {
return 0;
}
long ys = 0L;
int shang = x / 10;
while (x != 0) {
ys = ys * 10 + x % 10;
if(ys > Integer.MAX_VALUE) {
return 0;
}
if(ys < Integer.MIN_VALUE) {
return 0;
}
x = shang;
shang /= 10;
}
return (int) ys;
}
}

Review:

https://dzone.com/articles/introduction-to-java-bytecode

文章开头阐述了为什么要了解字节码,字节码就相当于汇编,文章随后阐述了jvm内存技术架构,描述了jvm内存模型,PC register在每个线程栈中维护了下一条命令所在的行号。JVM stack 每个线程中都会维护一个栈,每个线程栈中存储了方法参数、局部变量、返回值。Heap 中存放了实例化的对象、数组,并且被所有线程所共享,也是被垃圾回收的区域。Method area 存储常量池、方法的代码、符号表(例如字段或方法的引用)信息。

随后文章以实例的方式介绍了java代码在jvm内部的运行原理,分别介绍了栈的运行方式、方法调用在jvm中是如何执行的、对象的创建过程以及通过字节码程序查看是否有关键逻辑。

Tip:

try-with-resources

实现了Colseable和AutoCloseable接口的资源对象都可以使用try-with-resources,当代码中资源较多时,我们不用担心因为自己的粗心而忘记写流关闭代码,close方法的调用顺序与try中资源声明的顺序相反。如果try和try-with-resources中同时抛出异常,抛出try 中的异常,抑制try-with-resources中的异常。

//demo
public static void writeToFileZipFileContents(String zipFileName, String outputFileName)
throws java.io.IOException {
java.nio.charset.Charset charset = java.nio.charset.Charset.forName("US-ASCII");
java.nio.file.Path outputFilePath = java.nio.file.Paths.get(outputFileName);
// Open zip file and create output file with try-with-resources statement
try (
java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName);
java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
) {
// Enumerate each entry
for (java.util.Enumeration entries = zf.entries(); entries.hasMoreElements();) {
// Get the entry name and write it to the output file
String newLine = System.getProperty("line.separator");
String zipEntryName = ((java.util.zip.ZipEntry)entries.nextElement()).getName() + newLine;
writer.write(zipEntryName, 0, zipEntryName.length());
}
}
}

Share:

什么是工程师文化

https://coolshell.cn/articles/17497.html



用户头像

小王同学

关注

还未添加个人签名 2019.03.04 加入

还未添加个人简介

评论

发布
暂无评论
ARTS打卡(2020.06.29-2020.07.04)