书途

人无书而涂,因书而智,终老以书为伴,是为书途


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

何为人生意义?

发表于 2018-09-25   |   分类于 随笔   |     |   阅读次数
  • 最近有个人生的哲学问题一直困扰着我,有时候忽然觉得一切都是毫无意义可言的,因为地球上再伟大的人,参照宏大的宇宙观来说,近乎颗粒微乎其微,可是我们作为人类连尘埃都算不上,甚至有时候觉得一切所谓美好的人生都是人把自己想象的太过于重要罢了。曾努力了一辈子的伟人,为世人所记住千百年,可当有一天我们突然意识到自己的渺小,在世上本就是可有可无的“尘埃”的时候,一刻的毁灭则将我们看来如此漫长的几千年甚至几十万年的发展史轻松抹去,而在“真”的世界中,或许没有“意识物体”能够注意到对我们这么重要的时刻。所以,我们活着,美好的过着每一天,究竟是为了什么呢?
  • 每个人的人生经历是完全不同的,对于好吃懒做的人,可能会很颓废的消磨一辈子;勤勤勉勉上进的人,会把自己的光环放大,让更多的人记住他;老的一辈为了造福子孙后代,建设发展城市,便利后人的生活,让大家都很开心的过着自己的生活,可难道这就是所谓的意义么?我总觉得自己要活的有意义,可马上二十七了,再没两年也将三十而立,买车买房生孩子孝顺父母,眨眼几十年一过,经历了生离死别,孤老病苦,直到我闭眼的那时,这“人生意义”我能参悟透么?又可能遇到各种灾害活不到那么长的时间,如果在意外的那一刻,我又能做些什么,想些什么,“魂”归何处呢?所以就算是“死”,意义又在哪呢?按照能量守恒的定律,我不过是一堆发热的肉体渐渐散去我的热度,然后身体腐烂、体液挥发,最终化为一堆白骨,一堆灰烬,如我们脚下的蝼蚁、枪口下的猎物、屠夫刀下的猪羊一般,死后不具任何“意义”。还有很多人会因为各种原由轻生,可是死亡后就能所谓的解脱吗?一样的是折磨自己。

git 使用分享

发表于 2018-04-25   |     |   阅读次数

git 使用分享

  • git 命令行必备
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    # 设置 alias 别名
    git config --global alias.st "status"
    git config --global alias.ci "commit"
    git config --global alias.co "checkout"
    git config --global alias.br "branch"
    git config --global alias.ps "push"
    git config --global alias.pl "pull"
    git config --global alias.bra "branch -a"
    git config --global alias.cob "checkout -b"
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

    # 配置用户名
    git config --global user.name "your name"
    git config --global user.email "ericrao@welove-inc.com"

    # 查看 git 配置
    $ cat .gitconfig
    [alias]
    co = checkout
    ci = commit
    br = branch
    st = status
    [user]
    name = Your Name
    email = your@email.com
  • 配置 credential,避免每次都输入用户名和密码

    • git config --global credential.helper store <file path>
  • 忽略无用文件:

    • 推荐插件 .ignore on IDEA

    • .gitignore templates :https://github.com/github/gitignore

  • 常用命令 git merge 和 git fecth / pull 的区别
  • 巧用保存进度 git stash 和 git stash pop / apply
  • 每次发版需要打标签:
    • git tag 1.0.0 -m "tag message"
    • 查看 TAG: git tag --list 、git show 1.0.0
阅读全文 »

Android设计模式 -- 巧用策略模式告别繁琐的 if...else...

发表于 2018-02-28   |     |   阅读次数

需求

根据后台配置进行不同的广告加载策略,例如有广告 A / B / C,某个时段后台配置播放广告 C,默认播放 A;

