ARTS第七周

11 篇文章 0 订阅

ARTS是什么?

Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Techni:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。


Algorithm

题目描述   给定一个已经从小到大排好序的整型数组,找到其中的两个数,使它们的和等于给定的目标值。函数 twoSum 应返回两个数的索引,以便它们加起来等于目标值,其中 index1 必须小于 index2。

Note:

  • Your returned answers (both index1 and index2) are not zero-based.

  • You may assume that each input would have exactly one solution and you may not use the same element twice.

Example

  • Input: numbers = [2,7,11,15], target = 9
  • Output: [1,2]
  • Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2.

解答

使用双指针来解决,其中一个指针从头到尾开始遍历,指向值较小的值;另一个指针从尾到头开始遍历,指向值较大的值。

  • 两个指针所指向元素之和 sum 等于给定值 target,即为所求
  • 两个指针指向元素之和 sum 大于给定值 target,则向前移动较大元素,使 sum 减小一些
  • 两个指针指向元素之和 sum 小于给定值 target,则向后移动较小元素,使 sum 变大一些
class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int i = 0;
        int j = numbers.length - 1;
        while (i < j) {
            int sum = numbers[i] + numbers[j];
            if (sum == target) {
                return new int[] {i + 1, j + 1};
            } else if (sum > target) {
                j --;
            } else {
                i ++;
            }
        }
        return null;
    }
}

Review

分享一篇 Meduim 上关于学习新技术、编程语言和框架的方法论的文章《2019 年学习新技术、编程语言、框架或类库的十种方法》。这篇文章开门见山,一针见血地指出了成为一个程序员或者软件工程师最大的挑战就是要坚持持续不断地学习,日复一日甚至是年复一年。同时,作为一个程序员必须是一个快速学习者,毕竟技术的更新换代太快了,如果不具备持续学习、快速学习的能力,在编程这行很容易就被淘汰了,所以如果不能坚持持续学习和学会快速学习,那么如作者所言,可能不适合这行。

那么,对于已经入行或者想要进入这行的人来说,2019 年想要更好地学习新技术、编程语言、框架或类库的十种方法是什么呢?

  • 参加在线课程

根据 StackOverFlow 2017 年的开发者调查,高达64.7%的人表示他们通过参加在线课程学习了编程或新技术。很显然,通过在线课程学习新技术或是编程是一个不错的途径和方法。

  • 买书学习并完成相应的练习

很多人入门都是通过视频或者是技术书籍,看书确实是一个非常不错的方法,有些技术书籍上面都会配套相应的练习,选一本或几本合适的书籍来学习并完成书中的练习,理论与实践相结合不失为一个好办法。

  • 兼职、晚间课程(线下课程)

说实话,没有什么比现场课堂学习效果更好,甚至于虚拟课程或在线培训也没有这样的效果。为什么呢?因为参加一个线下的课程,你会遇到真正的学习者,会进入有利于学习的环境,与他们切磋、讨论问题,聆听别人的想法,这意味着你将会眼观六路耳听八方,全方位地投入到学习当中,这往往是很高效的。

  • 参与开源

对于那些有了一定的技术和经验的程序员来说,如果想要保持不断刷新自我、与时俱进,参与开源是最好的一种方法之一。参与开源地过程中,如果有丰富的经验,并且在途中不断学习新技术,不仅可以通过贡献来帮助社区,而且这也是与其他伟大的程序员进行交流和合作来增加体验的好方法。

  • 编程训练营

参加在线课程和编程新手训练营让很多几乎没有编程经验的初学者可以更容易地过渡到开发生涯中。正所谓代码,唯手熟。参加编程训练营意味着更多的实践和练习。

  • 参加在线编程比赛

参加比赛往往意味着要走出自己的舒适区,你需要不断地练习和准备,在不断的编程比赛中,你不仅可以快速学习很多基本概念,还可以提高编码意识并获得实际的编码体验。

  • 参加一些开发者线下会议

参加一些线下的开发者会议,本质上是与一些志同道合的开发人员会面,同他们交谈往往会刷新自己的认知,开阔眼界,而不应只是埋头编码。与优秀的开发人员思维碰撞,往往会碰撞出绚烂的火花,所以适当参加一些线下的开发者会议或聚会是有好处的。

  • 参加黑客马拉松

黑客马拉松也是一种快速学习新框架或库的好方法。在黑客马拉松中,你需要在 24 到 48 小时内构建一些有用的东西。

比如,如果你想使用机器学习算法来构建原型,如图像处理应用程序,那么在黑客马拉松之前你需要先学习了解机器学习。

  • 创建一个博客

