what?什么是ARTS
- Algorithm:每周至少做一个leetcode的算法题;
- Review:阅读并点评至少一篇英文技术文章;
- Tip/Techni:学习至少一个技术技巧;
- Share:分享一篇有观点和思考的技术文章;
Algorithm 每周至少做一个leetcode的算法题
两数之和
详细可以看链接:https://leetcode-cn.com/problems/two-sum/description/
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
以下是我的解答:
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
int length = nums.length;
for (int i = 0; i < length; i++) {
for (int j = (i + 1); j < length; j++) {
int temp = nums[i] + nums[j];
if (temp == target) {
result[0] = i;
result[1] = j;
return result;
}
}
}
return result;
}
}
可惜我的解答不是很好,只能算是解决这个问题,但是结果不是算好的,还有很大的优化的空间。 这里的优化的思路就是用哈希表(散列表)这个数据结构。 把数组中的值(nums[index])作为key,下标(index)作为value,这样在每次获取一个值的时候,去算(target-nums[i])这个值是否散列表中。这题很经典,有很好的解答思路,具体的可以做完题之后看解答的思路,如果没有去做题的话,单单看这个消化也是不容易。
Review 阅读并点评至少一篇英文技术文章
这周读的是篇老文章 2014年的关于的微服务的文章,当时微服务不像现在这么火,现在因为出现了像SpringBoot这样的框架,让开发人员更加方便的搭建微服务,因为方便实行,自然而然这个思想就深入人心了。这 篇文章里面写了一些关于微服务的简单的思考,作者通过一些搜索研究,把微服务的优点梳理了一下,各个系统间靠着REST互相通信,独立部署,就算一个系统挂了,不会影响别的系统的运行,想办法重启就好,你可以用自己喜欢的语言,用自己的数据库,只要你把别的系统想要的数据正常返回给他们就好,简而言之就是自由。但是作者在最后也提出了一思考:(有点没明白,这里直接贴出来吧)
Don’t leap into microservices just because it sounds cool. Segregate the system into jars using a plugin architecture first. If that’s not sufficient, then consider introducing service boundaries at strategic points.
Tip/Techni:学习至少一个技术技巧;
这周主要关于算法的,写了些二分查找的一些代码,看《图解算法》来个轻松的开始。
Share:分享一篇有观点和思考的技术文章;
这篇文章讲了为啥在程序里你可以建100万个的Go的线程,但是只能建1000个Java线程。(数字范围不准确,就是个大概的级别) 简而言之和内存的占用有关系,具体的可以自己看看。 在Java语言即将开始收费的时候,多学习一门语言不是坏事,Android的官方语言都不再是Java了,我们是不是也要在空闲时间来拥抱新的语言了呢?