普通的实现方式

  1. 创建广告管理类,实现广告加载/播放的控制:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class AdManager(adName: String) {
var ad = adName
fun initAd() {
when (ad) {
"A" -> initA()
"B" -> initB()
"C" -> initC()
}
}

fun playAd() {
when (ad) {
"A" -> initA()
"B" -> initB()
"C" -> initC()
}
}

fun stopAd() {"A"
when (ad) {
"A" -> initA()
"B" -> initB()
"C" -> initC()
}
}

private fun initA() {
print("init A")
}
// 代码省略...

private fun playA() {
print("play A")
}
// 代码省略...

private fun stopA() {
print("stop A")
}
// 代码省略...
}
  1. 使用方式:
1
2
3
4
5
6
7
8
class ConcreteAd {
fun main() {
var adManager = AdManager("A")
adManager.initAd()
adManager.playAd()
adManager.stopAd()
}
}

从上面看到,充斥着大量的if…else…(Kotlin 中用的 when 语法),并且耦合度很高,想要增加广告就要在同一个类中进行修改。那么使用策略模式来进行优化后,大致是这样的:

  1. 创建广告策略接口 IAdStrategy 类:
1
2
3
4
5
interface IAdStrategy {
abstract fun initAd()
abstract fun playAd()
abstract fun stopAd()
}
  1. 针对不同的广告进行策略的实现(下面以广告A为例):
1
2
3
4
5
6
7
8
9
10
11
12
13
class A : IAdStrategy {
override fun initAd() {
print("init A")
}

override fun playAd() {
print("play A")
}

override fun stopAd() {
print("stop A")
}
}
  1. 创建策略相关的Context来绑定广告和策略接口之间的关系:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class AdStrategyContext {

private lateinit var mAdStrategy: IAdStrategy

constructor(adStrategy: IAdStrategy) {
this.mAdStrategy = adStrategy
}

fun initAd() {
mAdStrategy.initAd()
}

fun playAd() {
mAdStrategy.playAd()
}
}
  1. 使用方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class ConcreteAd {
fun main() {
// 普通
var adManager = AdManager("A")
adManager.initAd()
adManager.playAd()
adManager.stopAd()

// 策略模式
var adCtx = AdStrategyContext(A())
adCtx.initAd()
adCtx.playAd()
adCtx.stopAd()
}
}

上面的例子可以看到,一旦需要增加广告D的话,去实现对应的 IAdStrategy 接口即可,和之前的代码没有耦合,符合设计原则。但缺点就是如果广告很多的话,会存在很多类文件,并且一旦接口需要补充和修改,那么所有的实现类都会变动。

2017年终总结附2018小目标

发表于 2018-01-18   |   分类于 计划   |     |   阅读次数

匆匆2017年过了,这一年发生了很多事,工作也好,生活也罢,总是往好的方向前进的。

16年末定了一些2017的小目标,现在该给自己一个交代:

跳槽 √

这件事对我现在仍旧意义深刻。在2017年一月的时候先去了美图面试,过程发挥还好,但跪在了最终的业务熟练度上,还记得那个问题:

  • Gradle 中 Flavor 是干嘛的?
  • Build.gradle 文件中 compile 和 compileXX 有何区别?

失败告终后,潜心准备了两个月,于三月在铁蕾哥的帮助下来到发现角面试。表现不好,但公司还是给我了工作的机会。自己也没闲着,一个月就提前转正了,在圣诞还涨了一次薪,提前实现自己的预期目标,再次感激~ 更换工作后环境也变了,不再如从前那么压抑。喜欢发现角的开放、自由,还有这里的各位也都很逗比。

这里也要感谢前东家的 CTO 老魏,每次想到你招人的时候说遇到了像我一样的人都很激动很开心,这是对我最大的肯定了,你也如我老师一样给予我偌大帮助,在云拓的一年半虽然时间很紧,但也非常充实,学到不少东西,无论是技术还是工作所需。也感谢老高的挽留,但世界还很大,我不想就这么沉寂下去。

所以,这个目标完美的达成 √。

阅读全文 »

续厨师与母亲的厨艺问题的一些想法

发表于 2017-11-01   |     |   阅读次数

之前看到一个小问题:

  • 为什么初学两年的厨师比20年经验的母亲做的饭好吃的多?

