ARTS 第一周

ARTS定义

 

  1. Algorithm:每周至少做一个 leetcode 的算法题。主要是为了编程训练和学习,进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练;
  2. Review:主要是为了学习英文,英文不行,基本上无缘技术高手。所以,坚持阅读并点评至少一篇英文技术文章。
  3. Tip:主要是为了总结和归纳你在是常工作中所遇到的知识点。学习至少一个技术技巧。你在工作中遇到的问题,踩过的坑,学习的点滴知识;
  4. Share:分享一篇有观点和思考的技术文章。主要是为了建立你的影响力,能够输出价值观。

ARTS 高效学习需要按周去做,需要持续地坚持下去,这样可以让我们不断去反思、总结、归纳,以便让自己更高效地学习,同时也能让我们更加自律。

Algorithm:冒泡排序

定义

一种简单的排序算法。核心是重复的访问要排序的数列,一次比较两个元素,如果顺序错误就把它们交换过来,直到没有再需要交换,即排序完成。名字的由来是因为越小的元素经由交换慢慢的“浮”到数列的顶端。

描述

  1. 比较相邻元素,如果第一个比第二个大,就交换它们的位置;
  2. 对每一对相邻元素作同意的工作,从开始第一对到结尾最后一对,这样在最后的元素应该会是最大的数;
  3. 针对所有的元素重复以上步骤,除了最后一个;
  4. 重复以上步骤,知道排序完成;

复杂度

1)如果数据正序,只需要1次排序即可,所需的比较次数C和记录移动次数M均达到最小值,即:Cmin = n - 1;Mmin = 0,所以时间复杂度炜O(n);

2)如果数据反序,则需要n-1次排序,每次排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换位置,这种情况下,比较和移动次数均达到最大值:Cmax =  = O(n2),Mmin =  = O(n2)

综上所述,冒泡排序总的时间复杂度为O(n2)

实现

public class WeekOne {
    /**
     * 冒泡排序
     * @param sortArr
     * @return
     */
    public static Integer[] bubbleSort(Integer[] sortArr) {
        if(Objects.nonNull(sortArr) && sortArr.length > 1) {
            //外层循环控制排序趟数
            for (int i = 0; i < sortArr.length - 1; i++) {
                //内层循环控制每一趟排序多少次
                for(int j = 0; j < sortArr.length - i - 1; j++) {
                    if(sortArr[j] > sortArr[j + 1]) {
                        Integer tmp = sortArr[j + 1];
                        sortArr[j + 1] = sortArr[j];
                        sortArr[j] = tmp;
                    }
                }
            }
        }
        return sortArr;
    }
    public static void main(String[] args) {
        Integer[] sortArr = {5,4,6,3,2,1};
        sortArr = bubbleSort(sortArr);
        for(int i = 0; i < sortArr.length; i++) {
            System.out.println(sortArr[i]);
        }
    }
}

Review:Spring Data JPA

原文

Spring Data JPA, part of the larger Spring Data family, makes it easy to easily implement JPA based repositories. This module deals with enhanced support for JPA based data access layers. It makes it easier to build Spring-powered applications that use data access technologies.

Implementing a data access layer of an application has been cumbersome for quite a while. Too much boilerplate code has to be written to execute simple queries as well as perform pagination, and auditing. Spring Data JPA aims to significantly improve the implementation of data access layers by reducing the effort to the amount that’s actually needed. As a developer you write your repository interfaces, including custom finder methods, and Spring will provide the implementation automatically.

译文

Spring Data JPA是Spring Data较大的一部分,能够轻松实现基于JPA的存储库。该模块基于JPA数据访问层进行增强处理。使用数据访问技术更容易构建spring支持的应用。

应用程序实现数据访问层有一段相当麻烦的过程。执行简单查询和执行分页以及审核,需要编写太多样本代码。Spring Data JPA的目标是将工作量减少到实际需要的数量来显著改善数据访问层的实现。开发者只要编写存储库接口,自定义finder方法,spring自动提供实现。

Tip:JDK排序

