ARTS是什么? Algorithm:每周至少做一个LeetCode的算法题 Review:阅读并点评至少一篇英文技术文章 Tip:学习至少一个技术技巧,总结和归纳日常工作中遇到的知识点 Share:分享一篇有观点和思考的技术文章

Algorithm

完成leetcode算法第720题。

使用暴力匹配的方式完成。
todo:由于涉及到字符串的前缀,通常可以使用 trie(前缀树)来解决。

  1. String ans = "";
  2. Set<String> wordSet = new HashSet<>();
  3. wordSet.addAll(Arrays.asList(words));
  4. for (String word: words) {
  5. if (word.length() > ans.length() ||
  6. word.length() == ans.length() && word.compareTo(ans) < 0) {
  7. boolean good = true;
  8. for (int k = 1; k < word.length(); ++k) {
  9. if (!wordSet.contains(word.substring(0, k))) {
  10. good = false;
  11. break;
  12. }
  13. }
  14. if (good) {
  15. ans = word;
  16. }
  17. }
  18. }
  19. return ans;

Review

Text Blocks In Java 15
文章介绍了Java15中的Text Blocks功能,它优化了在java代码中String换行后的展示效果,比如一个复杂的sql的前后效果如下

  1. String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" +
  2. "WHERE `CITY` = 'INDIANAPOLIS'\n" +
  3. "ORDER BY `EMP_ID`, `LAST_NAME`;\n";
  4. // Text Blocks
  5. String query = """
  6. SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
  7. WHERE `CITY` = 'INDIANAPOLIS'
  8. ORDER BY `EMP_ID`, `LAST_NAME`;
  9. """;

从代码块中可以看出,展示效果更好。

Tip

  1. 关于MySQL set autocommit=0的小实验,MySQL的隔离级别为”可重复读”,

set global autocommit=off,然后启动两个客户端
然后A客户端执行更新操作
image.png
B客户端查询
image.png
由于A端没有commit,所以B端看不到修改,正常。
image.png
然后A端commit后,B端还是查询不到更新后的数据。这时候我发现B端只要commit了,就可以正常拿到数据了,由此可见,在B端第一次select后就开启了一次事务a,虽然A端commit了,但是在事务a中还是会拿到旧数据,只有commit结束事务a后,才能拿到最新的数据。
这说明两点:

  1. MySQL的每个操作都会开启事务
  2. set autocommit=0后,必须手动commit或rollback才能结束当前事务,否则后续的操作都在当前事务中

    Share

    写文章 - MySQL日志篇 — redo log

    Finish

    预计完成时间:2021.09.27 ~ 2021.10.03
    实际完成时间:2021.10.06
    延期原因:国庆假期,处理其他事情[

](https://www.yuque.com/yigenranshaodexiongmao/fgx0oh/zp62pn)