ARTS是什么? Algorithm:每周至少做一个LeetCode的算法题 Review:阅读并点评至少一篇英文技术文章 Tip:学习至少一个技术技巧,总结和归纳日常工作中遇到的知识点 Share:分享一篇有观点和思考的技术文章
Algorithm
完成leetcode算法第260题。
使用哈希表存储每个元素出现的次数,然后找出只出现一次的数据。
进阶解法:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?(待实现)
import java.util.Arrays;import java.util.HashMap;import java.util.Map;import java.util.Set;/*** 给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。* <p>* 进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?* <p>* 示例 1:* <p>* 输入:nums = [1,2,1,3,2,5]* 输出:[3,5]* 解释:[5, 3] 也是有效的答案。* 示例 2:* <p>* 输入:nums = [-1,0]* 输出:[-1,0]* 示例 3:* <p>* 输入:nums = [0,1]* 输出:[1,0]* 提示:* <p>* 2 <= nums.length <= 3 * 104* -231 <= nums[i] <= 231 - 1* 除两个只出现一次的整数外,nums 中的其他数字都出现两次*/public class SingleNumber260 {public static void main(String[] args) {SingleNumber260 example = new SingleNumber260();int[] nums = new int[]{1,2,1,3,2,5};System.out.println(Arrays.toString(example.singleNumber(nums)));nums = new int[]{-1,0};System.out.println(Arrays.toString(example.singleNumber(nums)));nums = new int[]{0,1};System.out.println(Arrays.toString(example.singleNumber(nums)));}public int[] singleNumber(int[] nums) {int[] res = new int[]{-1, -1};Map<Integer, Integer> storage = new HashMap<>();for (int num : nums) {if (storage.containsKey(num)) {storage.put(num, storage.get(num) + 1);} else {storage.put(num, 1);}}Set<Integer> keys = storage.keySet();for (Integer key : keys) {if (storage.get(key) == 1) {if (res[0] == -1) {res[0] = key;continue;}if (res[1] == -1) {res[1] = key;break;}}}return res;}}
Review
Java Enums: make your code clean.
使用枚举, 让代码更干净
文章介绍了什么是枚举;怎么使用枚举。并且通过在业务代码中通过和if else的比较说明了为什么枚举可以让代码变得更加干净。
其实枚举还有很多其他的用处,比如单例模式中可以使用枚举的不可变性去实现,这也是effective java中推荐的单例实现方式。其次,枚举可以让代码更加语义化,提高可读性。
Tip
- binlog的三种形式
- statement:记录原始的执行语句,优点是插入速度快;缺点是同一句sql在前后两次执行有可能会因为选错索引而导致执行结果不同
- row:记录sql语句修改的具体行,优点是不会存在数据不一致,可回滚数据;缺点是插入时间有可能会很长;由于现在数据的重要性大大提升,且随着技术的发展,性能和空间的重要性降低,这种格式的占比越来越高
- mixed:折中方案
- binlog中的xid:XID是用来联系bin log和redo log的。比如redo log里面有一个事务是prepare状态,但是不知道是不是commit状态,那就可以用XID去bin log里面查询该事务到底有没有提交。有提交则是commit状态,若没有提交则回滚该事务
- MySQL中双主结构中的循环复制:业务逻辑在节点 A 上更新了一条语句,然后再把生成的 binlog 发给节点 B,节点 B 执行完这条更新语句后也会生成 binlog。那么,如果节点 A 同时是节点 B 的备库,相当于又把节点 B 新生成的 binlog 拿过来执行了一次,然后节点 A 和 B 间,会不断地循环执行这个更新语句。
Share
写文章 - windows环境下docker安装MySQLFinish
预计完成时间:2021.10.25 ~ 2021.10.31
实际完成时间:2021.10.31
