ARTS打卡 - 8
1. Algorithm
这道题是找出数组中合为0的子数组,不包含重复数组。
一开始能想到的是先排序,然后两个指针一头一尾计算,但是没有想明白怎么去重,最后看了一下题解才明白😳😳,解题的步骤可以分为:
- 边界条件判断
- 快速排序
- 计算判断:一头一尾指针,与一个顺序指针,计算三个数字大小,如果小于0,左指针右移,如果大于0,右指针左移。
- 去重判断:如果相临两个数字相等,说明是重复计算,并且判断左指针与右指针与下一位元素是否相等,相等则也要跳过。
2. Review
-
这是篇文章主要讲述了Kotlin中异常使用的实践
首先对于Java来说,Kotlin 中并没有异常检察,对于kotlin 弃用异常检查是否真正合理说法也不一,c#的设计者Anders Hejlsberg对于异常检查有过一些评论: https://www.artima.com/intv/handcuffs.html。 大意是异常检查不利于程序的扩展与版本的修改,因为异常的数量与类型都无法控制,如果旧系统的异常数量增加,那么对于升级版本以及整个系统来说(由多个类似的旧系统组成的)将会指数级的异常需要处理。而相反的,王垠的博客中也对kotlin异常检查做出了一些针锋相对的评价:Kotlin 和 Checked Exception。大意是对于上面 Anders Hejlsberg 提出的 CE所带来的问题,主要是因为程序员自己的滥用以及理解不到位而造成的,而CE可以避免一些不容易发现的问题,还有一段原文:
Java 的 CE 其实对应着一种强大的逻辑概念,一种根本性的语言特性,它叫做“union type”。这个特性只存在于 Typed Racket 等一两个不怎么流行的语言里。Union type 也存在于 PySonar 类型推导和 Yin 语言里面。你可以把 Java 的 CE 看成是对 union type 的一种不完美的,丑陋的实现。虽然实现丑陋,写法麻烦,CE 却仍然有着 union type 的基本功能。如果使用得当,union type 不但会让代码的出错处理无懈可击,还可以完美的解决 null 指针等头痛的问题。通过实际使用 Java 的 CE 和 Typed Racket 的 union type 来构建复杂项目,我很确信 CE 的可行性和它带来的好处。
文章还提到了一些异常的使用方式:
- 处理代码逻辑异常:对于代码逻辑异常,应该在高级别的框架以及代码逻辑块以一种强提醒的方式通知开发者。
- 处理API异常:最常见的是数据转换异常,这种情况在处理时,不应该直接返回异常,而是通过异常处理返回一个值(null), 例如:
val number = string.toIntOrNull() ?: defaultValue
- API设计:对于不同类型的异常处理,应该封装起来,明确异常类型,如果直接使用try/catch处理的话会忽略一些关键性的错误。
- I/O,网络异常:统一处理这种类型的异常。
3. Tip
- 如果jenkins 找不到某一个命令,说明在环境变量下找不到该命令,如果本地安装了但不在环境变量下,可以在Jenkins添加了的环境变量下创建一个快捷方式,但是如果想要创建一个快捷方式到
/usr/bin
是不被允许的,现在都不可以更改/usr/bin
的权限了,所以可以替代为创建到/usr/local/bin
下,效果是一样的。 - shell bash脚本写入文件的时候,如果需要传递换行符,使用
echo -e
参数,激活转义字符。 bash -c
后跟的参数,用空格分割,第一个参数为命令,之后的为参数。
4. Share
登陆shell,非登陆shell 以及交互shell和非交互shell
这周遇到了一个问题是当通过ssh登录远程主机后,启动客户端,会提示获取权限失败(macOS)。而使用该shell open一个新的终端,执行同样的操作却没有任何问题。于是看了这篇文章,了解了不同的shell运行环境,然而依然没有解决问题 😂,不过算是一个新的知识点。