// 使用 java 7 排序
public void sortJava7(List<String> list) {
    Collections.sort(list, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.compareTo(o2);
        }
    });
}

// 使用 java 8 排序
public void sortJava8(List<String> list) {
    Collections.sort(list, (s1, s2) -> s1.compareTo(s2));
}

Share:技术变现

参考极客时间左耳听风的技术变现

概述

写程序是一门“手艺活儿”,那么作为手艺人,程序员当然可以做到靠自己的手艺和技能养活自己。

很多手艺人程序员却说自己是“码农”,编码的农民工,在工作上被各种使唤,各种加班,累得像个牲口。在职业发展上各种迷茫和彷徨,完全看不到未来的希望,更别说可以成为一个手艺人用自己的技能变现了

方法论

培养意识:没有必要通过打工听人安排而活着,而是反过来通过在公司工作提高自己的技能,让自己可以更为独立和自由地生活。

作业理论:在工作中,对于那些没什么技术含量的工作,就要学生时代那样交作业就好了。想尽一切方法提高交作业的效率,比如,提高代码的重用度,能自动化的就自动化,和需求人员谈需求,简化掉需求尽量节省自己的时间。

时间利用:去研究公司里外那些更为核心更有技术含量的技术去经历大多数人经历不到的,要把学习时间花在那些比较难的地方要写文章而且要写没有人写过的,或是别人写过,但我能写得更好的。

意识形态:技术和知识完全是可以变现的。

精简方式:接收企业内训,拒绝私活。企业内训,可以走到内部去了解各个企业在做的事和他们遇到的技术痛点,以及身在其中的工程师的想法提升对社会的了解和认识,而且还能提升语言组织和表达能力。拒绝死活,主要是因为这些私活基本上都是功能性的开发,从中无法得到成长而且后期会有很多维护工作,虽然一个小项目可以挣十几万,但为此花费的时间都是人生中最宝贵的时光,得不偿失。

时光刀刃:一是把时间投在一些主流、高级和比较有挑战性的技术上从而保持技术和技能的领先,保持对技术本质和趋势的敏感度;二是把一些价值观和思考记录下来并发布,吸引很多不同的思路在其中交织讨论无论褒贬,都是扩宽自己的思路。

经典案例:某个公司需要做一个高并发方案,大概需要 2000 万 QPS,但是他们只能实现到 1200 万 QPS 左右。花了两天时间做调研,分析性能原因,然后一天写了 700 多行代码。因为不想进入业务,所以我主要是优化了网络数据传输,让数据包尽量小,确保一个请求的响应在一个 MTU(Maximum Transmission Unit,最大传输单元) 内就传完。测试的时候,达到了 2500 万 QPS。于是老板给了 20 万。所以并不是社会不尊重程序员,只要你能帮上大忙,就一定会赢得别人的尊重。

