ARTS 第十一周

11 篇文章 0 订阅

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


Algorothm

这周算法主要刷了两道双指针的题目,分别是有序数组的 Two Sum两数平方和
1、有序数组的 Two Sum Leetcode :

leetcode 上的地址是 : 167. Two Sum II - Input array is sorted

这道题之前刷过,就当作重新回顾了一遍 : 有序数组的 Two Sum

2、两数平方和 : 判断一个数是否为两个数的平方和。

leetcode 上的地址是 : 633. Sum of Square Numbers

解题思路 : 使用双指针,一个指向值较小的元素,一个指向值较大的元素。较小的元素从的指针从头开始遍历,较大元素的指针从尾向头遍历。

  • 两个指针指向元素的平方和 powSum == c , 则即为所求;
  • 如果 powSum > c, 则向前移动较大元素的指针,使 powSum 变小;
  • 如果 powSum < c, 则向后移动较小元素的指针,使 powSum 变大。
    class Solution {
        public boolean judgeSquareSum(int c) {
            int i = 0;
            int j = (int) Math.sqrt(c);
            while (i <= j) {
                int powSum = i * i + j * j;
                if (powSum == c) {
                    return true;
                } else if (powSum > c) {
                    j--;
                } else {
                    i++;
                }
            }
            return false;
        }
    }

Review

What’s in a Name: Java Naming Conventions》这是 DZone 上的一篇文章,是关于 Java 中的一些命名约定。其中提到的大致如下:

Package

  • 基本名称应该以相反的顺序包含公司的域名,加上没有任何额外字符的项目名称,并且要求全部均为小写字母。当然也可以添加版本名称,示例如下:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190610140831805.png

Class

  • 类名必须为名词,可以使用驼峰形式来表示,但是第一个单词首字母一定要大写。并且应该要相对明确告诉使用者有哪些功能或变量,同时必须专门说明(在接口中说明)。示例如下:
    在这里插入图片描述

Interface

  • 接口名称必须是形容词,有时可以是名词,比如 ListMap。另外,接口必须是驼峰形式,但是第一个单词的首字母要大写。示例如下:
    在这里插入图片描述

Variables or Fields

  • 全局变量或者局部变量必须是名词,简短,有意义,并且应该明确是什么作用,应该用于什么类型。全局变量和局部变量应该用驼峰形式表示,但首字母要小写
  • 不要以 ‘_’ 或者 ‘$’ 等符号开头命名
  • 对于 boolean 类型的字段,应该要以 ishas 开头来命名
    在这里插入图片描述

Methods or Functions

  • 方法应该要是一个动词
  • 方法命名要用驼峰形式,但首字母要小写
  • 通常,get和set用于分别获取和设置数据(setter和getter)
    在这里插入图片描述

Generics

  • 最好使用单个大写字符
  • 通常,使用 T 来表示,也可以使用 V
  • Java 一般使用 E 作为列表元素,K 和 V 作为映射,使用 S 作为服务加载器
  • 不要使用多字符
    在这里插入图片描述

枚举类型&注解

  • 枚举和注解分别类似于类和接口
  • 在枚举字段中,必须都是大写的,因为默认情况下它们是最终静态的
    在这里插入图片描述

Tip/Techni

分享几个 Linux 的小 tip,来自耗子叔在酷壳上的一篇文章《应该知道的LINUX技巧》,文中首先说明了在Unix/Linux下,最有效率技巧的不是操作图形界面,而是命令行操作,因为命令行意味着自动化。文章从几个方面来分享了一些小技巧: 基础,日常和数据处理以及系统调试。比如:

基础

  • 学习 Bash
  • 学习 vim
  • 了解 ssh ,明白不需要口令的用户认证(通过ssh-agent, ssh-add),用scp而不是ftp传文件,等等。
  • 熟悉bash的作业管理,如: &, Ctrl-Z, Ctrl-C, jobs, fg, bg, kill, 等等。当然,你也要知道Ctrl+\(SIGQUIT)和Ctrl+C (SIGINT)的区别。
  • ls 和 ls -l (你最好知道 “ls -l” 的每一列的意思), less, head, tail 和 tail -f, ln 和 ln -s (你知道明白hard link和soft link的不同和优缺点), chown, chmod, du (如果你想看看磁盘的大小 du -sk *), df, mount。
  • 基础的网络管理: ip 或 ifconfig, dig。当然,原作者还忘了如netstat, ping, traceroute, 等。
  • 理解正则表达式,还有grep/egrep的各种选项。比如: -o, -A, 和 -B 这些选项是很值得了解的。
  • 学习使用 apt-get 和 yum 来查找和安装软件(前者的经典分发包是Ubuntu,后者的经典分发包是Redhat)。

还有一些其他的技巧,具体可以点开原文阅读一下。

Share

这次的分享主要分为两个部分:

一、这周无意中读了一篇文章读书|软技能:代码之外的生存指南,文章中提到的代码之外的指南说得很好,值得学习和思考。其中提到了上下班的时间如何安排以及如何让自己快速成长、如何能成为一个能做成事情的人等几个方面。提到的一些点确实是值得技术人思考的,对于上班时间和下班时间的安排主要如下(前提,在某个公司待上3个月,上下班不忙):

上班时间:

  • 千万别在上班学公司之外的东西,因为会心虚,记不牢、注意力不能集中;

    1. 阶段性小结;(例如和同事一起如何做出来这样的动画效果,然后总结出核心技术,把它整合到自己的知识系统);
    2. 浏览旧代码、看公司的技术Blog。

核心:总结、总结、再总结,然后把核心整合到自己的知识系统,无论对外对内讲起相关技术,你不仅仅是参与,而是看透了本质。

下班时间:

  • 千万别写公司的代码,因为他会无底洞的消耗你的时间;一路走过来,压力挺大的;

    1. 定时刷源码、项目、Blog,仅仅是纳入知识,不动手;
    2. 定时敲代码,把自己当做产品经理,设计产品给自己做,故意刁难自己;(里程碑上线去玩玩)
    3. 定时和家人沟通,保持良好的关系。

如何让自己快速成长

  • 转变心态:把自己当做产品
  • 自学能力:参与技术分享、阅读杂书等
  • 技术输出:打造个人品牌
  • 等等

如何能成为一个能做成事情的人

  • 必须不惜一切代价避免争吵,远离消极的人;
  • 确立明确的方向,否则你走的每一步都是徒劳的;
  • 等等

具体可以阅读一下这篇文章,还是有很多可取之处的。


二、这周更了几篇文章,一篇总结了一些国内非常优秀的博客和网站,另一篇则是总结了一些国外非常优秀的博客和网站,还有一篇是总结了手中的一些电子书,整理成文章分享给需要的人。这几篇文章分别是:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值