写博客当然是一种非常好的学习编程语言或框架的好方法了,将平时的输入经过自己的学习和总结输出文字,写成博客,在学习的金字塔里面,这是非常值得提倡的。

当你要写博客的时候,也就是当你要输出的时候,那就意味着要不断地输入,所以在你要写一篇博客的时候,你要写什么内容,你就会在写之前花时间去研究、去学习,倒逼自己不断地输入,然后转化为自己的输出。

  • 多种方法相辅相成、融会贯通

这就有点像我们常说的先精后通,先把某一项技术、某一门语言吃透,然后再一专多通。学习新技术、新语言也一样,方法很多,但是适合每个人的学习方法却不尽相同,有些人喜欢看书的方式学习,而有些人则喜欢看视频的方式来学习,也有些人喜欢通过线下课程或是在线课程的方式来学习。所以,不必死套方法,适合别人的方法不一定适合你,同样,适合你的方法也不一定适合其他人。要学会选择一种或多种适合自己的方法来学习,将自己的效率最大化地得到发挥。


Tip/Techni

工作中要求安全第一,这点与学生时代有着很大的不同。在学校的时候写代码很多时候都不太注意,也没那么多的安全意识,所以很多时候在做项目学习时,从数据库中取出数据之后没有想那么多,没有有一些判断再使用数据,一方面说明了在学校的时候缺乏项目经验,另一方面说明了工作中很多时候技术倒不是难,但是要注意细节,要细心。所以这次就简单记录下在项目中犯的愚蠢的错误,比较低级,也很初级,简单记录下几点。

  • 查询数据库取数据之后,要先做判空操作。比如 Map<String, Object> map = this.popupDAL.queryWarning(appCode);(DAL 是数据访问层)取到数据之后,要对 map 做判空操作,要使用 map 中的 Object 对象之前也要先做判空操作再使用,不然如果数据库中相应的字段不存在直接使用极大可能是会报异常的。
if (StringHelper.IsEmptyOrNull(popupMap) || popupMap.size() == 0) {
	...
}
//假设要使用 map 中的一个Object类型对象叫 helloworld,则先判空,不能直接就取过来直接 toString()
String limitTime = map.get("helloworld") == null ? null : map.get("helloworld").toString(); 
  • equals() 和 ==,通常测试两个变量是否相相等时有两种方式,一种是利用 == 运算符,另一种是利用 equals() 方法。如果两个变量都是基本类型变量,且都是数值类型(不一定要求数据类型严格相同),只要两个变量的值相等,则返回 true。而对于引用类型变量,只有它们指向同一对象时,== 判断才会返回 true,并且 == 不可用于比较类型上没有父子关系的两个对象,如 System.out.println("hello" == new EqualTest) 会导致编译错误,因为 java.lang.String 与 EqualTest 类没有继承关系。
    【注】使用 equals() 方法对两个字符串进行比较时,尽量将字符串固定值放前面,比如 “hello”.equals(x); 这样即使 x 为 null 也不会报错,只会返回 false,因为对于任何不是 null 的 y,y.equals(null) 一定返回 false,但是,如果反过来 x.equals(“hello”),如果 x 为 null 则会报错。

Share

这次不分享英文文章,分享一篇耗子叔的文章《我看绩效考核》。这篇文章很用心地看完了,今年也是我刚毕业进入职场的第一年,读完这篇文章深有感触。文中有一句话说得特别好:用一颗平常心来面对公司给你打的分数,因为那并不代表你的整个人生。但是,你要用一颗非常严肃的心来面对自己的个人发展和成长,因为这才是真正需要认真对待的事。

换句话说,如果要给一个人打绩效分,那不是由一个公司在一个短期的时间时打出来,而是由这个人在一个长期的时间里所能达到的成就得出来的。所以,在职场中,我们要更多地关注自己的发展,对于公司的绩效考核,平常心对待即可,问心无愧就行,不必过多关注,为此忧心忡忡,耗费太多精力是很不值得的,这样会让自己的时间变得很廉价。

退一万步讲,就算你尽力了,问心无愧了,但你所做的努力不被领导看在眼里,绩效考核给你打了低分那又如何呢?我们大多会关心绩效考核低会影响到,但要真如此,你计较也没用,要及时止损,不要为打翻的牛奶哭泣。经济学中有个词叫沉没成本,强调要学会及时止损。

所以,最正确地做法就是做正确的事情,等着被开除。无论什么时候,提升自己才是最重要的,能力上来了说话才会更加硬气。这样,在你努力付出,为团队做了突出贡献却不被领导看在眼里,绩效考核不高的时候才可以更加硬气地离开,才有说走就走的能力和勇气。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值