扫一扫
关注公众号
ARTS的初衷
Algorithm: 主要是为了编程训练和学习。
Review:主要是为了学习英文
Tip:主要是为了总结和归纳在是常工作中所遇到的知识点。学习至少一个技术技巧。在工作中遇到的问题,踩过的坑,学习的点滴知识。
Share:主要是为了建立影响力,能够输出价值观。分享一篇有观点和思考的技术文章
https://www.zhihu.com/question/301150832
3sum题
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
The solution set must not contain duplicate triplets.
Example:
Given array nums = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
int left = 0;
int right = nums.length-1;
List<List<Integer>> res = new ArrayList();
for(int i=0;i<nums.length;i++) {
if(i>0 && nums[i]==nums[i-1]) continue;
left = i+1;
right = nums.length-1;
while(left<right) {
int s = nums[i]+nums[left]+nums[right];
if(s>0) {
right--;
} else if(s<0) {
left++;
} else{
List<Integer> tmp = new ArrayList();
tmp.add(nums[i]);
tmp.add(nums[left]);
tmp.add(nums[right]);
res.add(tmp);
left++;
right--;
while(left<right && nums[left]==nums[left-1]) {
left++;
}
while(left<right && nums[right]==nums[right+1]) {
right--;
}
}
}
}
return res;
}
}
https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Heres-how-to-get-by-without-Concurrent-Mark-Sweep
目前最流行的并发标记清除GC算法CMS(初始标记-并发标记-并发预清理-重新标记-并发清理-并发重置)将在JAVA9中被标记为deprecated,不过我们有更好的两个选择,从JAVA9开始默认的G1 GC算法和JAVA11开始支持的Z GC算法。G1另外优化了对重复String对象在内存中的计算,Z算法则是在垃圾回收时有较好的停顿时间(pause times less than 10ms)
总体来说,G1跟CMS一样,是一个低延时的收集器,同样牺牲了吞吐量,不过二者之间得到了很好的权衡。G1与CMS对比有以下不同点:
(1)、分代:CMS中,堆被分为PermGen、YoungGen、OldGen,而YoungGen又分了两个survivo区域。在G1中,堆被平均分成几个区域,在每个区域中,虽然也保留了新老代的概念,逻辑划分,但是收集器是以整个区域为单位收集的
(2)、算法:相对于CMS的”标记-清理”算法,G1会使用压缩算法,保证不产生多余的碎片,收集阶段,G1会将某个区域存活的对象拷贝到其他区域,然后将整个区域回收
(3)、停顿时间可控:为了缩短停顿时间,G1建立可预测停顿模型,这样在用户设置的停顿时间范围内,G1会选择适当的区域进行收集,确保停顿时间不超过用户指定时间
不过我觉得应该综合考虑内存碎片、平均停顿时间和吞吐量选择合适的GC算法,当然再结合一定的性能调优更好啦。
本周跟进了物理机容量层次视图,涉及到j-one发布系统和IDC系统接口、Cmdb的改造,和运维的手工录入操作,整体进展不够快,后面还是能尽快Close掉的需求不要拖到下周吧。