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

Algorithm

完成leetcode算法第367题。
使用二分法求解
牛顿迭代法要求的知识太多且和二分法的时间复杂度、空间复杂度一致,所以不去了解了。

  1. /**
  2. * 给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
  3. *
  4. * 进阶:不要 使用任何内置的库函数,如 sqrt 。
  5. * 示例 1:
  6. * 输入:num = 16
  7. * 输出:true
  8. *
  9. * 示例 2:
  10. * 输入:num = 14
  11. * 输出:false
  12. *
  13. * 提示:
  14. * 1 <= num <= 2^31 - 1
  15. * @author ouyb01
  16. * @date 2021/11/4 17:32
  17. */
  18. public class IsPerfectSquare367 {
  19. public static void main(String[] args) {
  20. IsPerfectSquare367 example = new IsPerfectSquare367();
  21. System.out.println(example.isPerfectSquare(16));
  22. System.out.println(example.isPerfectSquare(20));
  23. }
  24. public boolean isPerfectSquare(int num) {
  25. int start = 0;
  26. int end = num;
  27. while (start <= end) {
  28. // 取代 (end + start) / 2, 防止start + end过大造成溢出
  29. int mid = (end - start) / 2 + start;
  30. long square = (long) mid * mid;
  31. if (square == num) {
  32. return true;
  33. } else if (square < num) {
  34. start = mid + 1;
  35. } else {
  36. end = mid - 1;
  37. }
  38. }
  39. return false;
  40. }
  41. }

Review

Hibernate: Improving application performance with StatelessSession
使用 StatelessSession 提高应用程序性能 ,sessionFactory.openStatelessSession();
好处主要在以下几方面:

  1. 不在Hibernate上下文(一级缓存)上存储对象
  2. 没有进行脏检查
  3. Hibernate 的事件模型和拦截器不起作用

    Tip

  4. MySQL delete 全表是很慢的,因为它需要生成回滚日志、写binlog和redolog。所以从性能考虑可以优先使用truncate table或drop table(但是这俩操作无法通过Flashback恢复)

  5. 预防误删库/表的方法
    1. 账号分离
      1. 业务开发只分配DML权限
      2. DBA成员日常只是用只读账号,必要时才使用有更新权限账号
    2. 指定操作规范
      1. 删除数据表之前先对表做gaming操作。观察一段时间确保对业务无影响后,在删除这张表
      2. 改表名时,要求给表名加固定的后缀(例如_to_be_deleted),然后删除表的动作必须通过管理系统执行。并且,管理系统删除表的时候,只能删除固定后缀的表

Share

如何优雅地记录操作日志?
最近排查线上问题的时候,由于使用了其他团队的能力。将这部分代码接入的时候能够完成功能,但是出问题的时候发现,要么没有日志,要么日志体现不了关键信息,没有给排查问题提供有效的帮助,这篇文章能够帮助我们理解各类日志的不同以及他们打印日志的方式。

Finish

预计完成时间:2021.11.01 ~ 2021.11.07
实际完成时间:2021.11.08,EDG牛逼!