Zhangxu's Blog.

第1周ARTS

Word count: 2,394 / Reading time: 10 min
2018/07/21 Share

写在前面

最近参加陈皓老师的专栏活动,每周一篇ARTS,即:

  • algorithm -> 一个算法题
  • review -> 点评一篇英文技术文章
  • tip -> 学习一个技术技巧
  • share -> 分享一个有观点和思考的文章

至少坚持一年。

我是一个菜鸡,之前没有接触过JAVA,最近跟着专栏才开始学习,希望自己可以在这个活动中能够打牢基础,学好英语,期待自己的变化。

Algorithm

说来惭愧,我没有系统的学习过算法知识,第一周先来个简单的题尝尝,后面再接再厉。

题目:

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

实例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public List<Integer> twoSum(List<Integer> nums, Integer target) {
List<Integer> result = new ArrayList<>();
if (nums==null&&nums.size()==0){
return result;
}
Integer sum = 0;
for(int i=0; i<nums.size(); i++){
for(int j=i+1; j<nums.size(); j++){
sum = nums.get(i) + nums.get(j);
if (sum==target){
System.out.println(">> nums["+i+"] + nums["+j+"] = "+target+"");
result.add(i);
result.add(j);
return result;
}
}
}
return result;
}
}

思路:

想到两种方法:

  • 一种是从给定的数组入手两两遍历,如果满足条件就返回结果。
  • 另一种将target拆分成不同的两两组合,看每单个数是否存在于数组,若两个数都存在且索引可以不等,返回结果。

考虑到如果target比较大,数组元素却很少,无效的步骤会很多,所以选择实现第一种。

Review

英文文章我就先从专栏正式入门篇推荐的”The Key To Accelerating Your Coding Skills“文章开始吧^_^。

由于我英文不是很好,可以说很不好,顺带我把生词也记录下来了。

点评:

本文主要论述了,“拐点”对于我们学习编码的关键作用。

通过拐点意味着:

  • 能够独力解决问题,发现新问题的解决方案
  • 拥有扎实的开发技能
  • 具备深厚的数据结构、算法的基础

需要具备的素质:

  • 注重细节,不怕犯错
  • 足够的编码量
  • 抱有终身学习的心态对待编程
  • 寻求突破,不要呆在舒适区
  • 自力更生,通过互联网找到学习材料
  • 尽可能的复用代码
  • 勇于挑战难题

在学习任何一门语言或是技术的时候快速通过拐点是我们的首要目标,在此过程中要保证自己清醒的工作状态,不要过度劳累,否则事倍功半。

文中有一句话很酷,和大家分享下:

pic

Tip

最近需要连接到某个数据库,但是由于防护墙限制只能从一个特定的主机上连接,而这个主机是无UI界面的Linux系统。

那么有没有一款命令行式的MYSQL客户端呢?有的,我找到了mycli,它有直观的语法突出显示,你可以用它方便的操作自己的数据库。

如果恰好有Python的环境,可以用以下指令轻松安装:

1
$ pip install mycli

或者下载源码后:

1
$ python setup.py install

其他的平台:

1
2
$ brew update && brew install mycli  # macOS
$ sudo apt-get install mycli # debian or ubuntu

安装好后输入命令:

1
$ mycli --help

可以看到帮助信息

Usage: mycli [OPTIONS] [DATABASE]

A MySQL terminal client with auto-completion and syntax highlighting.

Examples:
    - mycli my_database
    - mycli -u my_user -h my_host.com my_database
    - mycli mysql://my_user@my_host.com:3306/my_database

Options:
-h, --host TEXT               Host address of the database.
-P, --port INTEGER            Port number to use for connection. Honors
                                $MYSQL_TCP_PORT.
-u, --user TEXT               User name to connect to the database.
-S, --socket TEXT             The socket file to use for connection.
-p, --password TEXT           Password to connect to the database.
--pass TEXT                   Password to connect to the database.
--ssl-ca PATH                 CA file in PEM format.
--ssl-capath TEXT             CA directory.
--ssl-cert PATH               X509 cert in PEM format.
--ssl-key PATH                X509 key in PEM format.
--ssl-cipher TEXT             SSL cipher to use.
--ssl-verify-server-cert      Verify server's "Common Name" in its cert
                                against hostname used when connecting. This
                                option is disabled by default.
-V, --version                 Output mycli's version.
-v, --verbose                 Verbose output.
-D, --database TEXT           Database to use.
-d, --dsn TEXT                Use DSN configured into the [alias_dsn]
                                section of myclirc file.
--list-dsn                    list of DSN configured into the [alias_dsn]
                                section of myclirc file.
-R, --prompt TEXT             Prompt format (Default: "\t \u@\h:\d> ").
-l, --logfile FILENAME        Log every query and its results to a file.
--defaults-group-suffix TEXT  Read MySQL config groups with the specified
                                suffix.
--defaults-file PATH          Only read MySQL options from the given file.
--myclirc PATH                Location of myclirc file.
--auto-vertical-output        Automatically switch to vertical output mode
                                if the result is wider than the terminal
                                width.