把问题迁移到编程上来说也一样,相关的问题可以参考:

  • 一年工作经验十年用

今天看了一本讲解学习技巧的 cook book,里面也提到了这个问题:

  • 驾龄5年的司机和20年驾龄的司机谁的车技更好?
  • 3、4年工作经验的医生和30年从医经历的老医师谁的医术更高?

其实大部分都是前者有优势,因为后者常常是重复做了几十年同样的事,而并无太大的长进。写代码也一样,一年的时间学会基础语法、业务编写,然后从业十年编程一直处于业务需求的修改,可能技术和业界大牛比起来有天壤之别。这其中的道理又是为什么呢?

我自己总结的大概有这么几个部分:

技术深度

所谓的技术深度,就是前面提到的语法、业务,不同的业务涉及到的技术含量是不一样的, 如果是简单的社交软件,可能对 API 和数据的处理多一些,让用户的体验用起来更棒,基本就达到了这个产品的需求,而如果从事的是卫星遥感,舰船识别,那么就要对自身的算法能力加强,不仅是专业软件的熟练掌握,对相关的算法做到得心应手那么同样三年工作经验,后者的工资可能是前者的好几倍(行业领先的水平),所以这也说明了选工作和业务的重要性。比如获得了几家公司的 Offer,业务的侧重点不同,对个人的发展影响也极大,去微信开发组的肯定比去易信的要幸运得多(当然还有别的很多关键因素)。

舒适区

每个人都会遇到瓶颈,在瓶颈的时候其实也算是处于舒适区,当没有突破的时候,这种状态会一直伴随着自己长存,时间再长,可能会忘记自己追求的是什么,我是谁?我在哪?我要做什么?参见铁蕾哥的博客《技术的成长曲线》。但我个人体会是,瓶颈区有两种类型,一种是舒适区,一种是紧迫区,紧迫区不同于舒适区的是,在这段时间会特别难熬,尤其自己某项技术掌握的不到位,或者不熟练,但是工作上、业务上却急需使用,自己有种心有余而力不足的感觉,无力感随身而出,睡也睡不好,吃也吃不香,工作效率还很低下,这种状态会严重影响自己的自信心,怀疑自己的能力。然而往往紧迫区过后就是一段快速上升的时期,某一天头疼不已的 BUG、技术难点突然解决,或是自己领悟都真谛了,喜悦感,成就感油然而生。

临界值

人的天性都是懒惰的(说的是我自己么?)每当某件事做到一定程度时(也可以说达成最低目标),人就开始懈怠了,成就非凡的人一般来说都会把活干的很漂亮,技术能力也一样,或许我们不停的突破自己的极限,但就像打字一样,每个人都有自己的一个“基本极限”,我初三学习的盲打,从刚开始练习的每分钟30多字到后来每分钟的最快180字,渐渐落回150以下,从此再无心关注这个问题,至此我的极限就是100多字每分钟。而专注练习的打字员基本每分钟几百字不是问题(可能方法也不同,还有使用的是专用打字机)。相信大家最快也都最多200吧?编程似乎也一样,一旦陷入了这个临界值,我们就需要考虑下一步如何突破成为真正的打字高手了

突破

既然达到了舒适区、紧迫区、极限,那就要考虑突破,而往往这个问题是最为关键又无解的,因为每个人的状态不同,单一的方法不一定适用每个人,想要寻找一种有效的方法,可能会消耗很多精力、时间,还有可能走了一圈弯路。就个人情况具体问题具体分析吧,我也只是在不停的尝试,不敢妄言。

求职,离职,入职

发表于 2017-05-16   |     |   阅读次数

从 3 月底 4 月初一直拖到今天 5.15 ,早想把这一个月前前后后发生的事做个总结,把心里所想的表述出来,无奈各种琐事,或是心情五味陈杂,一拖拖了大半月。也正好,来了新公司工作了两周,前后一条线也够啰嗦小篇了。

主要谈及自己的三件事:

  • 求职
  • 离职
  • 入职