变现步骤

  1. 千里之行,积于跬步。任何一件成功的大事,都是通过一个一个的小成功达到的。所以,你得确保你有一个一个的小成功。具体说来,首先,你得让自己身边的人有求于你,或是向别人推荐你。这就需要你能够掌握大多数人不能掌握的技能或技术,需要你更多地学习,并要有更多的别人没有的经验和经历。一旦你身边的人开始有求于你,或是向别人推荐你,你就会被外部的人注意到,于是其他人就会付费来获取你的帮助。而一旦你的帮忙对别人来说有效果,那就会产生效益,无论是经济效益还是社会效益,都会为你开拓更大的空间。
  2. 关注有价值的东西。什么是有价值的东西?价值其实是受供需关系影响的,供大于求,就没什么价值,供不应求,就有价值。这意味着你不仅要看到市场,还要看到技术的趋势,能够分辨出什么是主流技术,什么是过渡式的技术。要看清技术趋势,你需要了解历史,就像一个球运动一样,你要知道这个球未来运动的地方,是需要观察球的已经完成运动的轨迹才知道的。因此,了解技术发展轨迹是一件很重要的事。要看一个新的技术是否顺应技术发展趋势,你需要将一些老技术的本质吃得很透。因此,在学习技术的过程一定要多问自己两个问题:“一,这个技术解决什么问题?为什么别的同类技术做不到?二,为什么是这样解决的?有没有更好的方式?”另外,还有一个简单的判断方法,如果一个新的技术顺应技术发展趋势,那么在这个新的技术出现时,后面一定会有大型的商业公司支持,这类公司支持得越多,就说明你越需要关注。
  3. 找到能体现价值的地方。在一家高速发展的公司中,技术人员的价值可以达到最大化。比较好的成长路径是,先进入大公司学习大公司的技术和成功的经验方法,然后再找到高速成长的公司,这样你就可以实现自己更多的价值。当然,这里并不排除在大公司中找到高速发展的业务。
  4. 动手能力很重要。写代码能力强,可以称为手艺人,如果写的代码无bug,则可称为艺术家。动手能力很重要,因为在解决任何一个具体问题的时候,有没有动手能力就成为了关键。这也是一直在写代码的原因,代码里全是细节,细节是魔鬼,只有了解了细节,你才能提出更好或是更靠谱、可以落地的解决方案。而不是一些笼统和模糊的东西。这太重要了。
  5. 关注技术付费点。技术付费点基本体现在两个地方,一个是,能帮别人“挣钱”的地方;另一个是,能帮别人“省钱”的地方。也就是说,能够帮助别人更流畅地挣钱,或是能够帮助别人提高效率,能节省更多的成本,越直接越好。而且这个技术或解决方案最好还是大多数人做不到的。
  6. 提升自己的能力和经历。付费的前提是信任,只有你提升自己的能力和经历后,别人才会对你有一定的信任,才会觉得你靠谱,才会给你机会。而这个信任需要用你的能力和经历来填补。比如,你是一个很知名的开源软件的核心开发人员,或是你是某知名公司核心项目的核心开发人员,等等。
  7. 找到有价值的信息源。信息社会,如果你比别人有更好的信息源,那么你就可以比别人成长得更快。对于技术人员来说,我们知道,几乎所有的技术都源自西方世界,所以,你应该走到信息的源头去。如果你的信息来自朋友圈、微博、知乎、百度或是今日头条,那么我觉得你完蛋了。因为这些渠道有价值的信息不多,有营养的可能只有 1%,而为了这 1%,你需要读完 99% 的信息,太不划算了。那么如何找到这些信息源呢?用好 Google就是一个关键,比如你在 Google 搜索引擎里输入“XXX Best Practice”,或是“Best programming resource”……你就会找到很多。而用好这个更好的信息源需要你的英文能力,因此不断提升英文能力很关键。
  8. 输出观点和价值观。真正伟大的公司或是产品都是要输出价值观的。只有输出了更先进的价值观,才会获得真正的影响力。但是,你要能输出观点和价值观,并不是一件容易的事,这需要你的积累和经历,而不是一朝之功。因此,如果想要让你的技能变现,这本质上是一个厚积薄发的过程。
  9. 朋友圈很重要。一个人的朋友圈很重要,你在什么样的朋友圈,就会被什么样的朋友圈所影响。如果你的朋友圈比较优质,那么给你介绍过来的事儿和活儿也会好一些。优质的朋友圈基本上都有这样的特性。这些人都比较有想法、有观点,经验也比较丰富;这些人涉猎的面比较广;这些人都有或多或少的成功;这些人都是喜欢折腾喜欢搞事的人;这些人都对现状有些不满,并想做一些改变;这些人都有一定的影响力。最后有个关键的问题是,物以类聚,人以群分。如果你不做到这些,你怎么能进入到这样的朋友圈呢?
  10. 总之,就一句话,会挣钱的人一定是会投资的人。我一直认为,最宝贵的财富并不是钱,而是你的时间,时间比钱更宝贵,因为钱你不用还在那里,而时间你不用就浪费掉了。你把你的时间投资在哪些地方,就意味着你未来会走什么样的路。所以,利用好你的时间,投到一些有意义的地方吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手心脈动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值