-t, --table                   Display batch output in table format.
--csv                         Display batch output in CSV format.
--warn / --no-warn            Warn before running a destructive query.
--local-infile BOOLEAN        Enable/disable LOAD DATA LOCAL INFILE.
--login-path TEXT             Read this path from the login file.
-e, --execute TEXT            Execute command and quit.
--help                        Show this message and exit.

根据提示连接后,就可以用你熟知的SQL操作数据库啦:

Version: 1.17.0
Chat: https://gitter.im/dbcli/mycli
Mail: https://groups.google.com/forum/#!forum/mycli-users
Home: http://mycli.net
Thanks to the contributor - Steve Robbins
mysql wptest@127.0.0.1:wptest> show tables;                    
                                    share    
                                    show     










[F3] Multiline: OFF    Right-arrow to complete suggestion 

Share

本次分享我在得到APP上听罗胖讲的一个观点:什么叫会工作

工作的本质是协作

在学校的学习更多需要靠自己的努力,当工作之后更多是需要与他人和社会进行广泛和深度的协作。

什么是协作能力

在展开之前我们先引入一个词军工六性,讲的是一个军工产品,在保证自身质量过关的前提下,能更大的在系统中发挥它的作用的六个要素,分别是:

  • 稳定性
  • 适应性
  • 安全性
  • 保障性
  • 维修性
  • 测试性

军工六性和协作有啥关系?

如果我们把军工产品看作一个刚毕业的大学生,那么他自身的学问是一方面,怎样与周边的因素沟通协调则取决于更多的一些软素质,一个军品质量过关是前提条件,在此之上如何融合在整个国家的战备系统,对我们很有借鉴意义。

我们对照一个人在职场环境中的协作把它拆开来看:

稳定性

就像一把枪,能够稳定的发挥自己的性能,对照到职场环境就是靠谱,靠谱的参照标准:

凡事有交代,件件有着落,事事有回音。

这是最简单的社会化要求,能做到这一点算是一个合格的职场人。

适应性

一把枪,不论在沙漠还是沼泽,不管是严寒还是酷热的条件下都能使用,这就是适应性,对应到工作就是我们周遭环境的变化:

  • 客户方
  • 资源方
  • 用户
  • 技术
  • 媒体

这桩桩件件都是很大的变量,具有不确定性,那如果技术崩溃了、资源方毁约了、用户不满意了你能不能从容应对?

跨过这个台阶,就是一个人职业化的体现。

安全性

其实就是有没有给别人一种安全感,做事让周边的人放心,和靠谱不同的是,是别人把事情交付过来他会觉得放心了。并不是说要求我们什么事都能解决掉,而是事情交到你手上他不会落到地上,即使没有把事情办成大家也会相信你已经尽到了自己的努力。

过了这个台阶,基本上就具备团队领导的素质了。

保障性

对军工产品来说,战事发生了,能不能短时间批量的投放到战场?生产的各个环节从原料到加工能不能快速的运作起来?这就是保障性。

对应到工作中就是,是否能协同资源打一场战役。这需要对时间和节奏有很大的把握,需要知道在什么时间什么地方需要投入怎样的资源。

跨过这个台阶,就基本具备负责一条业务线的能力了,差不多是副总的级别。

维修性

一把枪,能不能方便的拆卸,快速找到代替的配件?这就是维修性。对应到职场就是你能不能对发展趋势作出预料、给出预案、快速反应、持续交付的能力。

这个能力台阶对应CEO。

测试性

测试是对维修性的升级要求,一把枪,是好是坏一眼就能看出来,手机还能用大概多长时间,看到电量指示就会明白,也就是具备某种指标让外界能够了解你的状态,从而间接的满足了测试性。

对应到工作,就是你这活干的咋样,能不能干成,不仅要让别人知道,还要让别人能够评估,不仅能够组织协作,还能吸引和整合资源,这可以说是一种个人品牌。

具备这个能力,就可以创业了。

总结

本文借助军工产品的六个特性,把人职业能力划分为六个台阶,分别是:

  • 靠谱
  • 职业化
  • 让合作者放心
  • 组织战役
  • 着眼未来
  • 协同资源

在这个过程中,不需要追求什么名利、升职、加薪,随着能力的提升,该是你的东西一样都不会拉下。

与大家共勉,谢谢!

原文作者: 张旭

原文链接: http://jshpy.cn/ARTS/ARTS01.html

发表日期: July 21st 2018, 1:29:00 pm

版权声明: 本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

CATALOG
  1. 1. 写在前面
  2. 2. Algorithm
    1. 2.1. 题目:
    2. 2.2. 实例:
    3. 2.3. 代码:
    4. 2.4. 思路:
  3. 3. Review
    1. 3.1. 点评:
  4. 4. Tip
  5. 5. Share
    1. 5.1. 工作的本质是协作
    2. 5.2. 什么是协作能力
      1. 5.2.1. 稳定性
      2. 5.2.2. 适应性
      3. 5.2.3. 安全性
      4. 5.2.4. 保障性
      5. 5.2.5. 维修性
      6. 5.2.6. 测试性
    3. 5.3. 总结