求职

2015 年到今为止,毕业入职也有一年加半载有余,关于在前任公司的事儿也就不多说了。总而言之就是加了不少班,涨了不少肉,废了不少神,一大活人再待下去肯定要废了。为了成长,我选择从这个坑中跳了出来。于是迎来了求职的个人需求。

不过理应先离职再求职,无奈互联网(尤其是 Android / iOS 开发)这行近年来不景气,好多同行出去了才发现工作没想象的那么好找。在培训班对整个行业、市场的狂轰滥炸之下,管你什么语言什么技能什么职业,钱赚了就行。身边已经不少培训出来找不到工作还面临高额贷款的朋友了,大多人都眼红所谓阿猫阿狗都能年薪 xx 万的工作,可是阿猫阿狗这么多,岗位却是有限的啊。所以,我们程序猿不仅不是人,还连猫狗都不如。扯这么多就是想说,工作不好找,得骑驴找马。此次工作我也是请人帮忙内推才有的宝贵机会,机不可失时不再来。还好新公司挺近情面,容我一个月的时间做好帮老东家招兵买马工作交接的事,也证明了我的选择没错。

离职

3 月底定了工作,4 月清明节后回来立马向老板、老大他们提了离职这件事儿。意料之中,找我谈了两三天,我还是婉拒了,心似嫁出去的女儿泼出去的水,已经没有理由留于此。我能做的就是尽量把招人、交接这两件事做好。至于项目,我已经尽我最大的可能完善了,但求无愧于心。实话说,提离职的那几天,真不好受。想的最多的就是刚入职的那段苦逼又奋斗向前的日子。感谢老大曾经给我的这份工作机会,大恩不言谢。以后能做的就是用自己有限的能力尽量帮助需要帮助的人们。循环往复,技术也是这样传承的吧。很快的两周不到就招入了两位新人。

一个月的时间,感觉过了大半年似的。

入职

新公司不大,但是氛围属于我喜欢的那种创业公司。同事 NICE,老大和 CEO 人都很不错(面试的时候我就确定这点了),总而言之一切都如意。入职这两周也有压力,还好都在自己的掌控之中,剩下的就看自己的造化吧。不过还是很坚信,努力的人,运气一般都不会差。

Android实现录屏直播(三)MediaProjection VirtualDisplay librtmp MediaCodec实现视频编码并推流到rtmp服务器

发表于 2017-04-18   |   分类于 Android   |     |   阅读次数

请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/55230272

Android实现录屏直播(一)ScreenRecorder的简单分析

Android实现录屏直播(二)需求才是硬道理之产品功能调研

阅读全文 »

个人对面试者和面试官的几点经验总结

发表于 2017-04-18   |     |   阅读次数

近期因为公司招人的原因做了回面试官,做了些许总结以备自戒。

面试者:

  • 大部分面试者都有些紧张,其实很正常,我自己面试的时候感觉比他们紧张多了,而且刚开始的时候我自己虽然是面试官,也会感觉很紧张,生怕因为自己的不足导致面试者失去一次宝贵的工作机会,但多面几次就逐渐适应了,所以紧张还是因为自己经历得比较少

  • 面试者简历投递的时候,一定不要超过 3 页,并且把你熟悉掌握的技术从前往后依次排列

  • 工作经历很重要,但是感觉很多面试者的简历上面并没有突出面试官想看到的重点:

    • 是否项目的负责人,或负责项目的比重,承担那些重要职责

    • 在项目中攻克了哪些难关,复杂度如何,我很在意面试者有没有对疑难杂症有更好的思路,如果出现问题第一时间如何去解决,有没有责任感,但是往往这一点很难从简短的面试中体现出来

  • 最好提供自己的技术博客和 GitHub,有助于面试官多了解你个人的技术能力

  • 简历如实写作,遇到过简历上写了自己并不掌握的知识点,这样面试官问到但无法回答的时候会冷场很尴尬的

面试官:

  • 在面试前要看看将面试的面试者的简历,做个准备

  • 除了简历上的点,还需要准备一些必问的题,不能临时想什么问什么,这样会让人感觉不专业不负责,再根据面试者简历准备一下适合他的问题

  • 对面试者的时候态度要谨慎,毕竟很多面试者难免都会很紧张,适当的暖暖场可以让双方的交流更顺畅,面试者也能充分发挥自己的实力

  • 掌握时间,技术能力强的,值得面的人可以多花时间深入了解,技术一般的。不合适的人,需要的话可以给予建议,根据自己的时间适时而止

  • 切记,不要把你熟悉掌握的某一个专一技术点拿来抨击和当作评判别人的标准,很可能别人比你牛的多,只是这部分没接触过罢了

  • 懂得尊重,谁都是从菜鸟过来的

后续想到再补充。。。

未命名

发表于 2017-02-24   |     |   阅读次数

如果当时没有选择,那么我会在哪?

如今毕业已快两年已久,两年前的今天我还在初学Java,刚通过师兄接触Android,从此踏入编程这条不归路。

很感激自己当初的选择,让我能够在一个单纯又靠自己双手创造价值的环境中工作。

最近对自己这一两年的得失反思总结了下,回首看着这踏过的一步步脚印,这一路以来也有不少坎坷和艰辛。

两年的分水岭,似乎我没有达到预期的及格线。虽然之前一直强调基础,但是基础真的太重要了。没有绝对坚固的知识基础,很难在一个领域有所深入的建树,尤其在阅读《Android内核剖析》作者柯元旦对自己曾经学习和创业之事叙述的时候,明显感觉到了高校之间的巨大差距。

好学校是存在学渣,但如果学霸之间的比较呢?大家的平均水平真的不是一个档次的,如果可以的话很希望能够经历一次真正的奋斗考研去往一所自己梦想的大学读研。可惜现实如此,只能不甘的苟活并在技术上能够让自己变得异常的强大才行。

最近投简历的时候也感觉自己的不争气,其实两年应该可以证明一个人的技术能力了,可是自己浪荡,没有充分利用时间成长达到应有的水平,很是失望。

希望剩下的这关键的一年能够放下心结,努力拼搏对未来的自己有一个交代。不想成为三年技术还是渣的人。

不要总是给自己找理由!

Android libyuv应用系列(二)libyuv的使用

发表于 2017-01-15   |   分类于 Android   |     |   阅读次数

上篇文章Android libyuv使用系列(一)Android常用的几种格式:NV21/NV12/YV12/YUV420P的区别中我们了解了YUV相关的知识,而本篇文章我会介绍libyuv是什么,以及如何使用libyuv进行相应的图像数据处理。

当我们在 Android 中处理 Image 时,常因为 Java 性能和效率问题导致达不到我们期望的效果,例如进行Camera 采集视频流的原始帧时我们需要每秒能够获取足够的帧率才能流畅的显示出来,这也是为什么美颜 SDK 和图像识别等这类 SDK 都是基于 C / C++ 的原因之一。语言的特性也是关键因素点,所以常常会在 Java 中调用 C / C++ 的 API 来进行相关操作。

因最近工作需求是替代 Camera 的原始打视频流,数据源是 Bitmap 格式的,如果使用 Java 的方法来进行Bitmap 的旋转,转换为 YUV 类型的 NV21 、YV12 数据的话,那么少说也要 15FPS 的视频就尴尬的变成了5FPS的PPT幻灯片了。关于YUV的各种格式区别请见我的博客:直播必备之YUV使用总结 —— Android常用的几种格式:NV21/NV12/YV12/YUV420P的区别,而Google提供了一套Image处理的开源库libyuv(科学上网),可高效的对各类Image进行Rotate(旋转)、Scale(拉伸)和Convert(格式转换)等操作。

阅读全文 »
123
Codios

Codios

积跬步而至千里

29 日志
15 分类
39 标签
RSS
GitHub cnblogs Weibo
© 2018 Codios
由 Hexo 强力驱动
主题 - NexT.Pisces