注册
环信即时通讯云

环信即时通讯云

单聊、群聊、聊天室...
环信开发文档

环信开发文档

Demo体验

Demo体验

场景Demo,开箱即用
RTE开发者社区

RTE开发者社区

汇聚音视频领域技术干货,分享行业资讯
技术讨论区

技术讨论区

技术交流、答疑
资源下载

资源下载

收集了海量宝藏开发资源
iOS Library

iOS Library

不需要辛辛苦苦的去找轮子, 这里都有
Android Library

Android Library

不需要辛辛苦苦的去找轮子, 这里都有

工作了5年你居然不知道版本号有这些规范?

前言 所谓语义化版本控制,就是要求你的版本号能按照特定规则及条件来进行约束,以期达到见到版本号即能了解其修改内容的信息或相邻版本间的更新迭代关系。通过阅读本文,你将能够对语义化版本控制规范能够有一个全面的了解,同时也对各平台上依赖版本时的语法有个大体的了解。 ...
继续阅读 »



前言


所谓语义化版本控制,就是要求你的版本号能按照特定规则及条件来进行约束,以期达到见到版本号即能了解其修改内容的信息或相邻版本间的更新迭代关系。通过阅读本文,你将能够对语义化版本控制规范能够有一个全面的了解,同时也对各平台上依赖版本时的语法有个大体的了解。


背景


在正式开始之前,先问大家几个问题:


我们经常在类似 Github、npm、或者 pub.dev 上看到一些软件或者库的版本号包含如下信息,你是否会疑惑他们之间的区别是什么?分别适用什么场景?



  • alpha

  • beta

  • rc

  • release


再看看下面几组版本号,你是否能弄清楚各个版本号之间谁更新更大?



  • 1.0.0 1.0.1 1.1.0

  • 1.0.0-beta 1.0.0

  • 1.0.0-release 1.0.0

  • 1.0.0-alpha 1.0.0-alpha.1

  • 1.0.0-alpha 1.0.0-rc.1


这次将借着我们在做组件管理平台的机会,像大家介绍一下日常软件开发中的语义化版本控制规范。相信通过下面的学习,上述的问题也能够迎刃而解。


常见先行版本号标识


上面说到 alpha、beta、rc、release 等版本号中常见的一些标识,有一个正式的名称叫做:先行版本号标识。我们可以通过一个生活中的例子来通俗易懂的说明它们之间的差异和联系。


现在假设你是一个蛋糕店的老板,你打算给你的蛋糕店推出一个新品,那么上述所谓的先行版本号就是如下几个阶段的蛋糕:


Alpha 版就是你对于你蛋糕的最终形式还在脑海当中,只有一个蛋糕的基本样子,口味应该是什么味道你心里还没谱,对于装饰如奶油、水果还有蜡烛这些甚至都还没有放在一起(你的软件各功能甚至都没有打通)。由于过于简陋,并且口味还没固定,你还不能将其给你的顾客品尝。你只能自己反复摸索尝试,或者让自己店里的员工对口味、外观以及一些缺陷进行点评。


Alpha版蛋糕


Beta 版就是你的蛋糕已经开始尝试将部分奶油涂抹在蛋糕上,你已经尝试将所有的元素组装起来,这时候的蛋糕还处于不能拿出去卖的阶段,但口味和后续方向已经基本固定。你甚至可以邀请你店里的熟客来参加小规模的试吃活动,并让他们针对你的这款蛋糕进行全方面的点评。


Beta版蛋糕


RC 版就是你的蛋糕已经基本做完了,其最核心的口味和外观已经确定下来,你可以再检查一下蛋糕是否有裂缝、哪些地方需要针对性的进行一些美化或修补。


RC版蛋糕


release 版就是你已经把蛋糕装饰好了,插上蜡烛,撒上曲奇,进行裱花。这时候蛋糕已经完成了,你可以正式的将这块蛋糕摆上橱窗,向大家兜售你的艺术品了。


release版蛋糕


通过上述的蛋糕制作过程,你应该对这些先行版本号标识有了自己的认知。接下来我们再总结下这些先行版本号标识的常见含义:


标识常见含义
alpha(α)内部测试版(有些也叫 A 测版)。α 是希腊字母的第一个,表示最早的版本,一般此类版本包含很多 BUG ,功能也不全,主要面向的是开发人员和测试人员。
beta(β)公开测试版(有些也叫 B 测版)。 β 是希腊字母的第二个,因此这个版本比alpha版发布较晚一些,主要是给参与内部体验的用户测试用,该版本仍然存在很多 BUG ,但是相对 alpha 版要稳定一些。此时,基本功能已经固定,但仍然可能增加新功能。
rc(Release Candidate)rc (候选版本),该版本又较 beta 版更进一步了,该版本功能不再增加,和最终发布版功能一样。
这个版本的作用是提前预览即将发行版本的内容,并且在该版本后,最终发行版的发布也迫在眉睫了。
release稳定版(有些也叫做 stable、GA 版)。在开源软件中,都有正式版,这个就是开源软件的最终发行版,用户可以放心大胆的用了。

相信阅读到这里,上面的第一个问题你已经有了答案。那么明白这些标识的具体含义之后,它到底应该怎么用呢?具体要放在版本号里的哪个位置上呢?接下来我们将通过对语义化版本控制规范的详细介绍,来帮助你解答这些疑惑。


何为语义化版本控制规范


在介绍什么是语义化版本控制规范之前,我们先需要了解为什么需要语义化版本控制规范。


大家先设身处地的设想这样一个开发场景:


你现在的项目现在分别依赖了 foo : 1.0.0bar : 2.0.0baz : 3.0.0


项目example_app的依赖项


同时 foo 组件也依赖了 bar : 2.0.0baz : 3.0.0


组件foo的依赖项


同时 bar 组件也依赖了 baz : 3.0.0


组件bar的依赖项


现在你很幸运,项目可以跑起来。


突然有一天因为要修改一个问题,需要升级你项目中 baz 组件的版本号,需要将它从 3.0.0 升级到 3.0.1。但很不幸的是,baz 组件这个小小的版本升级却发生了破坏性的 API 改动。然后你发现你不仅需要修改主工程 example_app 的版本号,还需要升级 foo 组件的版本号以及 bar 组件的版本号。而在你做完这些之后,发现 foo 依赖的其他组件的版本又和你主工程 example_app 项目中依赖的组件的版本冲突了,于是你崩溃了。


这就是软件管理领域中被称作“依赖地狱”的死亡之谷。即当你的系统规模越大,引入的包越多,你就越可能遇到由于依赖导致的问题:



  • 如果依赖关系过高,可能面临版本控制被锁死的风险(必须对每一个依赖包改版才能完成某次升级)

  • 而如果依赖关系过于松散,又将无法避免版本的混乱(假设兼容于未来的多个版本已超出了合理数量) 当你项目的进展因为版本依赖被锁死或版本混乱变得不够简便和可靠,就意味着你正处于依赖地狱之中。


通过上述的场景我们可以看到,版本号的管理(包括依赖关系的控制以及版本号的命名)并不是一个随心所欲的事情:管理好了,能给你带来极大便利,反之则会给你的开发带来很多没必要的麻烦。那么我们应该如何解决这些事情呢?


基于上述的一些问题,Gravatars 及 Github 的创始人之一的 Tom Preston-Werner 提出了一个名为语义化版本控制规范(Semantic Versioning)的解决方案,它期望用一组简单的规则及条件来约束版本号的配置和增长。这套规则是根据现在各种封闭、开源软件所广泛使用的版本号命名规则所设计。为了让这套理论运作,必须要定义好你的公共 API。一旦定义了公共 API,你就可以透过修改相应的版本号来向大家说明你的修改。考虑使用这样的版本号格式:



版本格式:主版本号.次版本号.修订号,版本号递增规则如下:



  1. 主版本号:当你做了不兼容的 API 修改

  2. 次版本号:当你做了向下兼容的功能性新增

  3. 修订号:当你做了向下兼容的问题修正


先行版本号版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。



以上这套规则或者说系统,就是所谓的”语义化版本控制”,在这套规则之下,版本号以及版本号的更新都潜在包含了代码的修改信息,而这套规则被简称为 semver (Semantic Versioning 简写)。


接下来我将基于 semver 2.01 向大家介绍 这套规则的一些细则。


语义化版本控制规范细则


语义化版本控制规范的细则有很多,有兴趣的同学可以直接到semver 2.01 的官方文档 查看即可,我们这里将其主要内容总结给大家。


X.Y.Z(主版本号.次版本号.修订号)修复问题但不影响 API 时,递增修订号;API 保持向下兼容的新增及修改时,递增次版本号;进行不向下兼容的修改时,递增主版本号。


一个标准的语义化版本号各部分的含义


其实所谓语义化版本控制规范,本来也只是一种约定,它并不能完美适合每一个团队,我们也没必要完全生搬硬套,这里以 Google 官方推出的 mockito2 的版本号为例,可以看到其也没有严格按照细则进行遵守。


组件mockito的一些非正式版本号


所以如果你团队内已经统一认知,了解版本号中每个地方代表的含义,做到“见号知意”:看到 1.0.0-npeFixed.8 就知道这个组件是从 1.0.0 拉出来 为了修复 NPE 的;看到 2.3.0-addFaceIdSupport.1 就知道这个组件是基于 2.3.0 来做 FaceId 支持的;见到 5.0.0-nullSafety.6 就知道这个版本是为了空安全的。那么我们的语义化版本控制规范的目的也就达到了,不是吗?


版本语法


就像人类的烹饪方式从最开始的单纯用火烤到发明陶器之后的烹煮,再到现代社会中基于烤、煮、蒸而演化出来的各类五花八门的烹饪方式一样,语义化版本控制规范在各个平台上也衍生出不同的版本规范和版本语法(Version Syntax),但万变不离其宗。接下来我将大致介绍下常见平台版本语法的异同,期望能对你有所帮助。



由于 PyPI上的版本规范及版本说明符比较特殊且繁琐,这里就不进行比对,有兴趣的同学可以查看PEP 440 – Version Identification and Dependency Specification3 了解更多细节。



和烹饪方式的的演化过程一样, 语义化版本控制规范在不同平台、不同时期也有不同的表现


定义平台格式示例描述
完全匹配目标版本gradleversion

version!!
com.example:foo:5.0.2

com.example:foo:5.0.2!!
这里用5.0.2 和 5.0.2!! 是有区别的。
5.0.2 这种写法是对此版本最低要求,但是可以被引擎升级,这里的5.0.2是被称作必须版本(Required version4), 也就是说它最小版本是5.0.2,并且相信未来的任何升级都是可以正常工作的。

而5.0.2!! 则是严格版本(Strict version5), 即只能使用5.0.2的版本,传递依赖项过来的版本如果没有更高约束或者别的严格版本,会被覆写为此版本,否则会失败。
mavenversion

[version]
5.0.2

[5.0.2]
和gradle类似,这里用5.0.2 和 [5.0.2] 是有区别的。
5.0.2 这种写法是对此版本的软要求(Soft requirement6),如果依赖关系树中较早没有出现其他版本,则使用 5.0.2。

而 [5.0.2] 这种写法是对此版本的硬性要求(Hard requirement6)。使用 5.0.2并且仅使用 5.0.2。
pubversionfoo: 5.0.2
npmversionfoo: 5.0.2
podversion

= version
pod 'foo', '5.0.2'

pod 'foo', '=5.0.2'
兼容版本gradleversion.+com.example:foo:1.+>= 1.0.0 < 2.0.0
maven[version, version+1)[1.0.0, 2.0.0)同上
pub^version

~version
foo: ^1.0.0

foo: ~1.0.0
>= 1.0.0 < 2.0.0

>=1.0.0 < 1.1.0

^version 和 ~version 分别被称作 插入符语法(Caret Syntax7) 和 波形语法(Tilde Syntax8),他们的主要区别在于前者兼容当前版本后及后续所有的 次版本号及修订号,即 ^X.Y.Z 等价于 >=X.Y.Z
<(X+1).0.0;

而后着只兼容当前版本号及后续所有的修订号,即
~X.Y.Z 等价于 >=X.Y.Z
npm^versionfoo: ^1.0.0同上
pod~> versionpod 'foo', '~> 1'同上
匹配任意版本gradlecom.example:foo任意一个版本,具体约束可能由其他组件依赖了此组件并且存在具体约束,否则默认取最新的
maven[firstVersion,)[0.0.1,)>=0.0.1
pubanyfoo: any任意一个版本,具体约束可能由其他组件依赖了此组件并且存在具体约束,否则默认取最新的
npm*foo: *同上
podpod 'foo'同上
已发布的最新版本gradle+com.example:foo:+任意一个版本,具体约束可能由其他组件依赖了此组件并且存在具体约束,否则默认取最新的
mavenLATEST

LATESTLATEST 在maven 3.x版本被废弃
pubanyfoo: any任意一个版本,具体约束可能由其他组件依赖了此组件并且存在具体约束,否则默认取最新的
npm*foo: *同上
pod> 0.0.1pod 'foo', '>0.0.1'同上
大于当前版本gradle(version, )com.example:foo: (0.0.1, )
maven(version, )(0.0.1, )
pub>versionfoo: >0.0.1
npm> versionfoo: > 0.0.1
pod> versionpod 'foo', '> 0.0.1'
大于等于当前版本gradle[version, )com.example:foo: [0.0.1, )
maven[version, )[0.0.1, )
pub>=versionfoo: >=0.0.1
npm>= versionfoo: >= 0.0.1
pod>= versionpod 'foo', '>= 0.0.1'
小于当前版本gradle(, version)com.example:foo: (, 2.0.0)
maven(, version)(, 2.0.0)
pubfoo: <2.0.0
npm< versionfoo: < 2.0.0
pod< versionpod 'foo', '< 2.0.0'
小于等于当前版本gradle(, version]com.example:foo: (, 2.0.0]
maven(, version](, 2.0.0]
pub<=versionfoo: <=2.0.0
npm<= versionfoo: <= 2.0.0
pod<= versionpod 'foo', '<= 2.0.0'
范围区间gradle[version1, version2]com.example:foo: [1.0.0, 2.0.0]
maven[version1, version2][1.0.0, 2.0.0]
pub'>=version1 <=version2 'foo: '>=1.0.0 <=3.0.0'当存在区间约束的时候,版本号需要通过单引号进行包裹
npmversion1-version2

>=version1 <=version2
foo: 1.0.0-3.0.0


foo: >=1.0.0 <=3.0.0
version1 到 version的任意版本号,包含自身
pod>=version1, <=version2pod 'foo', '>= 1.0.0' , '<= 3.0.0'
范围集合gradle(,version1), [version2,)com.example:foo:
(,1.0.0),[3.0.0,)
< 1.0.0 或者 >= 3.0.0
maven(,version1), [version2,)(,1.0.0),[3.0.0,)同上
pub不支持不支持不支持
npmversion1version2foo: <1.0.0>= 3.0.0< 1.0.0 或者 >= 3.0.0
pod=version2pod 'foo', '< 1.0.0' , '>= 3.0.0'同上
排除制定版本gradle(,version), (version,)com.example:foo:
(,1.0.5),(1.0.5,)
不等于 1.0.5
maven(,version), (version,)(,1.0.5),(1.0.5,)同上
pub不支持不支持不支持
npm>versionfoo: <1.0.5>1.0.5不等于 1.0.5
pod!= versionpod 'foo', '!= 1.0.5'不等于 1.0.5
特有gradlemaven特殊版本标识: -SNAPSHOTcom.example:foo: 1.0.0-SNAPSHOT这个其实是maven的特殊版本标识,当你发布此带-SNAPSHOT标识版本后,maven自己会根据你的发布时间将版本展开为类似于1.0-yyyyMMdd-HHmmss-1 的格式,所以如果你带了此标识,你可以重复发布此版本,当前前提是你的maven开启了对应的配置。
其他特殊标识
dev

rc\snapshot\final\ga\release\sp
1. dev会被判定低于任何其他非数字部分,如:
1.0.0-dev < 1.0.0-ALPHA < 1.0.0-alpha < 1.0-rc
2. 字符串rc,snapshot,final,ga,release和 sp 被认为高于其他字符串部分(按此顺序排序),如:
1.0-zeta < 1.0-rc < 1.0-snapshot < 1.0-final < 1.0-ga < 1.0-release < 1.0-sp < 1.0


有些平台中还有一些特定的其他语法和规则,如果感兴趣,可以点击平台名称的超链接进入对应平台的官方文档自行查看。



相信你读到了这里,对语义化版本控制规范已经了然于胸。那么开篇的两个问题你是否也有了答案,欢迎在评论区留言。


Q&A 环节


经过上面的分享,相信大家对语义化版本已经有了一个整体的了解,那么我们来检验一下你的学习效果,请尝试回答下面几个问题:


Q:“v1.2.3” 是一个语义化版本号吗?


首先,“v1.2.3” 并不是的一个语义化的版本号。但是,在语义化版本号之前增加前缀 “v” 是用来表示版本号的常用做法。在版本控制系统中,将 “version” 缩写为 “v” 是很常见的。但是我们可以通过 npm-semver 来进行处理并转化成语义化的版本。


npm-semver可以帮你处理和转化语义化版本


Q:这么多规则及要求,我该如何验证我的语义化版本是否符合规范或者比较他们之间的大小关系呢?


这里就推荐 npm 的 github.com/npm/node-se…


node-semver 也可以帮你做到


对于脚本上对版本是否符合要求进行验证,可以使用 semver 2.0 文档中推荐的如下两个正则表达式。


第一个用于支持按组名称提取的语言,PCRE(Perl 兼容正则表达式,比如 Perl、PHP 和 R)、Python 和 Go。参见: regex101.com/r/Ly7O1x/3/



/^(?P0|[1-9]\d*).(?P0|[1-9]\d*).(?P0|[1-9]\d*)(?:-(?P(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:+(?P[0-9a-zA-Z-]+(?:.[0-9a-zA-Z-]+)*))?$/gm



第二个用于支持按编号提取的语言(与第一个对应的提取项按顺序分别为:major、minor、patch、prerelease、buildmetadata)。主要包括 ECMA Script(JavaScript)、PCRE(Perl 兼容正则表达式,比如 Perl、PHP 和 R)、Python 和 Go。 参见: regex101.com/r/vkijKf/1/



/^(0|[1-9]\d ).(0|[1-9]\d).(0|[1-9]\d )(?:-((?:0|[1-9]\d|\d*a-zA-Z-)(?:.(?:0|[1-9]\d |\da-zA-Z- )) ))?(?:+([0-9a-zA-Z-]+(?:.[0-9a-zA-Z-]+)))?$/gm



Q:万一不小心把一个不兼容的改版当成了次版本号发行了,或者在修订等级的发布中,误将重大且不兼容的改变加到代码之中,我能通过重复发布当前版本来解决问题吗?


首先必须强调一点,不管如何都不能去修改已发行的版本(这点在部分平台已经帮你处理掉了,例如 pub 本身已经做了这种限制)。然后最好根据场景升级一个对应级别的版本来回滚逻辑,最后再将你的重大且不兼容的改版升一个主版本号进行发布。记住,语义化的版本控制就是透过版本号的改变来传达意义。


尾声


至此,我们已经了解了语义化版本控制规范的具体细则,常用的先行版本号标识的含义及应用场景,希望能在大家日后的工作生活当中所有帮助。你还见过哪些常见的先行版本号,你们团队又是如何避免包依赖地狱的,欢迎在评论区补充。感谢大家的观看,再见。


作者:政采云技术
来源:juejin.cn/post/7278238875456684090
收起阅读 »

某研究生不写论文竟研究起了算命?

起因 大约一个月前,在学校大病一场(不知道是不是🐑了,反正在学校每天核酸没检测出来)在宿舍休息了整整一周。当时因为发烧全身疼所以基本一直躺着刷刷视频。看了一周倪海厦老师讲的天纪,人纪感悟颇多,中华传统中一些优秀的东西竟然在现代教育下被丢失了而现在的人也只有在身...
继续阅读 »

起因


大约一个月前,在学校大病一场(不知道是不是🐑了,反正在学校每天核酸没检测出来)在宿舍休息了整整一周。当时因为发烧全身疼所以基本一直躺着刷刷视频。看了一周倪海厦老师讲的天纪,人纪感悟颇多,中华传统中一些优秀的东西竟然在现代教育下被丢失了而现在的人也只有在身体不得不休息的情况下才会停止内卷慢下来好好思考。


当然有人会说算命啥的都是封建迷信,作为接受了科学思想洗礼的新时代人慢慢也不再去接受那一套,在这里呢我不对这些想法做任何评价。信则有不信则无,存在即合理嘛。


因为疫情原因呢学校早早就给我们放了假,有了更多的空闲时间可以思考在学校没时间想的事情,做一些除开看论文、做项目之外的事


开始


前几天买的服务器刚好到家了,花了几天配置好环境(最重要的是花了大半天解决todesk、向日葵远程黑屏的问题)。今天下午写好代码丢到阳台让它自己慢慢训练去,剩下的时间就开始写今天关于算命的小程序。


六壬法


六壬法


留连速喜赤口
大安空亡小吉

根据倪师讲的,计算现在的农历日期加上时辰就可以推算当前某个想法适不适合去做。以大安开始每次从当宫开始顺时针数,下面是例子。



  • 假如今天是农历十二月十号 子时




  1. 首先从大安开始数1到12,结果是空亡




  2. 再从空亡开始数1到10,结果是速喜




  3. 然后从速喜开始子丑寅卯这样数,子是1




  4. 所以上面例子最后的结果就是速喜




计算过程都理解了怎么写成代码呢。这里需要知道三个条件,农历的月日以及当前的时辰,农历的月日这个地方我借鉴了这篇博客【C/C++】:用C实现输出日期的阴历日子直接复制了主要内容,打表直接计算农历日期,只需要输入当前阳历的年月日。


然后当前时间转为十二时辰也很简单,首先得到当前的小时时间hour,那么十二时辰就是(hour+1)/2<12?(hour+1)/2:0;这里子时记为0。


整个程序如下:


#include<iostream>
#include<string>
#include<ctime>
#include<vector>

std::vector<std::string> MAP{"大安","留连","速喜","赤口","小吉","空亡"};

unsigned int LunarCalendarDay;
unsigned int LunarCalendarTable[199] =
{
0x04AE53,0x0A5748,0x5526BD,0x0D2650,0x0D9544,0x46AAB9,0x056A4D,0x09AD42,0x24AEB6,0x04AE4A

,/*1901-1910*/


0x6A4DBE,0x0A4D52,0x0D2546,0x5D52BA,0x0B544E,0x0D6A43,0x296D37,0x095B4B,0x749BC1,0x049754

,/*1911-1920*/


0x0A4B48,0x5B25BC,0x06A550,0x06D445,0x4ADAB8,0x02B64D,0x095742,0x2497B7,0x04974A,0x664B3E

,/*1921-1930*/


0x0D4A51,0x0EA546,0x56D4BA,0x05AD4E,0x02B644,0x393738,0x092E4B,0x7C96BF,0x0C9553,0x0D4A48

,/*1931-1940*/


0x6DA53B,0x0B554F,0x056A45,0x4AADB9,0x025D4D,0x092D42,0x2C95B6,0x0A954A,0x7B4ABD,0x06CA51

,/*1941-1950*/


0x0B5546,0x555ABB,0x04DA4E,0x0A5B43,0x352BB8,0x052B4C,0x8A953F,0x0E9552,0x06AA48,0x6AD53C

,/*1951-1960*/


0x0AB54F,0x04B645,0x4A5739,0x0A574D,0x052642,0x3E9335,0x0D9549,0x75AABE,0x056A51,0x096D46

,/*1961-1970*/


0x54AEBB,0x04AD4F,0x0A4D43,0x4D26B7,0x0D254B,0x8D52BF,0x0B5452,0x0B6A47,0x696D3C,0x095B50

,/*1971-1980*/


0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,0x06D449,0x6ADA3D,0x0AB651,0x093746,0x5497BB

,/*1981-1990*/


0x04974F,0x064B44,0x36A537,0x0EA54A,0x86B2BF,0x05AC53,0x0AB647,0x5936BC,0x092E50,0x0C9645

,/*1991-2000*/


0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,0x7AADBD,0x025D52,0x092D47,0x5C95BA,0x0A954E

,/*2001-2010*/


0x0B4A43,0x4B5537,0x0AD54A,0x955ABF,0x04BA53,0x0A5B48,0x652BBC,0x052B50,0x0A9345,0x474AB9

,/*2011-2020*/


0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x69573D,0x0A4E51,0x0D2646,0x5E933A,0x0D534D,0x05AA43

,/*2021-2030*/


0x36B537,0x096D4B,0xB4AEBF,0x04AD53,0x0A4D48,0x6D25BC,0x0D254F,0x0D5244,0x5DAA38,0x0B5A4C

,/*2031-2040*/


0x056D41,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,0x0AA546,0x5B52BA,0x06D24E,0x0ADA42,0x355B37

,/*2041-2050*/


0x09374B,0x8497C1,0x049753,0x064B48,0x66A53C,0x0EA54F,0x06B244,0x4AB638,0x0AAE4C,0x092E42

,/*2051-2060*/


0x3C9735,0x0C9649,0x7D4ABD,0x0D4A51,0x0DA545,0x55AABA,0x056A4E,0x0A6D43,0x452EB7,0x052D4B

,/*2061-2070*/


0x8A95BF,0x0A9553,0x0B4A47,0x6B553B,0x0AD54F,0x055A45,0x4A5D38,0x0A5B4C,0x052B42,0x3A93B6

,/*2071-2080*/


0x069349,0x7729BD,0x06AA51,0x0AD546,0x54DABA,0x04B64E,0x0A5743,0x452738,0x0D264A,0x8E933E

,/*2081-2090*/
0x0D5252,0x0DAA47,0x66B53B,0x056D4F,0x04AE45,0x4A4EB9,0x0A4D4C,0x0D1541,0x2D92B5

/*2091-2099*/
};

int MonthAdd[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
int LunarCalendar(int year,int month,int day)
{
int Spring_NY,Sun_NY,StaticDayCount;
int index,flag;
//Spring_NY 记录春节离当年元旦的天数。
//Sun_NY 记录阳历日离当年元旦的天数。
if ( ((LunarCalendarTable[year-1901] & 0x0060) >> 5) == 1)
Spring_NY = (LunarCalendarTable[year-1901] & 0x001F) - 1;
else
Spring_NY = (LunarCalendarTable[year-1901] & 0x001F) - 1 + 31;
Sun_NY = MonthAdd[month-1] + day - 1;
if ( (!(year % 4)) && (month > 2))
Sun_NY++;
//StaticDayCount记录大小月的天数 29 或30
//index 记录从哪个月开始来计算。
//flag 是用来对闰月的特殊处理。
//判断阳历日在春节前还是春节后
if (Sun_NY >= Spring_NY)//阳历日在春节后(含春节那天)
{
Sun_NY -= Spring_NY;
month = 1;
index = 1;
flag = 0;
if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)
StaticDayCount = 29;
else
StaticDayCount = 30;
while (Sun_NY >= StaticDayCount)
{
Sun_NY -= StaticDayCount;
index++;
if (month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20) )
{
flag = ~flag;
if (flag == 0)
month++;
}
else
month++;
if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)
StaticDayCount=29;
else
StaticDayCount=30;
}
day = Sun_NY + 1;
}
else //阳历日在春节前
{
Spring_NY -= Sun_NY;
year--;
month = 12;
if ( ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20) == 0)
index = 12;
else
index = 13;
flag = 0;
if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)
StaticDayCount = 29;
else
StaticDayCount = 30;
while (Spring_NY > StaticDayCount)
{
Spring_NY -= StaticDayCount;
index--;
if (flag == 0)
month--;
if (month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20))
flag = ~flag;
if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)
StaticDayCount = 29;
else
StaticDayCount = 30;
}
day = StaticDayCount - Spring_NY + 1;
}
LunarCalendarDay |= day;
LunarCalendarDay |= (month << 6);
if (month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20))
return 1;
else
return 0;
}

void output(int year,int month,int day,int &d_month,int &d_day)
{
const char *ChDay[] = {"*","初一","初二","初三","初四","初五",
"初六","初七","初八","初九","初十",
"十一","十二","十三","十四","十五",
"十六","十七","十八","十九","二十",
"廿一","廿二","廿三","廿四","廿五",
"廿六","廿七","廿八","廿九","三十"
};
const char *ChMonth[] = {"*","正","二","三","四","五","六","七","八","九","十","十一","腊"};
char str[13] = "";
strcat(str,"农历");
if (LunarCalendar(year,month,day)){
strcat(str,"闰");
d_month=(LunarCalendarDay & 0x3C0) >> 6;
strcat(str,ChMonth[(LunarCalendarDay & 0x3C0) >> 6]);
}
else{
d_month=(LunarCalendarDay & 0x3C0) >> 6;
strcat(str,ChMonth[(LunarCalendarDay & 0x3C0) >> 6]);
}
strcat(str,"月");
d_day=LunarCalendarDay & 0x3F;
strcat(str,ChDay[LunarCalendarDay & 0x3F]);
puts(str);
}


int ChangeHourToPeriods(){
time_t now=time(0);
int hour;
std::tm* t=std::localtime(&now);
hour=(int)t->tm_hour;
hour=(hour+1)/2<12?(hour+1)/2:0;
return hour;
}


int main(){
int year,month,day;
std::cout<<"Please input the number of year,month,day:"<<std::endl;
std::cin>>year>>month>>day;
int d_month=0,d_day=0;
output(year,month,day,d_month,d_day);
int hour=ChangeHourToPeriods();
int SumAll=d_month+d_day+hour-2;
std::cout<<"The result is : "<<MAP[(SumAll%6)]<<std::endl;
return 0;
}

因为每次从当宫开始数也就每次都少数了1,但是由于最后子时以0开始所以只减2。


测试结果(测试的时间是21点亥时)
在这里插入图片描述


占卦法


占卦法


还有傅佩荣教授的三组三位数占卦法,这个更多就是易经中的内容太过于深奥,所以直接说计算方法。


三组三位数分别代表下卦,上卦和爻,卦象的三位数对8取余爻对6取余,如果整除就记为除数本身。


然后再去六十四卦中复制打表,最后得到卦象以及爻


整体实现如下


#include<iostream>
#include<string>
#include<vector>


std::vector<std::string> TRIGRAM=std::vector<std::string> {"乾","兑","离","震","巽","坎","艮","坤"};
std::vector<std::string> TRIGRAMMAP {
"乾为天","泽天夬","火天大有","雷天大壮","风天小畜","水天需","山天大畜","地天泰",
"天泽履","兑为泽","火泽睽","雷泽归妹","风泽中孚","水泽节","山泽损","地泽临",
"天火同人","泽火革","离为火","雷火丰","风火家人","水火既济","山火贲","地火明夷",
"天雷无妄","泽雷随","火雷噬嗑","震为雷","风雷益","水雷屯","山雷颐","地雷复",
"天风姤","泽风大过","火风鼎","雷风恒","巽为风","水风井","山风蛊","地风升",
"天水讼","泽水困","火水未济","雷水解","风水涣","坎为水","山水蒙","地水师",
"天山遁","泽山咸","火山旅","雷山小过","风山渐","水山蹇","艮为山","地山谦",
"天地否","泽地萃","火地晋","雷地豫","风地观","水地比","山地剥","坤为地"

};

int main(){
std::vector<int> LowToHigh(3);
std::vector<std::string> results(3);
std::cout<<"Input 3*xxx like(111,222,333),means from up to high"<<std::endl;

for(int i=0;i<3;++i){
std::cin>>LowToHigh[i];
}

LowToHigh[0]=LowToHigh[0]%8==0?8:LowToHigh[0]%8;
LowToHigh[1]=LowToHigh[1]%8==0?8:LowToHigh[1]%8;
LowToHigh[2]=LowToHigh[2]%6==0?6:LowToHigh[2]%6;



for(int i=0;i<2;++i){
results[i]=TRIGRAM[LowToHigh[i]-1];
}
results[2]=std::to_string(LowToHigh[2]);

std::cout<<"下卦:"<<results[0]<<" 上卦:"<<results[1]<<" "<<results[2]<<std::endl;
std::cout<<"卦象: "<<TRIGRAMMAP[(LowToHigh[0]-1)*8+LowToHigh[1]-1]<<std::endl;
}

这里测试的例子是视频中的数字
在这里插入图片描述


结尾


有的时候真的需要一些自己的沉淀时间,不能忘了最初的目标。写这篇Blog也并不是为了宣传封建迷信,而是希望让更多程序圈的人想想当初我们喜欢敲代码到底是为了什么?我们喜欢的是将代码作为工具实现一些有趣的功能,并不是为了水论文或者工作被迫的去东拼西凑弄出一些用处不大的东西。


好多想吐槽的话最终还是打了又删,无法改变现状的时候只能屈服于现状,我相信不止我一人如此。但是请不要忘了 潜龙勿用见龙在田,终日乾乾飞龙在天


作者:shelgi
来源:juejin.cn/post/7176629565559685178
收起阅读 »

买房后,害怕失业,更不敢裸辞,心情不好就提前还房贷,缓解焦虑

自从买房后,心态有很大变化。虽然住自己的房子,心情和体验都很好,但是一把掏空钱包,很焦虑。买房后现金流一直吃紧,再加上每年16万的房贷,我很焦虑会失业。之前我喜欢裸辞,现在不敢想裸辞这个话题。尤其是在行业下行期,找工作很艰难,背着房贷裸辞,简直是头孢就酒,嫌命...
继续阅读 »

自从买房后,心态有很大变化。虽然住自己的房子,心情和体验都很好,但是一把掏空钱包,很焦虑。买房后现金流一直吃紧,再加上每年16万的房贷,我很焦虑会失业。之前我喜欢裸辞,现在不敢想裸辞这个话题。尤其是在行业下行期,找工作很艰难,背着房贷裸辞,简直是头孢就酒,嫌命太久。


焦虑的根源是背负房贷,金额巨大,而且担心40岁以后失业,还不上房贷。


一次偶然的沟通


"你的贷款利率调整了吗",同事问我。


同事比我早两年在北京买房,他在顺义买的,我在昌平买的,我俩一直有沟通房贷的问题。但我没听说利率有调整,银行好像也没通知我,于是我问道:”我不知道啊,你调整了?调到多少了?“。


”调的挺多的,已经降到了 4.3%“。同事兴高采烈的回复我。


”这么牛逼,之前我记得一直是4.85%,我去看看我的利率“,我听说房贷利率下降那么多,很是兴奋。


然而我的房贷利率没有调整,我尝试给银行打电话,沟通的过程很坎坷。工商银行客服说了很多,大概意思是:利率会自动调整,无需申请,但是要等到利率调整日才会调整”。我开始很不理解,很生气,利率都调整了,别人也都调整了,凭什么不给我调整呢?


我想到同事有尝试提前还贷,生气的时候,我就萌发了提前还贷的想法。


开始尝试提前还贷,真香


我在22年初贷款买房,其中商业贷款 174 万,贷款25年,等额本息,每个月要还 1 万的房贷。公积金贷款每个月大概需要还 2500。每个月一万二的房贷还是很有压力的,尤其是刚买房的这一两年,兜里比脸都干净,没存款,不敢失业,更不敢裸辞。


即便兜里存款不多,也要提前还贷,因为实在太香了。


我在工行App上,申请 提前还贷,选择缩短 18个月的房贷,只需要 6万2,而我每个月房贷才1万,相当于是用 6 万 顶 18 万的房贷。还有比这更划算的事情吗?


image.png
预约提前还款后,银行会安排一个时间,在这个时间前,把钱存进去。到时候银行就会扣除,如果扣除金额不足,那么提前还款计划则自动终止,需要重新预约!


工行的预约还款时间大概是1个月以后,我是10-15号申请提前还款,银行给的预约日期是 11-14号,大概是1个月。


提前还款,比理财强多了


这次还贷以后,我又申请了提前还款, 提前还 24 期,只需要 9 万,也就是 9 万顶 24 万;提前还 60 期,只需要 24 万,相当于 24 万顶 60 万。


image.png


image.png


还有比提前还贷收益更高,风险更低的理财方式吗?没有! 除了存款外,任何理财都是有风险的。债券和基金收益和风险挂钩,想找到收益5%的债券基金,要承担亏本风险。你惦记人家的利息,人家惦记你的本金!


股票的风险更不必说,我买白酒股票已经被套的死死,只能躺平装死。(劝大家不要入 A 股)


提前还贷划算吗?


我目前的贷款利息是 4.85%,而存到银行的利息不会超过 3% ,很多货币基金只有 2%了。两者利息差高达 3%,肯定是提前还贷款更加合适。


要明白,一年两年短期的利息差还好,但是房贷可是高达 25 年。25年 170 万贷款 3% 的利息差,这个金额太大了。提前还了,省下来的钱还是很多的。例如刚才截图里展示的 提前还 24 万顶了 60 万的房贷。


网上很多砖家说,“要考虑通货膨胀因素,4.85% 的贷款利率和实际通货膨胀比起来不高,提前还款不划算。”


砖家说话都是昧良心的。提前还贷款是否划算,只需要和存款利率比就行了,不需要和通货膨胀比。因为把钱存在银行也会因为通货膨胀贬值。只有把钱 全都消费,全部花光才不会受通货膨胀的困扰,建议砖家,多消费,把家底败光,这样最划算!


砖家们一定是害怕太多人提前还贷,影响了银行的放贷生意。今年上半年,提前还贷已经成潮流,有些银行坐不住,甚至关闭了提前还贷的入口…… 所以要抓紧,没准哪天就提高了还贷门槛,或者直接禁止。


程序员群体收入高,手里闲钱多,可以考虑提前还贷款,比存银行划算多了,别再给银行打工了!


作者:五阳神功
来源:juejin.cn/post/7301530293378727971
收起阅读 »

流量思维的觉醒,互联网原来是这么玩的

流量就是钱,这是一个很原始的认知。但最开始我并不清楚流量和钱之间是如何相互转化的。 微创业,认知很低 大学时期,不管是出于积累项目经验、还是折腾新技术的需要,我有做过一个相对完整的项目。 没记错的话,应该是在20年10月份启动的。当时在宿舍里买了一台激光打印机...
继续阅读 »

流量就是钱,这是一个很原始的认知。但最开始我并不清楚流量和钱之间是如何相互转化的。


微创业,认知很低


大学时期,不管是出于积累项目经验、还是折腾新技术的需要,我有做过一个相对完整的项目。


没记错的话,应该是在20年10月份启动的。当时在宿舍里买了一台激光打印机,做起了点小买卖。所以就发现如果我手动给同学处理订单会非常麻烦。他们把文件通过qq发给我,我这边打开,排版,确认格式没有问题之后算一个价格,然后打印。


所以根据痛点,我打算开发一个线上自助下单,商户自动打印的一整套系统。


百折不挠,项目终于上线


21年年中克服各种困难终于实现整套系统,提供了小程序端,商户客户端,web端。


用户在手机或网页上上传文件后会自动转换为pdf,还提供了在线预览,避免因为格式与用户本地不同的纠纷。可以自由调节单双面、打印范围、打印分数、色彩等参数。实时算出价格,自助下单。下单后服务器会通知商户客户端拉取新任务,拉取成功后将文件丢入打印队列中。打印完成后商户客户端发送信息,并由服务器转发,告知用户取件。


image.png


image.png


大三下学期,宿舍里通过线上平台,在期末考试最忙那段期间经过了“订单高峰”的考验,成交金额上千块钱。看着我商户端里面一个个跳动的文件,就像流入口袋里的💰,开心。


商业化的很失败


没想到,我自己就是我最大的客户。


期末考完,其实想拉上我的同学大干一场,让校里校外的所有的商户,都用上我们的软件,多好的东西啊。对于盈利模式的概念非常模糊,同时也有很强的竞品。我的同学并不看好我。


我对商业化的理解也源自美团模式,美团是外卖的流量入口,所以对商户抽佣很高。滴滴是打车的流量入口,对司机的抽佣也很高。所以我认为,假设我未来成为了自助打印的流量入口,那应该也可以试试抽佣模式。


而且就算我不能为商户引流,也能解放他们的双手。


当时的我,一个人做技术,做UI,还要做商业计划,去地推,真的搞得我精疲力尽。反正后面觉得短期内变现无望,就去腾讯实习了。


其实也推广了2个商户,但是他们因为各种原因不愿意用。一个是出于隐私合规风险的考虑,一个是订单量少,不需要。


所以基本这个自助打印只能框死在高校。大学生打印的文件私密性很低,但是单价低,量多,有自助打印的需求。还有一部分自助打印的场景是在行政办事大厅,这种估计没点门门道道是开不进去的。


看不懂的竞品玩法


商户通过我的平台走,我这边并不无本万利。


因为开通了微信支付、支付宝支付,做过的小伙伴应该都知道办这些手续也会花一些钱,公司还要每年花钱养。还有需要给用户的文档成转换成pdf,提供在线预览,这很消耗算力和带宽,如果用户的成交单价非常低,哪怕抽佣5%都是亏的。比如用户打印了100份1页的内容,和打印了1份100页的内容,对我来说成本差别很大,前者很低,后者很高。


当时学校里已经有一部分商户用上自助打印了。一共有3个竞品。


竞品A:不抽佣,但是每笔订单对用户收取固定的服务费,界面简陋,有广告。


竞品B:不抽佣,不收用户的服务费,界面清爽无广告。


竞品C:彻彻底底走无人模式,店铺内基本没有老板,店铺是自营或加盟的。


前期缺乏市场调研,后期缺乏商业认知


当时我在没有摸清自己商业模式,市场调研也没怎么做好的情况下。一心想的就是先把东西做出来再说,卖不成自己还能学到技术。毕竟技术这个玩意不在项目里历练,永远都是纸上谈兵。所以对于商业化的设想就是搞不成就不搞了。


我当时的想法就是要“轻”运营,就是最好我的利润是稳定的,不会亏损的。商户如果要用就得每笔订单都给我一笔钱。


后面为了补齐和竞品的功能差距,也耗费了大量心力。让我把项目从一个大学课程设计,变成了一个有商业化潜力的产品。


竞品玩法的底层逻辑


商业化的时候,就发现这个市场还是蛮卷的,不可能直接和商户收钱。竞品B不仅免费,还想着帮商户创造额外收入,做“增益”。那我确实是没有精力去对抗的。


我当时也没搞懂自己的定位,我究竟是tob还是toc。当时想着我精心设计的界面,怎么可以被广告侵蚀?那可是我的心血。所以一心想把产品体验做的比竞品好,就会有人用。但这个定位也很模糊,因为如果商户不用你的,用户怎么可能用你的下单呢。


其实应该to rmb。面向利润开发。美,是奢侈品,那是属于我内心的一种追求,但他很难具有说服力让商户使用。在国内的各种互联网产品,不盈利的产品最后都是越来越粗糙,越来越丑的,都要降本增效。而rmb是必需品,如果不能为各方创造价值,那就没有竞争力。


所以后续分析了一下各家的玩法:


竞品A:传统商业模式,依靠用户强制付费和广告,市占率一般,和第一差了10倍数量级。


竞品B:烧钱模式,免费给商户用,免费给用户用,自己想办法别的渠道做增益,还要补贴商户。市占率第一。先圈地,再养鱼,变现的事之后再说。


竞品C:不单单做打印软件,卖的是项目。一整套自助打印店的解决方案,不知道店铺能不能赚钱,但是可以先赚加盟商的钱。这个对商业运作的要求会很高,我一时半会做不了。


大佬指点了一下我


他说,你看现在什么自助贩卖机,其实就是一个流量入口。至于别的盈利不盈利再说,但是流量是值钱的。


我最近去查阿拉丁指数,了解到了买量和卖量的观念,重新认识了流量,因为知道价格了。


买量和卖量是什么?


买量说的就是你做了一个app,花钱让别人给你引流。


卖量就是你有一个日活很高的平台,可以为别人引流。


买量和卖量如何结算?


一般分为cpc和cpa两种计价方式。前者是只要用户点击了我的引流广告,广告主就得掏钱。后者是用户可能还需要注册并激活账号,完成一系列操作才掏钱。


一般价格在0.1-0.3元,每次引流。


后面我查了一下竞品B在卖量,每天可以提供10-30w的uv,单次引流报价0.1元。也就是理想情况下,每天可以有1-3w的广告费收入。


侧面说明了竞品B的市占率啊,在这个细分市场做到这个DAU……


关于流量,逆向思维的建立


流量是实现商业利益的工具。


工具类应用通过为别人引流将流量变现,内容类应用通过电商将流量变现的更贵。


依靠流量赚钱有两种姿势,主动迎合需求,和培养需求。前者就是你可以做一些大家必须要用的东西,来获得流量。比如自助打印小程序,只要商户接入了,那么他的所有顾客都会为这个小程序贡献流量。比如地铁乘车码,所有坐地铁的人都会用到,比如广州地铁就在卖量,每天有几百万的日活。


培养需求就是做自己看好的东西,但是当下不明朗,尝试发掘用户潜在的需求。


流量,如果不能利用好,那就是无效流量。所以正确的姿势是,发掘目标人群 -> 设计变现方案 -> 针对性的开发他们喜欢的内容或工具 -> 完成变现。而不是 自己发现有个东西不错 -> 开发出来 -> 测试一下市场反应 -> 期盼突然爆红,躺着收钱。


研究报告也蛮有意思,主打的就是一个研究如何将用户口袋里的钱转移到自己口袋里。做什么产品和个人喜好无关,和有没有市场前景相关。


互联网是基于实体的


互联网并不和实体脱钩,大部分平台依赖广告收入,但广告基本都是实体企业来掏钱。还有电商也是,消费不好,企业赚不到钱,就不愿意投更多推广费。


作者:程序员Alvin
来源:juejin.cn/post/7248118049583906872
收起阅读 »

真正的成长没有速成剂,都是风吹雨打过来的

一个人真正的成长一定是极其不容易的,如果想通过一两本书,一两个鸡汤文案,一两场培训就能够获得成长,那简直是痴人说梦,真正的成长一定不会是轻松的,一定是经过一次又一次的跌倒,然后爬起,对所做过的事,所经历的事进行一次又一次的复盘,总结,思考,最终才能慢慢认识到事...
继续阅读 »

一个人真正的成长一定是极其不容易的,如果想通过一两本书,一两个鸡汤文案,一两场培训就能够获得成长,那简直是痴人说梦,真正的成长一定不会是轻松的,一定是经过一次又一次的跌倒,然后爬起,对所做过的事,所经历的事进行一次又一次的复盘,总结,思考,最终才能慢慢认识到事物的本质,成长不是时间的堆积,也不会因为年龄递增而获得。


思考的难关


毫不夸张的说,思考是这个世界上最难的事,因为思考是要动脑的,而在现在这个信息爆炸的时代,我们想要任何资讯,任何知识,都可以找到现成的答案,所以懒惰就此滋生出来,“都有现成的答案了,我干嘛还要去动脑,我动脑得到的东西也未必有现成的好,而且动脑肚子还消耗能量,这种消耗不亚于体力劳动”,所以思考是最难的,而思考也是获取知识最快的途径。


我们在读书的时候,有些同学看似十分努力,一天感觉都是泡在书本里面的,但是成绩往往都不理想,初高中时,班上有些同学十分努力,对于我这种混子来说,我一定是扛不住的,就比如背英语单词,我发现有一些同学采用“原始人”的方式去背诵,因为我们整个初中换了三四个英语老师,而每个老师的教学方式不一样,其中一个老师就是教死记硬背,英语单词就比如“good”,她的方式是,“g o o d , g o o d”,也就是一个字母一个字母的背诵,后来因为一些原因,又换了老师,老师又教了音标,但是最后我还是发现,很多同学依旧还是“g o o d”,后来我才发现,因为学音标还需要花时间,还要动点脑子,对于一个单词,还有不同的情况,所以还是司机硬背好,这种方式就是“蛮力”,其实只要稍微花点时间去研究一下音标,然后再好好学学,背单词就会轻松很多,所以初高中英语成绩一直比较好,当然,现在很差,词汇量很少,完全是后面吃了懒惰的大亏。


所以,思考虽然是痛苦的,但是熬过痛苦期,就能够飞速成长,如果沉浸在自我感动的蛮力式努力中,那么只会离成长越来越远。


懒惰的魔咒


说到懒惰,我们可能会想到睡懒觉,不努力学习,不努力工作,但这其实并不是懒惰,每天起得很早去搬砖,日复一日地干着重复的事,却没有半点成长,这才是真正的懒惰。


没有思考的勤快是一文不值的,在现在这个社会,各种工具十分普遍,如果我们依旧保持原始人的工作方式,那么最终只会把自己累死,就像很多统计工作,如果认为自己加班到十二点,人工统计出数据来,老板就会很欣赏你,觉得你很吃苦耐劳,那么这是愚蠢的,因为有很多工具可能五分钟就能够搞出来,可偏偏固执去搞一些没用的东西,这有用吗,还有现在是人工智能时代,各种GPT工具那么爽,直接让效率翻倍,但是我就是不用,我就喜欢自己从头搞,那也没办法。


很多时候,所谓的勤快不过是为了掩饰自己的懒惰而已,懒惰得不愿意去接受新的事物,不愿意去学习新东西,总觉得“老一套“万能。


成长过程中,要不断打破自己的认知,冲破自己的心灵上的懒惰,拥抱新鲜事物,这样才不至于和主流脱节。


环境的影响



在南瓜里度日,就成圆形;在竹子里生活,就成长形。



一个人的环境同样是塑造成长的重要因素。环境不仅指物理环境,也包括人际环境和心理环境。在环境中,我们需要学会适应和改变环境,让环境成为我们成长的动力。


人以类聚,物以群分,如果我们身边的人都是不思上进,终日惶惶,那么长时间下来,我们也会受影响,读书时,如果身边的同学都好学,那么自己也绝对不会变得很烂,相反,如果同学都整天无所事事,那么自己自然也不会好到哪里去,当身边的人都是勤于思考,有想法,那么大家就会有一个良好的氛围,这样成长得就比较快,工作中,如果大家都很有热情,分享很多,学习很多,那么自己也不好意思,自然也会去学习。


但是我们每个人的能力都不一样,所以遇到的环境也不一样,所以很多时候,这并不是我们能选择的,所以说在自己没能力选择的时候,那么就要克制自己,别人混,自己不能混,要时刻提醒自己不能松懈,也不要因为别人的闲言碎语而去”同流合污“,始终记住,一切都是为了自己变得更好,不要太在意别人的看法。


保持良好的心态


在这个浮躁的社会,我们的思想和意志总是被这个社会所影响,特别现在短视频如此火爆,”脉脉上面低于百万年薪不好意思发言,抖音上面人均劳斯莱斯,自己同学朋友又买了几套房“,我们的心态时不时会受到打击,原本平稳的步伐一下变得不稳了,想一步升天了,但是当步子迈大了,可能就受伤了。


我们要时刻提醒自己自己是为自己而活,无论别人是真还是假,和自己关系不大,不要被外界过于影响,这个世界上没有一个人的成功是轻易的,都是在黑暗中努力发光的,如果相信了速成,相信快速致富,那么镰刀造已经嫁到脖子上了,而且还割坏了很多把,一茬接着一茬!


即使此刻多么的不堪,也不要放弃,积累自己,也许有一天,我们再相逢,睁开眼睛看,我才是英雄,他日若遂凌云志,敢笑黄巢不丈夫!



今天的分享就到这里,感谢你的观看,我们下期见!



作者:刘牌
来源:juejin.cn/post/7233052510554423333
收起阅读 »

【一点点税务知识】我的工资原来是这样少的

起因是这样的,我发现我的工资代扣个税,相较以前翻了三、四倍,工资也没给我涨呀,怎么交税还多了。怀疑给我算错了,于是我翻了翻资料找到一张税务总局的个人所得税税率表。 它是这样计算的: 1. 一年分成12个月,交纳税也分为12期 2. 本期应预扣预缴税额 = ...
继续阅读 »

起因是这样的,我发现我的工资代扣个税,相较以前翻了三、四倍,工资也没给我涨呀,怎么交税还多了。怀疑给我算错了,于是我翻了翻资料找到一张税务总局的个人所得税税率表



它是这样计算的:


1. 一年分成12个月,交纳税也分为12期

2.
本期应预扣预缴税额 = (累计预扣预缴应纳税所得额 * 税率 - 速算扣除数)- 累计已预扣预缴税额

3.
累计预扣预缴应纳税所得额 = 累计收入 - 累计免税收入 - 累计减除费用 - 累计专项扣除 - 累计专项附加扣除 - 累计依法确定的其他扣除

4.
其中,累计减除费用,按照5000元/月乘以纳税人当年截至本月在本单位的任职受雇月份数计算


举个例子,假设张三每月工资收入20000,各项社会保险金(五险一金)扣除为1000。


在八月份:



  • 张三累计减除费用是5000*8=40000

  • 累计专项扣除是1000*8=8000

  • 排除张三有免税收入等情况,他的累计预扣预缴应纳税所得额为20000*8-40000-8000=112000

  • 累计预扣预缴应纳税所得额112000对应税率表的2级数,所以第八期应预扣预缴税额为(112000*0.1-2520)-累计已预扣预缴税额

  • 累计已预扣预缴税额是前7个月的纳税总和。这样计算,20000*7-5000*7-1000*7=98000 对应税率表的2级数,前7期累计已预扣预缴税额为98000*0.1-2520 = 7280

  • 最后,张三在八月份,他要纳税为(112000*0.1-2520)-7280=1400


等等,文章还没完呢,不然又有人怼我纯水了。



我发现网络上像这类纳税计算器参差不齐,计算公式差得离谱,所以决定自己动手撸一个。



个税计算器


由于html、css、js代码内容长,所以我把这部分内容拼接成一张大图,也方便读源码。css布局大量使用Flex弹性布局,不了解的同学先学习一波《和我女神王冰冰一起学display: flex布局》



描述下js逻辑层:



  • 本月工资、社保(五险一金)、专项附加扣除都要乘以纳税期数,分别计算出各自的累计数

  • 本月工资、社保(五险一金)、专项附加扣除、累计减除费用累计数相减计算后,就是累计预扣预缴应纳税所得额(累计应缴税款)

  • 个人所得税税率表转化成taxRates数据结构,累计预扣预缴应纳税所得额作为参数调用getTaxRate方法返回税率、速算扣除数

  • 累计已预扣预缴税额(已缴税款)计算为纳税期数减1,然后以减后的纳税期数再重复一遍上述计算过程

  • 本期应预扣预缴税额(应交税额)= 累计预扣预缴应纳税*税率-速算扣除数-累计已预扣预缴税额(已缴税款)


布局兼容到了PC端、移动端,它们分别是这样的:



想要源码的同学,可以访问下面👇链接保存页面即可。


个税计算器在线链接:http://www.linglan01.cn/c/salary/


最后的话


文章中一类的个税计算器,一般计算出来的结果是有偏差的,原因如下:



  • 每月工资不是固定的,受KPI影响工资会有一定起浮

  • 奖金类的收入也要计算进去,如果有奖金没有计算进累计预扣预缴应纳税所得额,那计算的结果就是会偏差


所以说,个税计算器只能计算出大概的税。


想要准确的计算自己纳税情况,建议下载个人所得税APP。



当工资收入越高,应纳税所得额比重也会增大,比重在到一定程度后,我想我们应该要考虑如何合法避税。


每年年未都会有一次在个人所得税APP提交专项附加扣除,它能一定程度上补返回税额给我们。



另外,开通个人养老金帐户也可以进行一定额度的避税,将来养老滋不滋润重点看这个帐户。我收入还不足以供个人养老帐户,有条件、有需要的同学可以去了解一下。


如果我的文章对你有帮助,您的👍就是对我的最大支持^_^。


作者:凌览
来源:juejin.cn/post/7270395503821160506
收起阅读 »

有些程序员表面老实,背地里不知道玩得有多花

作者:CODING来源:juejin.cn/post/7259258539164205115

img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


作者:CODING
来源:juejin.cn/post/7259258539164205115

关于我坚持 2 年的学习打卡心得

学习的心得 记住两个概念,终值和峰值。这是一个心理学专家提出来的。 峰值是指这段体验中的最高峰。终值是指这段体验结束后的感觉。它们都分为两个方向,正向和负向。 在学习的过程中,想体验到正向的终值和峰值,是比较困难的。我如何让学习变得相对愉悦一点呢?穿插自己比较...
继续阅读 »

学习的心得


记住两个概念,终值和峰值。这是一个心理学专家提出来的。


峰值是指这段体验中的最高峰。终值是指这段体验结束后的感觉。它们都分为两个方向,正向和负向。


在学习的过程中,想体验到正向的终值和峰值,是比较困难的。我如何让学习变得相对愉悦一点呢?穿插自己比较喜欢的,即自己比较擅长的。例如,我每次学习时,都会划分时间片,因为目标越小,压力越小。学习计算机网络,我每次强制自己学 25 分钟,时间一到就立刻停止,即使我还没学完整,此时去做一点自己喜欢的输入,例如去吃点水果零食,看会儿朋友圈。之后就是两种任务来回切换。如果让我连续学习几个小时的计算机网络,我可能很难坚持到最后。


为了避免终值是负向的,我们制定计划的时候,要考虑量力而行,以天为最小单位,不要给自己一天安排太多任务,根据自己的情况灵活决定,每天我们都能总结自己的收获,一目了然。人的大脑,都喜欢看到眼前的利益,我们的远大理想和目标,很难满足大脑。让自己能从每天的学习上得到正反馈。学东西,制定计划,不是为了用某种标准框架自己,我们是为了成长,而不是为了满足框架,专注做事本身。



  • 戒掉手机。物理隔绝。

  • 收集素材,整理输出。

  • 不搞形式主义,直接开始。

  • 带着问题去探索,做到记少忆多。

  • 要允许自己写出来垃圾,否则连垃圾都写不出来。

  • 检测自己获得了什么,也就是做题,实践应用。这样才能实现闭环。

  • 加工自己的知识,即仔细的思考、精细化的提问,多问自己“为什么”。


坚持的秘诀



  • 要么此时做,要么不再做。

  • 不要花大量的时间做容易的环节。

    • 例如学习数据结构与算法,长时间都去学习最基础的数组、链表、队列,这就是伪勤奋。相对的真勤奋,是真的那些让你需要感到思考、克服困难的任务。



  • 番茄模式。轮换式工作,投资式休息。

  • 如果不去做完成这个任务,就要去做更难得任务。

    • 例如学习计算机网络,我不想学习的时候,就告诉自己要去看 CSAPP。



  • 领先自己的计划。如有偷懒,也可接受,不至于一日崩盘。

  • 完成每天的目标后,其余时间,自由安排,一切感兴趣之事。

  • 要么自律,要么他律。

    • 什么是他律?大声的告诉你在意的人,你在学什么。



  • 不想学的时候,也先打开看看。根据惯性定律,改变状态往往是最难的,但维持状态却是相对简单的。


做笔记


笔记有两个方向,四个作用。
关于方向,一个方向记录别人说的话,另一个方向是记录看过的书、视频。关于作用,请看下图。


WechatIMG160.jpeg


总结


没有完美的方法论,只有完美的行动,祝愿看完的同学们,都能有完美的人生。


有修养的程序员才可能成长为真正的工程师和架构师,而没有修养的程序员只能沦为码农,这是码农和工程师的关键区分点。


修养指的是:英文能力、提问的能力、写代码的修养、安全防范意识、软件工程和上线规范、编程规范等。这些能力的训练和培养将为后续的学习和发展夯实基础。



作者:龚国玮
来源:juejin.cn/post/7204349756620750908
收起阅读 »

既当产品又当研发,字节大哥手把手带我追求极致

在学校的时候,计算机相关专业的同学应该都或多或少都被“大作业”折磨过,没有为“大作业”熬过夜通过宵的大学生活可以说是不完整的。步入公司后才发现,校园里的“大作业”就像玩具一样,需求明确、解决方案明确、最终产品效果明确、甚至还有前人的作品可以参考,而在公司里要做...
继续阅读 »

在学校的时候,计算机相关专业的同学应该都或多或少都被“大作业”折磨过,没有为“大作业”熬过夜通过宵的大学生活可以说是不完整的。步入公司后才发现,校园里的“大作业”就像玩具一样,需求明确、解决方案明确、最终产品效果明确、甚至还有前人的作品可以参考,而在公司里要做的东西,上面说的特点至少有一个不具备,甚至通通不具备。


而我在字节实习的过程中,所经手的恰恰就是这么一个需求不明确、解决方案不明确、最终产品效果不明确的项目。整个过程中有过焦头烂额毫无进展的时刻也有过欲哭无泪的时刻,还好有我的mentor带着我一路披荆斩棘、过关斩将。


首先和大家讲一下项目背景,当时我在的组是视频会议移动端,经历了近三年大流感的洗礼,相信大家对于视频会议中可能遇到的各种问题如数家珍,包括但不限于没声了、没音了、没画面了、画面卡顿、画面不清晰、画面和语音不同步、同步屏幕时闪退等等等等。作为一个服务企业级的B端产品,出现以上问题时就可能会投诉,然后经过客户成功部门转手到运营再转手到研发这里,研发就需要判断分析一下究竟是我们产品的原因、还是客户本身设备的问题、或者是第三方环境的因素,当用户的量级上来后,这样的客诉就会很多,会严重占用oncall的研发人员的时间以及精力。


我的mentor,一个专注于解决问题、避免重复劳动的人,一个字节范我觉得有E+的人,一个虽然身处移动端但是前后端甚至网络也都会的人,觉得这样很不OK,应该有个工具,能够自动的分析出来客户究竟遇到了什么问题,分析不出来的再找研发进行排查。没有这个工具也不影响业务开发的进展,所以整个项目并不存在时间上的紧迫性,但是呢,有这个工具做出来后肯定会大大降低研发的开发时间,所以项目的必要性还是有的。于是,我作为刚入职的实习新人,这个项目就交给我来做了。


而我,一个还没有从校园中完全出来的新兵蛋子,说实话面对这样的场面是一脸懵逼的,对于要做啥、要怎么做可以说是一无所知,我的mentor在我入职后,让我先了解了解背景,第一周就带着我oncall了,让我知道都可能有样的客诉,手把手给我演示他们正常的排查问题的方式。先了解客户反馈的情况,然后捞出来客户对应时间的设备信息以及设备日志。


说实话,作为一个新人,或者说我本身对于项目有一种畏难心理,碰到一点难题就总是想着往后拖,或者摆烂先不管然后就搁置在一边不想再问津了,但是我的mentor是一个有着坚定信念的人,差不多就是见山开山,见水架桥这种,遇到问题会主动找到相关人员一起解决,可以说就是有那种主人翁,项目owner的意识。于是,我就跟在他的后面,和整个团队的不同角色沟通他们遇到问题时排查的思路,试图总结出来一种通用的流程。在过程中,难免有许多困难,我的第一反应是退缩,但是导师的第一反应是拉会拉上相关人员一起讨论,看看用什么方式可以解决。比如在如何确定设备日志和故障表现的映射关系时,先后调研了多种方式看看相关团队有没有类似的做法以及他们最后实现的效果,包括大数据机器学习、代码状态流转图、自定义规则引擎等多种方式,最后调研后决定采用自定义规则引擎的方式。在实现需求的时候,需要其他团队协作时,他总是直接向前提出自己的需求,而我向一个陌生人发消息之前总要做一些心理建设,总是在担心些什么、害怕些什么,而事实上大家都是打工人,谁也不比谁厉害多少,对方不配合那就拉+1进群一起看看,解决不了就向上暴露问题。


于是,导师披荆斩棘在前,我在后面跟着实现他的设想。我们很快就做出来了第一个版本。通过Python自动化下载设备日志,然后正则匹配筛选出含有特定标记的日志,并对他们的出现频率次数做出判断。因为Python是解释型的语言,所以可以把规则直接写成python语言,用eval或者exec函数进行执行。第一个版本做出来后,导师又积极的带着我去给其他人宣传我们的这个工具。然后根据他们的反馈继续进行相关改进,最后我离职前实现的效果就是@ 一个群里的机器人,告诉他出现问题的ID,他就能自动化的拉下来日志进行排查,然后告诉你他分析的结果,整个交互非常的方便。


一个成功的项目必须要有一个负责的owner,我的导师就向我展示了一个优秀的owner是如何一步步解决问题、排除项目中的难关,如今我也正式成为一名打工人,希望我也能早日如他一般自如的面对工作。


我是日暮与星辰之间,出道两年半的Java选手,相信时间的力量,一起成为更好的自己!


作者:日暮与星辰之间
来源:juejin.cn/post/7211801284709138493
收起阅读 »

面试多起来了

就在昨天 10.17 号,同时收到了三个同学面试的消息。他们的基本情况都是双非院校本科、没有实习经历、不会消息中间件和 Spring Cloud 微服务,做的都是单体项目。但他们投递简历还算积极,从今年 9 月初就开始投递简历了,到现在也有一个多月了。 来看看...
继续阅读 »

就在昨天 10.17 号,同时收到了三个同学面试的消息。他们的基本情况都是双非院校本科、没有实习经历、不会消息中间件和 Spring Cloud 微服务,做的都是单体项目。但他们投递简历还算积极,从今年 9 月初就开始投递简历了,到现在也有一个多月了。


来看看,这些消息。
73cef56826e05f5c6076d35e6bcf442.jpg
7ceca957a2af480d4ae4fe345698b35.jpg
674493f3926c19f65f16c529e1c231b.jpg


为什么会这样?


9 月中旬就开始正式批校招了,而且从往年的数据来看,每年参加秋招的公司大概有 1700 多家,为什么大多数双非本科,到了 10 月中旬才有面试机会呢?


主要原因是软件行业这两年的情况是“供大于求”,一方面是软件公司的业务趋向平稳,招聘需求量不大;而另一方面是应届生逐年增多,而且涌向软件行业的人也越来越多。


a.毕业生增多


image.png
从图片可以看出,每年本硕毕业生都在增多,而 2022 年本硕毕业生已经达到了惊人的 1076 万人了,请问咱们国家的就业缺口有这么大吗?


b.业务平稳期


软件的生命周期中有两个大的阶段:



  1. 程序开发期:需要大量的人力协同开发一款程序,这时候需要大量的研发人员。

  2. 程序维护期:程序开发完了,只有一些小的需求和功能维护等工作,这个时候只需要少量的开发人员就可以搞定了。


而目前大部分互联网公司都已经进入了第二个阶段“程序维护期”,如果程序开发期需要 1000 人的话,那么维护期 50 个人就够了,因为没有很多的功能要做,只是少量修修补补的工作。


c.越来越多人的涌入


2018 年之后,计算机成为中国薪资最高的行业,一举超过了多年霸榜的金融行业,所以大家慢慢全部都明白了“计算机行业赚钱啊”。


所以,综合上述情况大家可以看出,目前的供需关系是:供给方(毕业的学生)远远大于需求方(用人单位),所以目前计算机行业就业严峻是一个必然事件。


如何获得Offer?


既然想拿高薪、既然没有其他的出路、既然已经上了贼船,那么怎么才能在竞争激烈的校招中找到满意的 Offer 呢?


你需要做以下四件事:



  1. 海投简历

  2. 面试前充分准备

  3. 准备好自我介绍

  4. 调整好心态&积极面试


1.海投简历


海投简历是指,你要把你能找到的、你能看到的所有和你岗位相关的职位都投递一遍(简历)。


举个例子,例如你在 Boss 上投递 Java 研发工程师的工作,那么就搜索“Java”,然后把你能找到的(看到的)所有公司,且没投递的公司(投递的公司用 Excel 记录下来),全部(打招呼)投递一遍简历。


注意:不用去看 HR 发布的职位要求,很多公司发布的职位要求是比较高的,但大部分情况下,她们都会减低标准,给更多应聘者笔试和面试的机会。所以说,不要看到很高的职位要求就退缩了,任何机会都不要放过,海投就是投递所有和你职位相关的所有公司,一家都不放过,因为他的失败影响不大,但万一成功了就有工作了。



海投简历什么时候结束?
答:海投简历通常是到 11 月中下旬,或拿到第一个保底 Offer 之后,才会逐渐停止,所以做好打持久战的准备,没有任何事是一蹴而就的。



2.面试前充分准备


面试之前,一定要把该公司的岗位技能要求,以及该公司的往年历史真题全部过一遍。


对于自己不会的技能一定要提前学习,还有往年的历史真题也要仔细过一遍,把不会的问题在面试前一定要搞定,防止面试时再次被面试官问到。


3.准备好自我介绍


细节决定成败,面试本质上是“自我推销”的过程。如何在短短的几十分钟内打动面试官,从来都不是一个简单的问题。


所以怎么开场?怎么让面试官对我产生兴趣?非常关键。


好的自我介绍,一定要讲明白以下 4 点:



  1. 你是谁?

  2. 你会啥?

  3. 你有什么成就?

  4. 为什么是你?


a.你是谁?


自我介绍的第一步一定是自报家门,例如,我是张三,2015 年毕业于西安电子科技大学,毕业之后一直从事 Java 开发的工作,做过 XXX 公司的高级研发工程师,也很高兴参加贵公司的面试。



校招版本:我是李四,24 届学生,目前就读于西安电子科技大学,硕士学历,就读的专业是软件工程(非软件相关专业就不要介绍你的专业了),很荣幸参加贵公司的面试。



b.你会啥?


技术岗位,最看重的就是你的技术能力,所以这一步一定要好好准备,并详细的介绍你会的技能。


要做好这一步,在面试前一定要查阅应聘公司的岗位要求和使用的技术栈,这样你就能针对性的进行技能介绍了。而当面试官看到一个应聘者的技术栈,和自己公司的技术栈完全匹配的时候,你的面试成功率就大幅提升了。


例如,你可以这样介绍。
我会的技能是并发编程、MySQL、Redis、Spring、Spring MVC、Spring Boot、Spring Cloud Alibaba Nacos、Sentinel、Seata、Spring Cloud Gateway、Skywalking、RabbitMQ 等技术栈。


c.你有什么成就?


学以致用很重要,尤其是校招,你上面说你会,那么怎么证明你真的会你说的哪些技术呢?你使用上述技能获得过什么成就?或做过什么项目呢?


如果你参加过 ACM、蓝桥杯等编程竞技大赛,可以在自我介绍的时候详细的说一下,参赛情况和获奖经历。


如果你没有参赛经历和获奖经历,那么你可以介绍你用上面的技能做过什么项目?


例如,我使用 Spring Cloud Alibaba 全家桶 + Spring Cloud Gateway + MySQL + Redis + RabbitMQ 总共做过 3 个项目,其中有两个项目我已经写在简历上了,等会您有任何关于项目或技能点的问题都可以问我。


d.为什么是你?


前面三点是陈述,而最后这点就要升华了,这也是你进行“自我吹嘘”最后的机会,也是打动面试官最关键的时刻,“峰终定律”就是讲这个事。


为什么要你?就是你要介绍自己的优点了,例如(但不限)以下这些:



  1. 我的技术栈和公司非常匹配:因为我的技术栈和公司的技术栈非常匹配,所以来了之后就能直接干活,大大节省了新人培养成本。

  2. 我对公司的业务比较熟悉:我之前从事过,或者详细的了解过公司的相关业务,所以来了之后直接能干活,大大节省了业务培训成本。

  3. 我做事比较专注:例如,去图书馆看书,经常忘记吃中午饭,等到肚子饿的不行了,抬头一看表已经下午 3 点了。

  4. 我自学能力比较强:例如,整个微服务,像 Spring Cloud Alibaba 整个技术栈,我只用了 2 周的时间就全部学会了,并且能用它开发一个 Java 项目,期间遇到的所有问题,我都能自行解决。

  5. 我喜欢编程:例如,您可以看我的 GitHub 我每天都有练习和提交代码。


4.调整心态&积极面试


a.避免过度紧张


学的好也要面的好,尤其是第一次面试,紧张是不可避免的事情,所以你要告诉自己“允许自己适当紧张”这是正常的表现。


你越在意什么就越容易失去什么,所以不要过度的在意“自己比较紧张”这件事,它是正常的情况,我工作 13 年了,现在出去面试依然会紧张,所以“紧张”这些事,本身就是人类正常的情绪。


如何缓解紧张?


答:把注意力和精力放在面试官问的问题上,而不是过度的关照自我,面试前深呼吸,面试时把注意力放在自身以外的其他事情上,这样就能大大的减少紧张的情绪。


b.不要害怕失败


越害怕什么就越容易失去什么,所以不要害怕失败,失败乃成功之母,任何事情都是有意义的,即使失败也不例外,它能让你变成更好的自己。


你把每次面试都当成是自我检验和自我提升的机会,无论结果如何,你都能收获成长,越不在意结果,可能结果越理想。


c.不要太在意薪资


万事开头难,尤其是校招第一份工作,不要太在意薪资,你真正赚钱是 3-5 年工作经验之后,所以事情不可能一蹴而就,也不可能一口气吃成一个大胖子。所以先入行比什么都重要,熟练之后才能真正的赚到钱。每个人都是一样,所以不要太在意入行薪资。


小结


软件行业业务趋于平稳,涌入的人越来越多,所以也会越来越卷,每年都是当下最好的一年,所以你只有做到最好,才有可能拿到满意的 Offer。多投简历、面试前做好充足准备、准备好自我介绍、调整好心态、积极去面试,相信做好这些,结果就不会太差。加油,少年。


作者:Java中文社群
来源:juejin.cn/post/7291134345920643107
收起阅读 »

程序员什么时候感觉到编程能力突飞猛进?

我是一个41岁老程序员,从 2007年硕士毕业参加工作以来,已经在编程一线工作16年了。平时一直有逛技术社区的习惯。最近在社区看到一个讨论,题目是《你什么时候感觉到编程能力突飞猛进》。我觉得这个题目挺有意思,于是借这篇文章,也来聊聊自己的程序人生。 我觉得自己...
继续阅读 »

我是一个41岁老程序员,从 2007年硕士毕业参加工作以来,已经在编程一线工作16年了。平时一直有逛技术社区的习惯。最近在社区看到一个讨论,题目是《你什么时候感觉到编程能力突飞猛进》。我觉得这个题目挺有意思,于是借这篇文章,也来聊聊自己的程序人生。


我觉得自己编程能力突飞猛进,应该是分了几个阶段吧。


第一阶段:研究生时期封闭式的项目开发阶段


我 2004 年电子科技大学计算机科学与技术本科毕业,同年留在母校,继续攻读计算机系统结构的硕士学位。研一时上了很多专业必修课,比如《Unix 系统设计》,《Unix 环境下的高级编程》,《Unix 网络编程》等等。但是这些书本上的知识,我也只是课堂上跟着老师过了一遍,缺乏动手实战。研一在校园里,也只是完成这些教材的课后作业而已。我当时具体有多菜?连 GDB 调试器都不熟,代码执行出错,我只会用 printf 大法来定位问题。


研二时我们教研室的同学们,在当时段翰聪段博的带领下,到北京声学所高性能网络实验室做项目。白天在实验室,晚上九点之后才返回海淀区知春路的学生宿舍休息,算是一年的封闭式开发吧。当时教研室承接的项目是国家发改委 CNGI 专项基金子课题——基于 IPv6 的 P2P 弹性重叠网络智能节点的研制。段博当时还在攻读他的博士学位,他现在已经是电子科技大学计算机科学与工程学院的教授和博士生导师了。


这一年的封闭式开发,我最先的任务是负责实现一款基于 P2SP 协议的负载发生器,作为测试工具,来验证项目研制的网络智能节点的各项性能指标和参数。刚开始动手编写项目代码时,我就立即感受到这种大型项目和校园里编写的那些课后作业代码的具体差异。我的程序代码量稍稍一上去,一运行就 Segmentation Fault,然后我就不知所措了。还好项目组里有段博这种大神,还有教研室其他优秀的同学帮助我。这一年我们可以说是心无旁骛,每天除了项目编码,技术讨论,然后就是找一些项目相关的论文来阅读,再有就是网上逛技术社区。慢慢的我也熟练掌握了 GDB 的用法,遇到问题也知道如何通过单步调试去定位问题,根据程序运行出错消息用搜索引擎去寻找解决方案,向身边伙伴求助的次数也明显减少了。



第二阶段:工作时大量研读其他高手同事的代码


2007 年研究生毕业后,我进入了 SAP 成都研究院工作。我本科和研究生生涯,使用的都是 C/C++, 工作中换成了 SAP 独树一帜的 ABAP. 面对技术栈的切换,编程经验尚浅的我可谓是苦不堪言,ABAP 在我手中用起来觉得各种别扭。有一次,ABAP 一个浅拷贝和深拷贝的问题困扰了我几天,我居然还写邮件,给 SAP 成都研究院我熟识的几位 ABAP 高手同事吐槽,说某某需求如果用 C/C++ 实现那是分分钟的事,可现在换成 ABAP,得绕来绕去。



现在回忆起来,我当时的行为挺可笑。那几位高手同事收到邮件后没有回复,只有一位当时外号薛老板的同事,不仅认真给我指出我邮件里关于 ABAP 实现深拷贝的错误,邮件末尾还点评到:“从 ABAP 转 C++/Java 很难,但是从 C++/Java 转 ABAP 开发很简单。”


虽然当时 SAP 开发社区尚不如现在完善,2007 年的时候,网络上 ABAP 开发资源也没有现在丰富。不过 ABAP 的开发编程环境在服务器端,这使得我能轻松阅读到服务器上其他 ABAP 高手的代码。


抱着熟读唐诗三百首,不会作诗也会吟的心态,我把我认识的很多 ABAP 高手的工作代码看了一个遍。不光看,还把他们的代码拷贝出来,自己修改,然后单步调试,边调试边学习。遇到不懂的知识点,直接按 F1 召唤出帮助文档学习。



通过大量的阅读,我发现程序员与程序员之间还是存在细微的编码风格差异。比如 William 是当时在 SAP 成都研究院工作过的一位天才程序员,他的很多非生产代码,都是用面向过程的编程方式编写,并且变量命名风格颇有谭浩强 C 语言程序设计那本书里配套源代码的风采。Willian 程序里数量众多的 include 和神秘的变量命名规则,庞大的代码量,但是最后程序仍然能够极其精巧地运行,成功实现极其繁复的需求,这一切让我佩服不已。


Annie 是另一个让我极其佩服的 ABAP 程序媛。她的代码生产速度让我惊叹,而且代码规范工整,犹如教科书一般。当时 SAP 成都研究院 On Demand 交付项目使用的 CPMS(Content Production Management System) ,前身是 CR(Content Repository) 系统,这个系统的主要开发人员就是 Annie. 她对 CR 系统的贡献,给我提供了大量可供学习和模仿的素材。当时在佩服之余,我心中也有一个疑问:Annie 是如何做到短时间内写出海量高质量代码的?要知道那可是在 2007 年,那时既没有 ABAP 代码生成向导,也没有 ChatGPT. 我当时性格腼腆,也没好意思去问她,这个遗憾就一直留到现在了。


就这样一头扎进 ABAP 代码海洋之后,慢慢的我工作中对 ABAP 的运用也得心应手起来,和自己刚进 SAP 成都研究院时相比,ABAP 编程能力可以说是突飞猛进,这可能就是量变到质变吧。



第三阶段:2014 年接触 JavaScript/HTML/CSS


2007~2014年,我做了七八年的 ABAP 开发,2014 年底,我觉得自己算是这个领域的专家了,此时工作岗位变动,需要接收 SAP UI5 应用开发,使用的技术栈从 ABAP 转成了 JavaScript 和 HTML/CSS. 此前我从未在工作中接触过基于 JavaScript 的 Web 前端开发。和之前刚毕业工作时从 C++ 转 ABAP 一样,我在刚接触 SAP UI5 开发时,又失去了对 ABAP 得心应手那种感觉。


我当时的做法是,从源代码实现的层面研究 SAP UI5 这个前端框架,研究它的工作原理,顺便把 JavaScript 也学习了。我也在技术社区上发布了《深入学习 SAP UI5 框架代码系列》,从 SAP UI5 Module 的懒加载机制,控件渲染机制,事件处理机制,元数据实现机制,实例数据的读写实现原理,数据绑定的实现原理等方面,通过分析 SAP UI5 框架的 JavaScript 源代码实现,介绍了我对这个前端开发框架的理解。



从框架一行行代码的研读,我也领略了从事应用开发和框架开发的不同侧重点和编程技巧,我这个系列总共写了 14 篇文章。漫长的框架源代码研读和文章写作完成之后,我感到自己 Web 应用的编程能力再次突飞猛进。


展望未来


以 ChatGPT 为代码的 AIGC 工具的流行,为程序员再次提供了编程能力突飞猛进的机会。善用 AIGC 工具,我们可以提高自己对陌生编程领域的学习速度,在学习遇到障碍时,善用这些工具,能够帮助我们克服学习过程中遇到的各种困难。


愿每一位程序员同行都能在编程中找到快乐。



作者:JerryWang_sap
来源:juejin.cn/post/7300118821532450831
收起阅读 »

我被这奇葩的答辩评价给惊呆了

最近组里有个小伙伴晋升,我司职级跟腾讯的不一样,可以理解为大概是要晋升高工(T9)吧。 据我了解,我司的晋升答辩还不成熟,没有统一规范和套路,那我就以腾讯的经验来辅导我的小伙伴吧。我想,万变不离其宗,只要能论证能力达标就可以了吧,结果,我着着实实地被这个奇葩的...
继续阅读 »

最近组里有个小伙伴晋升,我司职级跟腾讯的不一样,可以理解为大概是要晋升高工(T9)吧。


据我了解,我司的晋升答辩还不成熟,没有统一规范和套路,那我就以腾讯的经验来辅导我的小伙伴吧。我想,万变不离其宗,只要能论证能力达标就可以了吧,结果,我着着实实地被这个奇葩的答辩评价给雷到了。


插图1.jpeg


上周答辩,我跟我领导全程旁听。先不管我的小伙伴的答辩内容、评委提问对答表现、临场发挥怎么样,直接快进,跳到最后评委合议之后的答辩总结环节。



原话我肯定不记得了,就按照大概意思来描述



“先说说 XX 的优点。XX 的答辩有两个很突出的优点,”


“第一个是体现出来很好的产品化思维,整体的架构设计把握得比较好,能够解释地比较清楚;”


“第二个是问题解决能力比较好,能够结合业务的情况去思考方案的优缺点,进行合理的决策。”


“但 XX 的答辩有个很明显的问题。”


“这个项目没有很好地体现前端的技术(深度)。”【我当时的反应:what?评委,麻烦你再说一次?】


“这么说吧,这是前端的通道答辩,这个项目放在前端的通道答辩是不太合适的这个项目对前端岗位的挑战是不太够的。”【我当时的反应:!?我不是很懂你在说什么,我进错会议室了?】


换种说法,这个项目拿去给 QA 也是能做出来的。”【这一句是原话,因为这句话是印象最深刻的。】


这句话真得把我给整无语了。


首先,3 个评委都是前端,之前还会有后台的评委,今年终于“规范”了,全部前端了。照我说,还不如来后台评委呢,不至于说这种话,真给整破防了。


其次,这些评委全部是比我高 1、2 级的,这职级居然能说出这种话。


所以,我挺想知道,什么是前端技术?什么是前端专属的技术?


按照评委们的说法,


那不要拿后台全栈项目去答辩了,后台也是能做出来的。


那不要拿 app 跨端项目去答辩了,app 客户端也是能做出来的。


那不要拿 pc 跨端项目去答辩了,pc 客户端也是能做出来的。


那不要拿 devops 项目去答辩了,谁都能做出来的。


那不要拿基建项目去答辩了,infra 也是能做出来的。


所以,前端技术就只剩切图仔了呗????搞搞组件库?搞搞页面性能优化?


问题是这玩意儿能搞出花儿来?真想搞出花儿来不得再造一个 React?真要搞出个 React 出来能呆在这儿?


哎,真要被憋出内伤来了,还是得写出来释放一下。


我司答辩还没到卷部门影响力的地步,那全凭答辩评委个人喜好我也忍了,但这样的认知我实在是接不住呀。


哎,止血止血,打住打住,给我一周时间缓一缓,缓一缓......


作者:潜龙在渊灬
来源:juejin.cn/post/7300918873904824331
收起阅读 »

那个年薪 201万 的华为 “天才少年” 真面目被曝光,醒醒吧,他根本就不是天才!

综合自网络有的人为了买房掏空家里6个钱袋,此后几十年被捆绑在房贷上,有的人自己奋斗几年,甚至是一两年就可以全款入手。今天介绍一个高考落榜,复读一年才进一所三本院校,最后成功逆袭成为年薪201万的华为“天才少年”的故事。你以为201万已经是他的极限了,其实更牛的...
继续阅读 »
综合自网络
有的人为了买房掏空家里6个钱袋,此后几十年被捆绑在房贷上,有的人自己奋斗几年,甚至是一两年就可以全款入手。
今天介绍一个高考落榜,复读一年才进一所三本院校,最后成功逆袭成为年薪201万的华为“天才少年”的故事。
你以为201万已经是他的极限了,其实更牛的还在后面。
他曾拒绝腾讯和阿里,甚至是世界巨头IBM的offer,有的大厂甚至开出了360万年薪。
看到的这样的消息,网友的态度很统一:
这位“天才少年”叫张霁,彼时的他刚博士毕业,不过如今他的过往经历被曝光,人们震惊地发现他的真面目:根本不是什么天才!
复读才考上三本,最后成功逆袭的原因
张霁最高学历是985高校华中科技大学计算机专业博士学位,但退回几年前,他还是别人眼中的“失败者”。

他的父母职业都是教师,对他的学习成绩没有作过多要求,重点培养他独立思考的能力,比如儿时他看上一个价值50块钱的玩具,父母只会给他45块钱,剩下的5块要他自己想办法,小张霁会通过卖废品的方式攒到钱去购买心爱的玩具。

通过这样的教育,培养了他善于思考和动手解决问题的能力,但是张霁并没有重视成绩,因此平时成绩不温不火,直到高考那年,连大学都没考上。

在之后伴随的“这个孩子完了”、“当个技工”评价声中,痛定思痛,决定复读。努力追赶了一年,奇迹并没有发生,他考上了一所当地人都很少知道的三本民办院校——武昌理工学院。

谁能想到,三本只是他的起点,他选择了并不热门的专业——计算机,在往后的几年里,他会继续完成他的人生逆袭,
当时学校氛围不必多说,大家基本每天都在吃喝玩乐,努力学习不仅是异类,甚至会被取笑。
张霁就在这样的环境中定下了考研考博的目标,并坚持不懈的在图书馆啃难嚼的书本,最终功夫不负有心人的考上了武汉邮电科学研究院的研究生。
3年后又考上了自己的理想大学华中科技大学博士——这里是武汉光电国家研究中心,更是整个湖北省唯一的国家级实验室。
读博期间他取得了许多突破,并在众多国际一流刊物发表相关学术论文,包括ATC, DAC,ICPP等行业顶级会议和期刊。
每篇都是国际top级别,刊登难如登天,是无数科研人毕生的追求,重点是许多成果可以直接落地。
此外,他还在腾讯实习期间拿到了腾讯2016、2017年度杰出贡献奖,2019年度最佳卓越运营奖。
最后选择了华为,是因为华为正在受到“制裁”,他知道可以在华为找到志同道合的人,一起努力渡过难关。
他有一句座右铭:“很多人比你还要努力,你有什么理由不上进”。
所有的成功都有努力后的水到渠成
入选华为“天才少年”并不容易。
“众所周知,华为有资源池。”知乎上一名匿名的华为员工介绍称,例如,某产品线申报人力缺口200人,那么一般会从简历投递者中按学校、专业等筛选出大约2000份简历。
笔试、面试通过大概500人,放进资源池。
然后再按笔试、面试综合成绩发放200份offer,最终有100人签约,然后再按顺序发放100份offer……直到offer签完。
哪有什么天才少年,不过是一群怀揣梦想、坚韧不拔的人在苦苦地熬。
吃够了苦,熬到了头,生活才有可能对你网开一面。
张霁的逆袭故事并不是“天才少年”里的个例。
沈树忠,家境贫寒,世代都是农民出身。第一次高考成绩化学只有5分,物理0分。第二次高考仅仅读了中专,毕业后当了个“挖煤工人”,20岁自学考研,历时6年拿到硕士博士学位,如今是中国科学院院士,并拿下了地层学国际最高金奖,成为中国获此奖项第一人。
还有物理5分、化学5分,数学15分,却要挑战物理系,让爱因斯坦赞叹过的世界火箭、宇航工程的开拓者,“中国力学之父”,他叫钱伟长。
同样有201万年薪的左鹏飞,也不是大家眼中的“天选之子”。
他说:“我只是把别人打游戏的时间,花在了实验室里。”
......
说实话,我觉得“天才少年”这个项目名字虽然吸引人,但它给很多日以继夜的努力才得到的结果加上了一层光芒四射的滤镜,让普通人可望而不可即。
它容易让人们忽略那些努力的重要性。
但其实,哪有那么玄乎。这世界上99.9%的人远没有到拼智商的时候,有的不过是找到自己为之努力的方向、去坚持然后得到。
于是,年龄大的叫大器晚成,年龄小的叫天才,我更愿意称其为逆袭。
薛兆丰:“我们每个人,都在为自己的简历打工。”
知乎上有这样一个提问:
“为什么大多数人宁愿吃生活的苦,也不愿吃学习的苦?”
点赞最高的答主@特雷西亚是这样说的:
“生活的苦难可以被疲劳麻痹,被娱乐转移,无论如何只要还生存着,行尸走肉也可以得过且过,最终习以为常,可以称之为钝化。 
学习的痛苦在于,你始终要保持敏锐的触感,保持清醒的认知和丰沛的感情,这不妨叫锐化。”
生活的苦,会让人麻木,习以为常;学习的苦,让人保持尖锐的疼痛感。
人生是一条漫长的旅程,但关键的就那么几年。
生活其实并不算太苦,苦的是在该努力的年纪,你却选择了放纵和逃避。
真正的苦,是被命运扼住了咽喉,无法动弹,没有出路。
《奇葩说》里辩手肖骁有一句辩词我特别喜欢:
往往最诱惑的选择,不是上帝给你的机会,而是恶魔给你的考题。
在向上攀登的路上,我们会遇到无数选择题:
安逸还是改变?主动出击还是随波逐流?
我只有一个建议:在人生的十字路口,永远选择正确但困难模式。
因为好走的路,都是下坡路。
所以现在开始学习起来吧,定好目标,规划好人生的每一步,低级的快乐靠放纵,顶级的快乐靠自律。
---END---

作者:程序员直聘
来源:mp.weixin.qq.com/s/0TKWfX7-HvrgFs8xowr5sw
e>

收起阅读 »

谈传统艺术的没落

最近想学快板。 现在这玩意儿竟然也算个冷门了,周边找不到人教。 怎么整?上网看视频,找帖子。 有个帖子就说有一个QQ群,里面有很多教程啊,板谱之类的。 我就加群了,等了三天,终于给通过了。 看资料,QQ群的标签是【60后】、【70后】。我想,这些半大老头是怎么...
继续阅读 »

最近想学快板。


现在这玩意儿竟然也算个冷门了,周边找不到人教。


怎么整?上网看视频,找帖子。


有个帖子就说有一个QQ群,里面有很多教程啊,板谱之类的。


我就加群了,等了三天,终于给通过了。


看资料,QQ群的标签是【60后】、【70后】。我想,这些半大老头是怎么成功建群的(群主已经是古稀之年),同时感慨我国互联网的普及程度之高。


待了一周,群里1000人,没有人发言,除了一些某某入群,不要发广告的公告等等这类通知。


忽然有一天,一个刚入群的小弟打破了宁静,吓得我都不敢登QQ了。



【吐槽】小弟


今年公司年会让我出节目~请各位老师指点一下~没有多长时间了~怎么样短时间内能练出来

我这着急呢


 


【管理员】大佬


临时抱佛脚、为了什么年会“应景”,零基础就想短期之内学会快板的,这些朋友,咱能换个别的练么?放过快板行么?知道这里有多不容易么?眼高手低会害你一辈子


我说的这些,肯定会招惹一部分人不高兴


这门艺术不简单


但凡快板打的、说的达到一定水平的,都是有毅力、坚韧之人


这门艺术需要用时间来不断积累


不断学习不断修正不断钻研,然后,一辈子


单点、双点、基本点、混合点,最基础的东西,有多少人还打不利索呢


更别说吐字归音、用气发声,上板演唱,表演表现,手眼身法步,舞台掌控以及改编、创作了


手眼身法步

每一样都不容易


【活跃】二哥 

表演是最难的


【管理员】大佬 

其实最难的到不是表演

最难的是思想、情感


简单说就是,理解力

任何想表达、表演出来的东西

都是先有一个想法

举个例子

大家很喜欢武松打店


前头对话

武松他闻听一瞪眼……


贤弟你们说话理不合

这是武松的开脸,如何表演表现?

他是什么内心情感?

他的情绪是高是低?


穿的什么?

戴的什么?


跟董平薛霸是什么关系?

用什么语气?

什么眼神?

手放哪儿?

脖子上可是带着枷锁呢


怎么塑造

等等等等

这些只有你先理解到、想到

才可能去表现、表演


当然即便想到了,也需要大量的练习


给自己的“定位”很关键,自己要达到什么艺术水准?如果你的定位是“成为一名快板爱好者”,那么好,你的水平一定是业余中比较“业余”的……如果你的定位是“具有专业水平”的爱好者,那么你的水平一定是业余爱好者中的高水平。所以说,也别埋怨没人教啊、别人教的不行啊,什么什么的,第一,快板并不适合所有人学习(这是说要达到一定的程度,起码有模有样);第二,多找自己的原因


【话唠】三哥


不要埋怨别人不教,别人没有义务去教



这是一个90后沉入70后的世界,进行放肆的请教,结果被众人教育了的事件。


如果某个70后,不慎落入90后的世界,进行无端的说教,估计下场也不会太乐观。起码会收到几百兆的斗图。


回过头来看,一个新人想在公司年会上表演快板,他认为呱嗒呱嗒很好学,又很别致,于是找了个交流群去问问。结果群里反馈你别糟蹋快板了,这是一辈子的艺术,不要包含功利心,它这么的高深,别人也没有义务教你。


再回过头来看,“老先生”们说的确实没错。快板确实不好学,里面有很多的表演技巧和艺术素养,想要有模有样地表演确实很难。



新人的需求是:我如何以最短的时间学会快板表演?


对方的回复是:呸!白日做梦!



这件事情,让我想起来很多人找我做软件。


我老是感觉对方的诉求,达不到开发的标准,以至于解决不了他的问题。


比如,对方想做个馒头,要求里面要有馅儿,馅儿可以是肉的,可以是豆沙的。我说,那你是要馒头还是要包子,或者豆沙包。


对方说,就是个馒头,可以放馅儿,不用点菜了。


我说,算了吧,做不了,我会做馒头,会做包子,但是不会做带有包子特征的馒头。


结果,对方最后找别人做出来了,跟我说你看就是这样子。我一看,就是一个包子。


你会感觉,自己是不是在坚守一些什么,比如《新华字典》里的字词释义之类的东西。


所以,那个新人问,怎么短时间内,在公司年会表演快板。我觉得,不一定要打成李润杰大师那样,也不用单点、双点、混合点纵横交错。没有开场板也无所谓,找一段趣味性强的文本,掌握好节奏,嘀嗒,嘀嗒,一个节奏一句话,在非商演的情况下,也不算是糊弄人,年会的场合不就图个乐呵嘛,演好了演砸了都是个喜剧。


老先生又说了,你那个不叫正宗的快板,快板一定要先有开场板,开场板一定要是“哒嘀咯嘀哒嘀嘀哒”。


老先生息怒,您那正宗快板,能帮小弟解决,五天后,年会表演的问题吗?


为什么非要帮他解决问题?


问得好。


《中国有嘻哈》rap火了,为什么快板没有火?


《一人我饮酒醉》喊麦火了,为什么快板没有火?


仔细看看rap,喊麦,快板这三者,其实从表演形式上是比较接近,是很容易混淆的。


现在人们精神压力都很大,你需要情感发泄释放。


看一个rap,点头哈腰,观众跟着节奏也能点点头,代入感很强。看完了,心情大好。


来一段喊麦,一人我饮酒醉,醉把佳人成双对……是不是跟着喊出来了。


那天一个小孩从喷泉池子上跳下来,喊着:败帝王,斗苍天,夺得皇位已成仙。吓了我一跳,我以为我遇到神仙了。


这个调子是标准的123、123、1234567。数来宝的调子:打竹板,进街来,住户买卖两边排。也有买,也有卖,也有幌子和招牌。


为什么人家火了,你没有火。


我觉得就是坚守的东西太多了。



  1. 形式上,太固定。“哒嘀咯嘀哒嘀嘀哒”对了。“哒咯咯嘀哒嘀嘀哒”错了。全国一个样。不这样,就不是快板。

  2. 内容上,太陈旧。“华蓥山,巍峨耸立万丈多,嘉陵江水,滚滚地东流像开锅。”当年听,可能有共鸣。但是现在人听着没有啥感觉了。另外,第二字念什么?

  3. 思想上,太封闭。自认为这门艺术造诣很高,自己把终身奉献给它,别人也得这样,不允许其他人有丝毫地轻视,并且建立起一道壁垒,阻挡想来尝试的新人。对于传承,坚持宁缺勿滥。就跟谈对象一样,两个人一见面,女的说,除非你忠于我一辈子,我才和你交往。小伙子:你呀?我呀?


我的父辈们,他们小时候边跑边唱的是:闲言碎语不多讲,表一表山东好汉武二郎。因为,他们别无选择。


我的子辈们,他们边跑边唱的千差万别,因为他们不知道怎么选择。谁能解决自己问题,比如好记又能装逼,他们选择谁。


曾经一个深入民间的艺术,随着时代的发展变得鲜为人知,然而它却丝毫没有一点改变。


或许也正是这种坚持,才保持了它的原汁原味。同时,伴随着的,也是它变成了一片标本,靠着国家的文化扶持资金传承。


其实,它是可以自己繁殖的。


原来觉得穿着大褂说单口相声受约束的人,换成西装,说了脱口秀。


原来打不好快板,但是节奏掌握的还挺好的人,带上帽子,唱起了rap。


为什么传统艺术发展不起来?


做煤油灯的,坚持用煤油当燃料,用柴油都不行,电灯更谓之不伦不类。等到这个世界不再生产煤油,他才放弃做灯。他依然还在坚持煤油灯正宗,而大家都在用LED。


作者:TF男孩
来源:juejin.cn/post/7167705542188597285
收起阅读 »

为何在中国MySQL远比PostgreSQL流行

首先在全球范围内,MySQL 一直是领先于 PostgreSQL (下文简称 PG) 的。下图是 DB-Engines 的趋势图,虽然 PG 是近 10 年增长最快的数据库,但 MySQL 依然保持着优势。再来看一下 Google Trends 过去一年的对比...
继续阅读 »

首先在全球范围内,MySQL 一直是领先于 PostgreSQL (下文简称 PG) 的。下图是 DB-Engines 的趋势图,虽然 PG 是近 10 年增长最快的数据库,但 MySQL 依然保持着优势。

再来看一下 Google Trends 过去一年的对比
MySQL 也依然是明显领先的。而进一步看一下地域分布的话
绝大多数地区依然是 MySQL 领先,份额对比在 60:40 ~ 70:30 之间;少数几个国家如俄罗斯不分伯仲;印度的对比是 85:15;而中国则是达到了 96:4,也是 Google Trends 上差异最明显的国家。
笔者从 2009 年左右开始学习数据库相关知识,接触到了 MySQL 5.1 和 PG 8.x。而深度在工作中使用则是 2013 年,那时加入 Google Cloud SQL 开始维护数据库,MySQL 从 5.5 开始,到之后 2017 年 Cloud SQL 推出了 PG 服务,从 9.6 开始,后来一直同时维护 Google 内部的 MySQL 和 PG 分支,也就一直关注着两边的发展。18 年回国后,进一步熟悉了国内的生态。
下面就来尝试分析一下 MySQL 在中国流行度遥遥领先于 PG 的原因。

Windows

MySQL 在 1998 年就提供了 Windows 版本,而 PostgreSQL 则到了 2005 年才正式推出。之前读到的原因是 Windows 早期的版本一直无法很好支持 PostgreSQL 的进程模型。

上手门槛

MySQL 上手更简单,举几个例子:
  1. 连 PG,一定需要指定数据库,而 MySQL 就不需要。psql 大家碰到的问题是尝试连接时报错 FATAL Database xxx does not exist。而 mysql 碰到的问题是连接上去后,执行查询再提示 no database selected。

  2. 访问控制的配置,首先 PG 和 MySQL 都有用户系统,但 PG 还要配置一个额外的 pg_hba (host-based authentication) 文件。

  3. MySQL 的层级关系是:实例 -> 数据库 -> 表,而 PG 的关系是:实例(也叫集群)> 数据库 > Schema > 表。PG 多了一层,而且从行为表现上,PG 的 schema 类似于 MySQL 数据库,而 PG 的数据库类似于 MySQL 的实例。PG 的这个额外层级在绝大多数场景是用不到的,大家从习惯上还是喜欢用数据库作为分割边界,而不是 schema。所以往往 PG 数据库下,也就一个 public schema,这多出来的一层 schema 就是额外的负担。

  4. 因为上面机制的不同,PG 是无法直接做跨库查询的,早年要通过 dblink 插件,后来被 FDW (foreign data wrapper) 取代。

  5. PG 有更加全面的权限体系,数据库对象都有明确的所有者,但这也导致在做测试时,更经常碰到权限问题。
虽然 PostgreSQL 的设计更加严谨,但也更容易把人劝退。就像问卷设计的一个技巧是第一题放一个无脑就能答上来的二选一,这个的目的在于让对方开始答题。

性能

最早 Google 搜索和广告业务都是跑在 MySQL 上的,我读到过当时选型的备忘。其实一开始团队是倾向于 PG 的(我猜测是 PG 的工程质量更加符合团队的技术品味),但后来测试发现 MySQL 的性能要好不少,所以就选型了 MySQL。
现在两者的性能对比已经完全不一样了,而且性能和业务关联性很强,取决于 SQL 复杂度,并发,延迟这些不同的组合。目前在大部分场景下,MySQL 和 PG 的性能是相当的。有兴趣可以阅读 Mark Callaghan (https://smalldatum.blogspot.com/) 的文章。


互联网

最重要的是 LAMP 技术栈,Linux + Apache + MySQL + PHP,诞生于 1998 年,和互联网崛起同步,LAMP 技术栈的普及也带火了 MySQL。这个技术栈的绑定是如此之深,所以时至今日,MySQL 官方客户端 MySQL Workbench 也还是不及 phpMyAdmin 流行。


大厂的号召力

前面提到的 Mark Callaghan 一开始在 Google 的 MySQL 团队,他们给生态做了很多贡献,后来 Google 内部开始用 Spanner 替换 MySQL,Mark 他们就跑到了 Facebook 继续做,又进一步发展了 MySQL 的生态,像当时互联网公司都需要的高可用方案 MHA (Master High Availability) 就是 Mark 在 FB 时期打磨成熟的。当时整个互联网技术以 Google 为瞻,传播链差不多是 Google > Facebook / Twitter > 国内互联网大厂 > 其他中小厂。MySQL 在互联网公司的垄断就这样形成了。
相对的,那段时间 PG 有影响力的文章不多,我唯一有印象的是 Instagram 分享他们 sharding 的方案,提到用的是 PostgreSQL (https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c)。


生态

有了大量使用后,自然就有人去解决碰到的各种问题。先是 InnoDB 横空出世,解决了事务和性能问题。主从,中间件分库分表方案解决了海量服务的扩展和高可用问题。各种 MySQL 相关书籍,培训资料也冒了出来,应该不少人都读过高性能 MySQL (High Performance MySQL) 这本书。
业界有 Percona 这样专注于做 MySQL 技术咨询的公司,他们还研发了一系列工具,比如做大表变更的 pt-online-schema-change(后来 GitHub 还发布了改良版 gh-ost),做备份的 xtrabackup。
国内也做了不少的贡献,阿里给上游贡献了许多 replication 的改进。SQL 审核优化这块,有去哪儿研发的 Inception,小米团队的 SOAR。Parser 有 PingCAP 的 MySQL Parser。
相对而言 PG 在工具链的生态还是差不少,比如 PG 生态里没有开箱即用的 Parser,没有 Parser 也就无法做 SQL 审核。Bytebase 在实现相关功能时,就只能从头开始做。当然这也成为了 Bytebase 产品的核心竞争力,我们是市面上对 PG 变更审核,查询脱敏支持最好的工具,除了大表变更外,功能完全对标 MySQL。


总结和展望

回到中国 MySQL 远比 PostgreSQL 流行的原因,在上面所有列出的要素里,我觉得最核心的还是第一条,MySQL 很早就能跑在 Windows 上,而 PG 不能。因为有了能跑 Windows 这个点,MySQL 成为了 LAMP 的一部分,到后来成为了支撑整个互联网的基石。当时国内大家手头装的都是 windows 操作系统,要开发 web 应用,都用 LAMP 架构,就顺便把 MySQL 带上了。
此外国内还有更明显的头部效应。国内所有互联网公司的技术体系都源自阿里,比如拿研发环境来说,SIT (System Integration Test) 是我回国加入蚂蚁后才接触到的名词,但后来在其他各个地方又都反复遇到。数据库方案也是如此,全套照搬了阿里的 MySQL 方案。就连技术职级也是,找工作先确认对标 P 几。
就在上月,MySQL 5.7 宣布了 EOL,算是给 MySQL 5 系,这个支撑了过去 15 年中国互联网的功勋做了一个告别。
随着 MySQL 的辞旧,PG 的崛起,在这 AI 的黎明,VR 的前夜,下一个 15 年,MySQL 和 PG 之间相爱相杀的故事又该会如何演绎呢。


作者:OSC开源社区
来源:mp.weixin.qq.com/s/i08gzmCtJwpUfuf_sVUTWw

收起阅读 »

有这3个迹象,你就该离职了!

我的前下属小P,在当前这样的环境下,裸辞了。小P在这家公司呆了3年,平时任劳任怨,努力踏实。对一些“007”加班、背黑锅等“非常规”任务,也来者不拒,积极配合。本以为这样就可以获得领导的青睐,能让自己的职场之路更顺畅。但现实却没如他所愿,前段时间公司有个主管空...
继续阅读 »

我的前下属小P,在当前这样的环境下,裸辞了。

小P在这家公司呆了3年,平时任劳任怨,努力踏实。对一些“007”加班、背黑锅等“非常规”任务,也来者不拒,积极配合。

本以为这样就可以获得领导的青睐,能让自己的职场之路更顺畅。但现实却没如他所愿,前段时间公司有个主管空缺,无论从哪个角度看,小P都是最佳人选,小P自己也以为十拿九稳,但没想到领导却提拔了一个刚入职不到半年的新同事,真实的原因并不是那个人能力有多强,而是因为他是领导以前的旧下属,是嫡系“子弟兵”。

小P输给一个寸功未立的“关系户”,心里憋屈,找领导理论。但领导就是领导,一下子指出N条小P在工作中的不足,说他工作效率低、有时候还犯错、而且还缺少大局观。小P听了更感到委屈,自己平时干的都是其他同事不愿接的“脏乱差”的活,有时候一整个项目都靠自己一个人顶着,现在反而成了多做多错,而那位被领导提拔的“嫡系”,手里没啥正事,整天和领导一起吹牛抽烟,反倒成了有大局观。

小P情绪非常低落,天天上班如上坟,对工作提不起丝毫兴趣,而且身体和心理都出现明显不适,于是就下定决心,裸辞了。

小P的这个决定,我是支持的。如果公司的环境对你的发展不利,你也看不到任何改观的迹象,那么止损可能是当下最好的选择。下面跟你聊聊,遇到哪类情况,你应该果断离开。



01

领导故意打压你

脏活累活想着你,升职加薪没你份


人在职场,要能分辨两个最起码的事实,领导是“总用你”还是“重用你”;是喜欢 “你能干活”,还是喜欢“能干活的你”。

领导让你做事的时候,简直把你当成公司“继承人”,技术需要你攻关、客户需要你维护、团队需要你协调、项目需要你加班,好像哪里都需要你,什么活儿你都要负责。

直到每次升职加薪的机会都和自己无缘时,上面说的小P就是典型的例子,脏活累活都丢给他,升职加薪全留给亲信,明显厚此薄彼,不公平、不厚道。出现这种情况,通常有以下几种原因:

1、你是个不会说“不”的软柿子老实人

很多单位都一些老实本分的打工人,他们在基层踏实工作,与人为善,任何人都不想得罪,对领导更是言听计从,从不讨价还价。

这种人确实是大家眼中的“好人”,但这样的人不懂得说“不”,不会向别人展示自己的“边界”,以至于领导或其他人会不断对他试探,把脏活累活、不该他干的活全都丢给他。

最后,所有人都对此习以为常,而他却慢慢变成了多做多错、出力还可能不讨好的“杨白劳”。至于升职加薪,是不太可能轮到他的,他真上去了,这些脏活累活以后丢给谁干?

2、你不是领导的“自己人”

有人的地方就有江湖,没办法,谁让中国是个人情社会呢。不管在哪个团队、哪个群体,人与人之间都会有个亲疏远近,最大的差别只不过是表现的是否明显而已。团队的各种资源、机会都是有限的,拥有权力且怀有私心的某些领导,在分配这些资源的时候,就极有可能向所谓的“自己人”倾斜。

上文中的小P不就是败给了领导的前下属了吗?当然,不是说所有的公司领导,都像小P的领导一样不公平公正,但如果真遇到这种明显不讲规则的人,就算你干的再多,也很难分到肉吃,有时能不能喝口汤,都要看他心情。

3、你是个“能力有限”的人

这里说的“能力有限”,不是说工作能力有限,而是指你只会“工作”,而没有背景、资源、人脉,等其他方面的可交换价值。我曾见过一个行政部前台,半年时间被提拔为部门经理,不是说她工作能力有多强,而是她的亲叔叔是某重点中学校长,她利用这个关系为公司老总的孩子解决了上重点的问题。

我还听过很多带“资”入职的例子,这些人到了公司,就能利用自己的资源,为公司或领导个人,解决很多棘手的问题;而你,只擅长本本分分在自己工位上按部就班的工作(而且能干这种活的人一抓一大把),即使你做再多的工作,和前一类相比,稀缺性和竞争力都是明显不能比的。有了好机会,自然会被那些有“特殊贡献”的人先抢走。



02

部门集体摸鱼,人浮于事


在当前的职场生态中,不少企业人浮于事,充斥着“坐班不做事”、“领导不走我不走”等伪加班、伪忙碌的形式主义。出现这种情况,通常因为两种原因:

1、员工“形式主义”严重

我曾听一位年轻朋友讲过他经历的一件奇葩事。他曾和另一个同事一起负责公司的某个项目,某次两人加班到9点回家,但第二天朋友却发现那位同事发了这样一条朋友圈“一不小心搞到现在,终于忙完了”,配图是办公桌上开着的电脑,电脑上显示的是一份打开的文档,而发布时间则显示“某年某月某日凌晨2点”。而且在这条朋友圈下,公司领导不仅点了赞,还写下“辛苦了”三个字的留言。

这让朋友心里非常不爽,活儿明明是两人一起干的,功劳就全成了同事的了。除了想给领导留下勤奋努力的好印象外,还有人有其他一些目的。比如,没结婚成家的想蹭蹭公司的空调,反正回去也是打游戏,在哪玩不是玩;还有一些“勤俭持家”的是为了蹭公司的班车、食堂,甚至是为了熬点加班补贴,生活不易,能省点就省点,能捞点就捞点。总之,大家就这样互相耗着,早走你就输了。

2、公司领导的“官僚主义”

曾有一位粉丝朋友向我分享过他辞职的故事。他的领导就是一位见不得别人比他早下班的人。只要别人比他早离开公司,他就觉得为别人的工作不饱和,就会在开会的时候含沙射影批评几句,或者给那个“早走”的人多安排些工作。

在一些企业中出现这种集体摸鱼、人浮于事的情况,虽然并不是每个人都故意为之,但就像在电影院里看电影,一旦前排的人站起来,后面的人就必须跟着站起来一样,很多人被周围的环境裹挟,不得不一边讨厌着,一边照样干着。



03

长期情绪内耗,个人成长为零


耐克创始人菲尔·奈特在他的自传中有句名言:人生即是成长,不成长即死亡。我们进入一家公司,除了挣钱以外,还有另外一个非常重要的诉求,即积累经验、学习技能,实现个人成长。但如果我们发现,自己的工作除了赚几两并不值得激动的碎银外,其余全是资源的消耗和精神的内耗,而不能给自己带来任何成长,这样的公司肯定也不是久留之地。

我的一个读者,原来是某互联网公司的技术骨干,后来被一家传统企业挖走,但做了不到一年,就觉得坚持不下去了。老板请他的时候,饼画的很好,说自己认清了趋势,要大力发展搞数字化,一定会给侄子最大的工作支持。

但事实远非如此,他过去之后才发现,自己基本是一个光杆司令,公司里里技术好还有追求只有他一个。老板的想法天天变,又不给资源,就只会让他自己想办法,KPI完不成就各种PUA他。

在这种工作环境下,侄子上班度日如年,每天都充满焦虑,并开始变得越来越不自信。

我知道后,劝他立刻离开这家公司。再呆下去只会增加内耗,没有任何成长可言。

后来,我通过朋友把他推荐到另一家业内知名的公司,小伙子很快又找回了状态,在那里他每天都能从同事、团队那里汲取新的养分,而不是一味的输出、做大量纯消耗的无用功。



04

离职前,给你3个建议


1、不要因为暂时性的困难而离职

王阳明先生有句名言:积之不久,发之必不宏,得之不难,失之必易。意思是说,如果你积累的不深,发挥的时候就不会太持续;一样东西如果得来不费劲,那么失去它也会很容易。

但很多职场人,往往没有这个觉悟,但凡遇到点不称心的事,就会在心里打退堂鼓。每当这个时候,你不妨问自己两个问题:

一是这个问题是不是暂时的,是不是真的不能克服?

二是,这个问题是不是这家公司独有的,当你换另一个公司时,是不是能确保不再出现?这些问题想清楚了,相信答案也就有了。

千万不要轻言放弃,越能够经得起挑战,越能够真正拥有。

2、离职是因为有更好的机会,而不是逃避困难

马克思曾经说过:“人不是出于逃避某种消极力量,而是出于展现自身积极个性,才能获得真正的自由。”离职跳槽从来都不应该出于简单的消极逃避,而应该是因为有了更积极的选择。

什么是更好的选择?比如,有更大更有影响力的平台,愿意以30%的薪水涨幅,以更高的title邀请你加盟,这就非常值得考虑。而不能仅仅情绪上不喜欢现在公司,而慌不择路,毫无规划的随便选一家新公司做“避风港”,甚至不惜平跳、打折跳,这样做既草率又不负责。

3、要有随时离开公司的能力

职场上的成功,不是永远不被解雇,而是永远拥有主动选择职业、随时可以离开公司的能力。这就要求我们在职场中,要注意学习新的技能和认知,要能清晰客观的认识自己,知道哪些是自己真正具备的可复制、可转移、可嫁接的个人能力,而不至于出现“错把平台当能力”的“误会”。

同时,还要在职场中为自己积累一些能拿得出手、更有说服力的“硬通货”,比如过往的出色业绩,良好的业内口碑,这些都能作为你的背书,让你在新的舞台上,更受器重和尊重。良好的开始就是成功的一半,真正有实力的你,搞定成功的另外“一半”,想必也不是什么难事。

大哲学家康德说过:真正的自由,不是你想做什么;而是当你不想做什么时,可以不做什么。有底气、负责任的离职,就是这句话最好的诠释,希望小伙伴们在职场中,都能从事自己喜欢的工作,受到良好的尊重和对待,有丰厚的薪水收入,还能有让人满意的个人成长。加油!

作者:军哥手记
来源:mp.weixin.qq.com/s/BR_uzYx6sEFwMsBRRgsAiw

收起阅读 »

时光匆匆独白

  每天在固定的时间醒来,不用闹铃,叫醒我的不再是闹铃,可能真的只是年纪大了,习惯了早睡,也习惯了早起。今天不写技术,只想随便写一写,写我平时所想所念。其实想的最多的一个问题就是:生活的意义是什么?的确,这是一个挺傻的问题,但是又情不自禁的去问,或许这正如有些...
继续阅读 »

  每天在固定的时间醒来,不用闹铃,叫醒我的不再是闹铃,可能真的只是年纪大了,习惯了早睡,也习惯了早起。今天不写技术,只想随便写一写,写我平时所想所念。其实想的最多的一个问题就是:生活的意义是什么?的确,这是一个挺傻的问题,但是又情不自禁的去问,或许这正如有些人所说,生活哪有什么意义?不过只是苟且。



0099.png


  或许真的是这样吧,大家怎么想都无所谓,因为这说到底也只是一种感受而已。意义也好,幸福感也罢,每个人对其理解不同,无论怎么想我觉得都没有错。我自认是一个对待生活蛮透亮的一个人,胜不骄败不馁,面对得失也没有太大的情绪波动,但是在外人看来是活的比较傻。


  记得上高中那会儿,面对每天重复的生活,我就会想起韩寒的小说《三重门》,感觉未来的路和现在的路真的也就这样了,固定的套路,每天游走在教室,宿舍,食堂,想起这些内心未免心生波澜,感觉心塞不已,后来想的多了也就不再想了,因为我知道自己跳不出去,作为局内人只能老老实实的在这个圈子里待着,想多了也只是徒增烦恼罢了。


  后来上了大学,第一次出那么远的门,跨越几千公里来到了陌生的城市,还记得刚下火车的那一刻怀揣着对大学的期待,内心激动不已,那时候傻傻的想终于跳出来了,不再只是重复的生活了。现在想想那时候之所以有这样的想法,一方面是对现实的逃避,另一方面还是因为自己too young too simple !后来准备考研,仿佛又回到了高中时候的生活,但是内心却没有了波澜,或许是自己成长了吧,对于学习和生活而言,有了一点点理解,这是一种好听的说法,说的不好听的话,其实自己是对生活有些妥协了。


  再后来呢,自己工作了,却发现自己所面对的生活更加复杂了,那时候为了所谓的户口,拿着现在看来只能勉强度日的薪水,说实话挺累的,这种累不是说工作累,早九晚六的工作并没有多累,其实最累的是心。那时候就在想这就是我所期待的生活吗?难道真的要一条路走到黑,对于普通家庭出身的自己而言,我深知有些东西及时自己取得了,那也将是遍体鳞伤,搭上父母,哎,何必呢。


  于是我选择跳了出来,做了一个外人看来很傻的决定,其实随着后面收入的日渐增加,也并没有为当初的决定感到后悔,因为我知道这就是自己要走的路,而那条在外人看来繁花似锦的大道真的不适合我。生活,是一幅多彩的绘画,细看其中的每个色彩和纹理,都是自己所经历的不同阶段所留下的痕迹。我们走过岁月的长河,感受着生活中的喜怒哀乐,也在不断思考。对也好,错也罢,一切都终将在时间的冲刷之下变成过眼云烟,所以呢,不要为过去的决定感到悔恨。


  在到现在,女儿马上就要上小学了,父母也要退休了,每周末自己会驱车回到老家,这样的生活真的很平淡,少了社交,多了一些陪伴,说实话:这样挺好。现在想生活的意义是什么?我觉得是让他如何再变的充实起来,我想带着家人在闲暇的日子里出去转转,我想能第一时间满足他们的需要。面对未来诸多的不确定性,活在当下,或许生活才能变得更加“骚气”一点。


  好了,又要准备睡觉了!说些题外话,最近刚刚把战神5的主线打完,不得不感叹游戏的制作真的很精良,剧情也很饱满。恰逢最近黑神话线下试玩,大部分反馈都很好,但是也有一部分人言辞激烈,什么抄袭魂类游戏,什么看视频动作坚硬等等,对于这样的声音,我们没必要较真,每个人的喜恶都是他的权利,但是能看国产游戏的点滴进步,希望大家多多给予鼓励吧。


  明天又是新的一天,加油,铁子们!


作者:mikezhu
来源:juejin.cn/post/7270701917838360587
收起阅读 »

风格是一种神秘的力量

看马未都先生讲古董鉴定: 这个落款虽然写的是明朝,其实是现代仿的。这个没落款,一打眼看上去像清康熙年间的,其实是民国仿康熙。民国的也有些价值,建议继续收藏。 我感觉不可思议。 他一看就知道是什么年代的,而且还知道是从那个年代仿了另一个年代。 这专家是不是胡...
继续阅读 »

看马未都先生讲古董鉴定:



这个落款虽然写的是明朝,其实是现代仿的。这个没落款,一打眼看上去像清康熙年间的,其实是民国仿康熙。民国的也有些价值,建议继续收藏。



我感觉不可思议


他一看就知道是什么年代的,而且还知道是从那个年代仿了另一个年代。


这专家是不是胡说八道?


马先生接着讲,每个年代都有自己的风格,虽然每个时代都极力模仿古代,但风格却模仿不了。我看它第一眼立马就知道这东西不真。


对于这个风格,我理解不了。现在科技都这么发达了,我查好了明朝的风格,照着去做,你还能分辨出来?


另外,你不仔细看看色泽,纹理,胎质,一瞅就知道是假的。就靠风格?这是一种感觉啊……


后来,有一件事,让我稍微理解这种感觉了。


朋友圈里出现一些派发红包之类的分享信息。


比如某集团上市,派发红包。当看到这个logo+标题的时候,我立马就感觉这活动是假的。


为了验证猜想,我决定点进去一探究竟。


图片


链接转到浏览器打开,按F12调试发现:域名,是个野域名,一串随机数那种。网页是静态页面,根本没有数据的上传和下载。活动说明上有繁体字,这是规避敏感词审查用的吧。链接最终指向了小广告页面。


假活动。


第一眼看到的时候,我就觉得是假的。


哎,奇怪,我又是靠什么判断的呢?我想,好像我也是靠风格进行的评判。因为有多年互联网从业经验,会有一种行业嗅觉,感觉这不是正常互联网产品的风格。


此时,到自己的行业中,我有些理解马先生所讲的了。


看下面一个风格。


图片


这是杀马特风格,形成于2008年。我小时候,大街小巷很多这样的青年,我当时很羡慕,但是没钱搞。因为当时青年片面模仿日本动漫和欧美摇滚,于是就形成了一种独特的风格。


那么,杀马特在唐朝有没有?肯定没有,因为没有相关的材料和烫染工具。


那么以后会不会有杀马特?可能会有,但是再出现时,必定会结合那时的审美和工艺,不会和2008年那时完全一样。我现在看他都已经感觉丑了。


所以,你看,风格居然是一种独一无二的神秘力量,它结合了特定的时代审美和特定的生产力水平。


其实,就像看一个人,他一开口,你就知道他是一个什么水平的人。


看似是一种感觉,实际上却有很多的客观标准。这些标准都隐藏在了你的判断指标里,最后你对外说那是一种感觉。


作者:TF男孩
来源:juejin.cn/post/7177972605452812343
收起阅读 »

那些阻碍我们前进的学生思维!

每个人都是从学生时代过来的,但是有人在短暂的时间里面脱胎换骨,而有人却保持学生思维五年,十年甚至更久。 说点心里话! 一、务虚与务实 埋头苦干,只能感动自己! 遗憾的事,我上大学的时候并没有参加过任何比赛,倒不是因为我的能力不如别的同学强,而是过于务实,觉得这...
继续阅读 »

每个人都是从学生时代过来的,但是有人在短暂的时间里面脱胎换骨,而有人却保持学生思维五年,十年甚至更久。


说点心里话!


一、务虚与务实


埋头苦干,只能感动自己!


遗憾的事,我上大学的时候并没有参加过任何比赛,倒不是因为我的能力不如别的同学强,而是过于务实,觉得这些太虚了,相反,很多能力不如我的同学,甚至啥也不懂的,他们也参加了不少比赛,也拿了不少奖,这在他们后续的求职中带了不少亮光!


因为大学生参加的比赛,特别是普通大学,说白了,都没什么难度,学校也不会要求做出什么牛逼的东西,更多的是让大学生能够积极参与,扩展自己的视野。


所以,这时候就别去在乎什么技术深浅,因为你做的东西不会有人拿去用的,而抓住每一次演讲,每一次表演,那才是真的锻炼你的能力的时候。


现在,曾经那些我觉得太务虚的人,有的人已经开始创业并且做得不错了,他们的技术虽然不强,但是他们的思维已经发生了改变,说白了,吹牛逼的时候都要硬气一点,这是实话。


职场也是,并不是你埋头苦干就能得到老板的赏识,老板一天那么忙,你不找机会展示自己,他怎么记住你?


换句话来说,PPT的好坏程度大于埋头苦干,无声的付出不如技巧性的展示。


不过话又说回来,务实是一种品质,也是我们应该坚守的,但是更多的时候要做到有策略的务实,而不是埋头的务实,因为我们大多人搞不了科研,做不了什么轰动的学术。


二、人与人的本质是价值的交换


人与人之间要么有情绪价值的交换,要么有经济价值的交换,如果因为情怀,因为理想主义,那么是毫无意义的。


起初不少同学找我解决问题的时候,我都会花费大量的时间去帮他们解决问题,我免费服务的同学个数不下于100个,那段时间我也才毕业参加工作,所以下班时候都花费了很多时间去无偿服务。


一开始我觉得挺开心,毕竟那时候觉得帮助他人,快乐自己嘛!


但是我却花费了这个世界上最宝贵的东西,那就是时间,我本可以去学习,去提升自己,但是却为了自己所谓的情怀,白白浪费时间,可笑的是免费帮助很多人,却没有得到一句感谢,那么这样的情怀有何意义!


后面我改为付费服务,用时间来换取金钱,这才是成年人该做的事。


这一点对于我的改变很大,我觉得最重要的是我有了付费的习惯,告别白嫖思维,我也会花费金钱去购买服务,购买知识,因为我明白免费的大多都不值钱。


三、以弱势来当挡箭牌


之前一个学弟说,他到了新公司,就给他安排了很有难度的工作,他抱怨道,为什么不能对毕业生友好一点,我回了他一句,“去你妈的,想做简单的,那就滚蛋”,拿毕业生来当挡箭牌,首先就是对自己极度不肯定,不相信自己。


也遇到一些同事和朋友总是抱怨道,“我他妈就这点工资,干嘛给我安排这么多,干嘛让我总是出差,干嘛让我做脏活累活”。


如果总是以工资低,自己工作年限短这些来抱怨,那么就别加入职场,职场本来就是残酷的,并不是请你来过好日子的,如果觉得不公,那么就换,没能力换,那么就要硬着头皮干。


四、别特立独行


“同事都是一群傻逼,一群卷狗,我才不想和他们有任何交集,不想同流合污!”


最近看到朋友圈有人骂同事,领导,但是何不自己回想一下,难道自己就那么清高,那么正确吗?


当你在骂别人的时候,其实大多时候骂的是自己。


在职场中如果太特立独行,总觉得谁不对,谁不行,那么就容易树敌,对于自己的职业发展很不好。


可能你离开了这个公司就觉得逃离了,但是如果把矛盾搞大,对于自己后面的职业都或多或少有一定的影响,试想,如果背调比较严格,那么对自己有利吗?


就算我的同事是傻逼,我也依然要和他做“好朋友”,这是一句很有智慧的话!


圆滑当道的世界,太过于尖锐未必是一件好事!


作者:追梦人刘牌
来源:juejin.cn/post/7300781073376509987
收起阅读 »

如何提升人的思考能力和深度?

除非是天才型如爱因斯坦、图灵等可以推动一个时代的人,否则绝大多数人和人之间的差异并不是很大,大家都是聪明的、有能力的。唯一影响人的是思维方式、自律能力和执行能力。而思维方式是其中最影响人的。那么如何提升人的思考能力和深度呢? 如果我们给到两个看起来同等聪明的人...
继续阅读 »

除非是天才型如爱因斯坦、图灵等可以推动一个时代的人,否则绝大多数人和人之间的差异并不是很大,大家都是聪明的、有能力的。唯一影响人的是思维方式、自律能力和执行能力。而思维方式是其中最影响人的。那么如何提升人的思考能力和深度呢?


如果我们给到两个看起来同等聪明的人同样的时间,那么思维方式更高效的人一定是成长更快的。我们在考虑一个问题的时候,我们应当是思考用什么的方式去思考这个问题更好。考虑思考方式,就是思考用什么思路、思维模式才能得到结果。也就是说先思考工作的方法然后再实施。


举个例子,我们想要将工作安排进一个日程表中,那么什么样的工作安排方式才能保证做出来的日程表上没有疏漏呢?那在安排之前我们就需要先确认工作顺序。如果这个日程表还涉及到了其它人,我们可能要先有大致的计划找到其它相关人确认和同意后再去安排时间更好。


比如一个简单的例子:“三个人都是朋友打算一起去海外旅行,应该选择哪个国家作为目的地比较好?”



  • 首先,对照大家的日程,看看三个人的假期的交集是哪些天数。

  • 列出 10 个在交集天数能去的国家,并且通过搜索等方式提取出这些国家的三个特色的关键词(如海边、法餐、卢浮宫等等具有特色的词语。)

  • 三人分别从观光、美食、娱乐、费用等作出预估和评价、一起讨论。

  • 将三人评价最高的国家作为最终去的地方。


从上述的例子中我们可以看出来,即使是一个复杂的、庞大的问题我们都可以将其分解为小问题,针对每个小问题设计论点,分析每个论点就能得到答案。


无论是什么课题,它需要的方法和流程都一样。首先整理和分解;然后对每个方法做数据分析;最后在每一种方法中找出重点,把重点落实到方案上。


那么我们要如何去训练呢?你可以在看到广告啊、新闻的时候立马设计一个课题,比如“香飘飘奶茶_一年卖出三亿多杯,能_环绕地球一圈”,那它是怎么计算出来的呢?是将销售额 x 杯子大小算出来的长度吗?绕地球一圈是指赤道吗?等等。可以哪个小本子记下来所有想到的问题。我们在看一个新闻时可以先对着标题思考几分钟,再去看内容,如此反复你就会越来越厉害。


为了帮助思考,我们可以利用脑图工具,将问题逐步的梳理到更细节的地方。当然我们是需要反馈的,我们可以找到这些领域的专家、朋友帮忙看看有没有什么建议或者存在有没有什么问题。


如果是一个比较大的课题,我们可以把很多现象(事实)收集起来,然后对他们进行分析,得到结论后给出行动建议。在《靠谱》中有提到“天上出现乌云,眼看就要下雨,带上伞比较好。”,这其实是对事实、分析和行动三者的比喻。


其次我们要特别区分现状事实和意见建议。这个意见是基于客观的数据得出来的,还是你个人的推测?还是最近的普遍趋势?谁都不知道。这样的话也就不能进行严密的讨论。区分事实现状、分析研究、行动方案,明确回答“结论”和“依据”。


《简单聊聊因果推断》


但就像我在因果推断里聊的一样,“厘清影响问题的各个元素并理解其间的关系 , 我们才能更好找出所谓问题的杠杆解。” 。我们在解决问题时需要关注问题所处的上下文、系统关系,以及各个元素之间的内部因果与联系。复杂问题之间互为因果、环环嵌套,因而有时难以分析和筛选、聚焦于某个单一问题而创造的方案,往往只是局部优化。为此我们需要分析每个问题的产生原因和影响结果,找到某个问题所关联的上下游问题。我们只能判断发生事件在时间上的先后是否有统计显著性,并不能判断因果。相关性并不能准确的说明因果关系。


我们人工推论出来的是一个在我们收集到的数据上的局部的(我们不是上帝视角,无法全知全能)相关性分析成果,它不一定是事实,可能只是一个猜测、预测。


我们做个复杂一点的课题的训练吧:“Louis Vuitton 将于 2 月 18 日起上调全球产品售价,幅度将在 8% 至 20% 之间。”


我们可以把这个课题拆解为下面几个问题:



  • 为什么 LV 要涨价?

  • 涨价之后会有什么影响?

  • 是否会影响未来销量?


对于第一个问题来说,无论 LV 为什么要涨价,它一定是基于未来奢侈品市场的销售增长预计与成本之间的博弈决定的,所以我们要先分析出未来的销售额预计。这里引申一个概念叫需求弹性。



一个人对某种商品的需求的唯一普遍规律就是:如果其他情况不变,他对此商品的需求会随着对其拥有量的增加而递减。这种递减也许缓慢也许迅速。如果缓慢,那么他对此商品所出的价格,就不会因为他对此商品的拥有量的大量增加而大幅度下降;而且价格的小幅度下降会使他的购买量大幅度增加。



在下方的问题下,我会补上一些来自于权威新闻网站的 “证据”,大家可以自行看看问题的答案是什么。


为什么 LV 要涨价?



  • 未来奢侈品的销售额预测是怎么样的?


欧洲时报11月16日,咨询公司贝恩(Bain)15 日发布的一项研究显示,到 2022 年,全球奢侈品行业的收入将达到 1.4 万亿欧元,按固定汇率计算,比 2021 年增长13%,这一增长应该使 95% 的奢侈品品牌受益。在美国和欧洲市场的推动下,这是“相当可观”的一年。研究预测,2030 年之前,奢侈品行业增长将保持在 3% 到 8% 。



  • 同类品牌是否涨价?


2022 年1月,Chanel 在去年十一月已经提价的基础上,部分款式将再度涨价。其中,Coco Handle 涨价 2000 元,BusinessAffinity 与 Le Boy 等包型的价格会有8%-12% 的涨幅‍‍。过去三年,Chanel 的涨幅已经高达 60%。


Hermès 的涨价基本固定在每年的1月进行,本轮调价每款涨价范围从 500 元至 4300 元不等。Lindy mini 从原来的 46500 元涨到 48700 元,升幅为 4.7%;


Dior 于 1 月 18 日,小号 Lady Dior 手袋售价从 3.6 万涨至 4.1 万,增幅达 13.9%。



  • 官方的理由是什么?


价格调整考虑了生产成本、原材料、运输以及通货膨胀的变化。



  • 官方的理由是否成立?


根据 LVMH 2022 年的财报来看,经常性业务的利润方面,除了下降 3% 的香水和化妆品外,其他业务的利润均有两位数增长,其中精品零售 2022 年的利润较 2021 年激增 48%,时装与皮具的利润增长 22%,手表和珠宝增长 20%,酒类业务的增速 16% 垫底,但酒类的营收和盈利都创自身年度新高。


管全年总销售额增长 17%,但 LVMH 的利润率却持平。该公司决定将其数十亿美元的营销预算增加三分之一,这已经成为奢侈品行业的普遍趋势。品牌需要在广告上投入巨资,以继续证明价格大幅上涨的合理性。瑞银(UBS)分析师估计,去年奢侈品品牌平均涨价 8%,与全球通胀水平大致一致。



  • 中国放开疫情管控是否有影响?


中国在全球个人奢侈品消费中的份额激增,从 2019 年的 38% 至 39% 猛增到 80%。


在12月26日中国内地宣布将于1月8日取消将近三年的防疫政策后,据《华尔街日报》报导,这不仅让世界各国迎来全球最大的旅游消费来源群体,放鬆政策的消息还提振了全球股市,奢侈品股尤其受益,因这意味佔奢侈品市场约很大部份的中国消费者正式归来。


著名奢侈品巨头 LVMH 集团(LVMH Moet Hennessy Louis Vuitton)早前表示,其亚洲(不包括日本)第一季度的收入增长放缓至8%,但仍是其最大的单一市场地区,佔全球总收入的 37%。


为了迎合日益增加的中国消费者,许多欧洲奢侈品牌自疫情前几年已增聘了会中文的员工,并开始专注开发中国游客喜爱的产品。国际管理谘询公司贝恩公司(Bain & Company)的数字显示,虽然中国消费者受疫情限制而有所放缓,今年只佔全球奢侈品支出最多19%,但预计到2030年他们将佔多达四成的市场份额。


预计中国游客要到2024年才会大规模重返欧洲,进一步提振公司销售业绩。


涨价之后有什么影响?


我们拿它在 2022 年 2 月涨价后的表现来看看:



  • 2022 年四季度营业收入 226.99 亿欧元,同比增长 13.3 %,分析师预期 223.5 亿欧元,全年营收 791.84 亿欧元,较 2021 年增长 23%,分析师预期 787.2 亿欧元。

  • 2022年净利润140.84亿欧元,同比增长17%;来自经常性业务的利润为210.55亿欧元,同比增长23%。


是否会影响未来销量?


2022 财年 LVMH 集团在地缘政治和经济形势的不利影响下,仍然创下历史业绩新高,集团销售收入达 792 亿欧元,营业利润达 211 亿欧元,皆增长 23%。


尽管全年成绩单亮眼,但相较第三季度数据,第四季度所有地区的增长有所放缓。去年第四季度,除日本外,亚洲地区的内生性营收同比下降了8%(该公司只报告每季度的内生性变化)。奢侈品研究所的 Milton Pedraza 分享说:“对于所有顶级奢侈品牌和集团来说,2022年的增长主要来自强劲的定价,而来自同店销量增长的比例则要小得多。”


随着中国政府计划逐步重新开放国际旅游,可能还要有几个月时间,中国游客才能重新大量出现在欧洲。这应当会释放消费,因为考虑到价差和退税,巴黎或米兰等城市的奢侈品价格要比中国便宜多达 40%。


按照 LVMH 的预估,中国要到 2024 年才会完全恢复对奢侈品的消费。


英国央行周四也将关键利率上调 0.5 个百分点,连续第 10 次上调关键利率,但释出信号可能很快就会暂停这一系列加息行动,因同比通胀率下降,经济步履蹒跚。


欧洲央行此举是连续第五次大幅加息,使关键利率达到2.5%,创下2008年以来的最高水平。不过这一水平仍然低于美联储和英国央行的利率,前者在周三将利率提高到4.5%至4.75%,后者则在周四早些时候将利率提高到4%。


天达(Investec) 经济学家在给客户的一份报告中写道,中国放松严格的动态清零政策提振了增长前景,而欧洲天气转暖已帮助缓和能源危机的严重程度。他们把对今年全球经济增长的预测从 2.2% 提高到 2.4%。


总结


LVMH 的涨价本质上是希望在通货膨胀下保持增长,如果希望保持增长就需要投放更多的广告和营销,如果要有钱投入就必须要涨价,而要证明涨价是对的那就得继续投入更多的钱。好在是奢侈品集团们对价格的调控都比较“自由”。


其次考虑到欧洲加息和天气转暖,欧洲的整体区域市场份额也会获得提升。按照现在的预测来看全球的经济似乎是在往好的方向增长,中国放开了疫情管控后以及全球旅游业的逐渐恢复可以有效的给 LVMH 带来一个更大的前景,那么在市场仍然是有很大的需要的情况下,即使维持目前的销售量不变,当价格提升时盈利就会上涨。综合上述在经济回暖的情况下、中国疫情管控放开销售量可能会增加,各大奢侈品集团自然而然就会开始进一步涨价追求更高的利润。LVMH 公司表示,即使面对不确定的地缘政治和宏观经济环境,该公司也有信心通过成本控制和选择性投资的政策,保持目前的增长水平。


作者:Andy_Qin
来源:juejin.cn/post/7196140566110470203
收起阅读 »

创业一年 | 一名普通前端的血泪史

前言 年初我裸辞创业了,跟一个朋友一起合伙做项目,我主要还是做技术部分,开发一个回收类的项目 也是第一次创业,虽然听过很多道理,自己经历过又是另外一回事 我们的项目经历过高峰,现在算是谷底,基本的情况基本就是在苦苦挣扎 这篇文章我会把我所经历的过程讲述出来,在...
继续阅读 »

前言


年初我裸辞创业了,跟一个朋友一起合伙做项目,我主要还是做技术部分,开发一个回收类的项目


也是第一次创业,虽然听过很多道理,自己经历过又是另外一回事


我们的项目经历过高峰,现在算是谷底,基本的情况基本就是在苦苦挣扎


这篇文章我会把我所经历的过程讲述出来,在最后也会总结一些创业过程的一些经验和避坑指南


希望对你有所帮助


自我介绍 & 背景


我是一名快35岁的前端码农,离职前是在银行做的外包开发。2014年开始从事开发,不过刚开始是做的iOS开发,后来又转了web前端开发


眼看35岁大限快到,内心比较着急,着急的去探索一条以后的出路,我想这应该是码农们以后必须要面对的问题


只是年初的时候,正好有一个契机,我就想趁着还没到35岁之前,主动出击,做一番尝试


当前也是做好了充分的准备


契机


这件事的契机就是我给朋友开发一个小程序,业务量在慢慢的起来;一商量就决定去做这件事了,当然也跟家里商量一下,用一年时间来试错


我的理由是:


对于码农来说,年龄是个很难跨过去的坎,这一步迟早是要来的,我不太想被动的等到那一天,我还是想主动的寻找出路


离开上海


我走之前跟一些朋友做了道别,把自己的行李全部塞进来车里,开着车又去了一个陌生的城市(去朋友的城市),离开的时候真的是感慨万千


有家人的地方才有温暖,老婆小孩都走了,一个人呆在上海特不是滋味


业务的高速发展


我们的业务在上半年还是发展很顺利的,通过抖音直播等方式,吸引用户,用户越来越多,业务也慢慢放量了


我们的注册用户有28万多,高峰时期Api调用量有250万


我们的收入来源有以下几部分


会员费


我们的利润来源之一是 会员费


截止目前为止,合伙人有350个左右,早期的话一个合伙人大概赚1000块,后期一个会员赚2000块,代理商有1700个,前期一个赚100,后来涨价一个赚288元,具体前期多少个,已经不清楚了


细算下来,我们收的会员费都大几十万了,应该是赚钱的


产品的差价


我们利润来源之二是产品的差价


我们回收的产品也是有一点利润的,只是不多,一个才几毛钱,甚至几分钱,但也都是有利润的,需要走量


最高峰的时候,一天的订单有10万单,目前已经萎缩到了5万单左右


这其实也是一部分利润,到目前为止,累计应该有1000万单


广告费


我们利润来源之三就是小程序广告费


想必大家都开发过小程序,小程序后台是有广告费的,我们的广告费也不少


但是很遗憾我刚开始开发的时候用的是 别人的 serverless 的框架,对的,就是 LeanCould,这玩意每天有3W的免费的Api调用量,而我们的量非常大,所以被收取的服务器也是不少的


小程序的广告费基本覆盖了服务器的费用,还略微有些结余


最高的一天广告费有1000多,后期慢慢稳定了就是300左右,而服务器的费用大概在200左右


关于小程的广告费,如果没有新人进入的话。他的广告费会下降的很厉害,做过的都知道


下面贴几张图,下面的小程序的广告收入,大部分就在这里了


image.png


image.png


前期一直用的LeanCould也是有对应服务器的 5W多


image.png


后来我自己买了服务器,写了后端,就迁移了平台,也就是目前在用的平台


image.png


隐患


随着时间的不断的推移,慢慢的发现平台有点入不敷出了,太奇怪了


现在才知道,其实出货不太好出了,我们负责出货的朋友,没有及时沟通,导致我们的囤货大量积压,卖不出去


其实这个现象提前就已经有了,但是负责推广和运营的朋友并不知情,一直都是在推广,提现秒到,风控没有做好


等发现问题的时候,其实是有点晚了,我们的货囤了很多了


现在我们的现金流已经非常的吃紧了


最可怕的是我们囤货的东西市场价值越来越低,很多甚至下游都不收了


失败总结


失败的原因肯是很多的,但总结下来有以下几点


1.公司的流水一定要清晰透明


因为很多小团队,甚至就2-3个人,不管有没有盈利,都要做到财务公开和透明,这样有两个好处


第一 防止钱进入私人口袋


第二 每日的现金流可以让随时有危机感,并且可以随时意识到危机


每日公开现金流真的很重要,重要的事情说三遍


每日公开现金流真的很重要,重要的事情说三遍


每日公开现金流真的很重要,重要的事情说三遍


如果实在做不到每日对账,最少一个礼拜一次


2.每个人的股份也要分清楚


很多时候都是好朋友,熟人,就没有太谈这个方面的事情。但是确切的告诉你一定要大方的谈,因为这个影响到后面的利润分成,很容易出现矛盾


关于技术方面


1. 先用LeanClund 开发


为什么一开始是使用serverLess开发



  • 因为速度快,前期产品从0到1,全部都一个人写,功能还是蛮多的如果又去写前端,又去写后端,还要运维,确实开发速度很慢

  • 自己做前端出生,后端的不太会,虽说增删改查比较简单,但是那只是最基础的功能,这是真实的线上项目,从没有弄过,还是不太会

  • serverLess 我比较熟,之前也开发过一个线上项目,只是 调用量比较小


2. 自己写买服务器,全部自己开发


为什么要自己开发全部代码



  • Api调用量大了之后,LeanCould的费用太高了,我们需要节省成本

  • 我们要做自己的APP,因为小程序很多时候会被投诉被封,APP可以规避风险(当然我们运营的好,一直都比较稳定,没有被封过,虽然也开发了APP,后来还是主要用小程序,而当时用LeanCould里面有一些代码与小程序耦合了一点)

  • LeanCould 无法没有实现事务等,随着使用的加深,发现它在底层上有些不足,自己写云端写很多逻辑也是比较麻烦(比如微信里面的很多都是要 服务器去调用腾讯的接口,不得不在云端写代码)、


主要技术栈



  • 前端小程序用 uni-app

  • 后台管理系统 是用 Vue

  • 后端使用Koa

  • 数据库使用 MySqlRedies


系统的一些数据



  • 目前系统有 28W用户

  • 目前300W的订单量,每日月5W的新增订单(以前的平台有1000多W的订单量,暂停了)


后面的打算


虽然还有2个月时候才过年,但是 今天的尝试 基本算失败了,正在思考明年干什么


看看还有什么项目做,或者有什么生意做(前提是有一些资源,否则就不做)


实在不行,可能还得去先找个工作


希望我的经历可以帮助到你,大家有什么问题可以评论区交流


作者:三年三月
来源:juejin.cn/post/7295353579001806902
收起阅读 »

早起、冥想、阅读、写作、运动

周岭在《认知觉醒》一书中提出了快速改变人生的五件事,即:「早起」、「冥想」、「阅读」、「写作」、「运动」。低调务实优秀中国好青年交流群也正是从这 5 件事入手,帮你养成好习惯。我也试着实践了有将近一年的时间,今谈谈收获与心得。 早起 一日之计在于晨,一年之计在...
继续阅读 »

周岭在《认知觉醒》一书中提出了快速改变人生的五件事,即:「早起」、「冥想」、「阅读」、「写作」、「运动」。低调务实优秀中国好青年交流群也正是从这 5 件事入手,帮你养成好习惯。我也试着实践了有将近一年的时间,今谈谈收获与心得。


早起


一日之计在于晨,一年之计在于春;早起是个老生常谈的话题了,鲁迅先生小时候为了上课不迟到,还把「早」刻在桌上告诫自己。我小时候每天晚上吃完饭,没什么事早早地就睡了,甚至觉得十点睡觉都是一件很可怕的事。如今呢,自从步入互联网时代,十点?不好意思,十点夜生活才刚刚开始。


秉承着先僵化、后优化、再固化的原则,我决定尝试一段时间。起初几天是真的很难受,白天浑浑噩噩的完全提不起精神。不过慢慢的,晚上倒是越来越早的睡了。差不多半个月时间几乎都习惯了 10 点左右睡觉,6 点前起床。正常早上六点起床后,稍微锻炼一会回来坐那下下汗,冲个凉水澡,然后吃个早饭就去工作了。


持续了有半年时间,直观感受就是身体越来越好,精神头越来越棒;但我并不认为这是早起带来的,潜移默化改变了我的是生活规律。毕竟美国人时差和咱们完全反着来,也没见几个英年嗝屁的。现在为止,我想早起也许就真的只是早点起来罢了。


但有一天,我翻看着旧日的朋友圈:星光不问赶路人,豁然开朗。也深刻地认识到了自己的肤浅,早起其实并不只意味着早点起来罢了。想象一下,如果明天要和女神约会?或者新工作的第一天?不用考虑肯定早早的就起来收拾了,因为你开心,快乐,幸福;甚至要迎来人生新阶段了。所以早起真谛可能不仅仅是早点起来,更重要的是进一步寻找人生的意义,创造生命的价值,为我所热爱奋斗终生!


冥想


关于冥想,老实说太高端了,高端到有点不接地气,反正 100 个人有 100 个见解。刚开始还看了各种视频、翻了有关的书、试了各种动作体验冥想、有没有效果我不清楚,不过睡得倒很快。


感受呼吸、扫描身体、提升专注力,但越努力就越凌乱……由于不能形成持续的正反馈,所以我有点消极。去你的冥想,浪费生命。后续冥想也是断断续续的持续了好久,那天想起来就尝试一下,想不起来就算了。


直到有阵子,忘记具体在做什么,总之就是在写代码。从上班来坐那,要不是同事喊我,还真没感觉一个上午都过去了……也是瞬间明白了《十分钟冥想》中:心流。


我把冥想定义为心无杂念、极致专注。但是早期的努力只是停留在表面上而没有透彻地理解。我认为冥想最重要的一点:感知力、尝试学会深入感受身体各个部位,体会情绪在大脑波动,品尝茶水在身体流淌,体会世间万物。


一个小和尚问得道的师父:“您得道之前做什么?”

老和尚说:“砍柴、挑水、做饭。”

“那得道之后呢?”小和尚继续问道。

老和尚回答:“还是砍柴、挑水、做饭。”

小和尚一脸疑惑:“师父,这不是一样吗?”

老和尚说:“当然不一样。得道前,我砍柴时惦记着挑水,挑水时惦记着做饭;得道后,砍柴即砍柴,挑水即挑水,做饭即做饭。”

阅读


生命是有限的,但书籍却是无限的,怎么用有限的生命阅读无限的书籍呢?根据不科学统计,人的一生最多只能阅读 15000 本书籍,那估计是没有一个人可以活着读完。所以我们应该要追求精读细阅和高质量的阅读。


首先要会读书,读好书。《如何阅读一本书》就非常详细的讨论了怎么样阅读一本书,尽管有关读书的方法论确实很好,但我觉得阐述得太过重复啰嗦。其实读书喜欢什么就读什么,不要拘泥于阅读世界名著,人文哲理。但我建议少读都市言情,穿越爽文,其可吸收的营养价值较少。具体想怎么读就怎么读,咬文嚼字、一目十行都无所谓,但是这一种读法仅限于是一本好书的情况下。可是究竟什么是好书呢?追随那些走的快的人,阅读其推荐的书单。


假如面临的是一本新书,那么你可以尝试:



  1. 深入了解书的作者、写作的背景。

  2. 详细阅读书的自序、引言、大纲、目录等重要信息。

  3. 快速翻阅书中的部分章节。如果感觉这本书很有价值,那就接着继续。

  4. 带着疑问追随作者的步伐,选择最适合的方式阅读。

    1. 这本书讲了什么?

    2. 作者细说了什么?

    3. 作者的观点是否正确?

    4. 作者讲的和我有什么关系?



  5. 收获体会,记录笔记。


再分享一种进一步的阅读方法:主题阅读。在某个类目中挑选同方向的若干本书,然后确认自己研究的主题和方向。



  1. 依次阅读每本书。

  2. 理清问题、界定主题。

  3. 与不同作者达成共识。

  4. 分析讨论。


写作



我学生时期其实最厌恶写作了……为什么会是你给我段话,让我来研究一下它怎么想的,然后再为你阐述一下自己的观点。我 TM 怎么知道他想什么,爱想什么想什么。



写作实际上可以和阅读相结合,从而构成完美的闭环。


不知道是不是只有自己写作效率低,感觉自己就像间歇泉,总是时不时的迸发灵感。但有时候喷多了,我还写不下来。所以我一般阅读书籍的时候总是会主动掺杂一些技术类目书籍,这样既有助于提高专业技能,又能留足思考时间。


写作我倒没啥可分享心得的,随心所欲,不必整的很累。但必须重视以下三点:



  1. 务必不要出现错字。

  2. 一定要正确地运用标点符号和合理地分段。

  3. 确保文章整体阅读流畅性。


运动


生命在于运动,如只老乌龟一样冲击活 100 年!


运动锻炼不局限于任何形式,爬楼梯也可以,最重要的是生活态度。千万不要眼高手低,今天运动明天就想超越博尔特,持续保持正反馈,日拱一卒,冲吧骚年!


如果不知道如何下手,可以参考我的 wiki 手册:健身手册




其实吧,哪怕你尝试了「早起」、「冥想」、「阅读」、「写作」、「运动」,也不可能立刻获得收获。过去既然无法改变,未来更不知道何去。


那么请尝试着慢一点,慢一点,再慢一点,也许当你回头那刻,轻舟已过万重山。



来源:早起、冥想、阅读、写作、运动 - 7Wate‘s blog



作者:7Wate
来源:juejin.cn/post/7210298403070722105
收起阅读 »

低p程序员互联网求生指南

大家好,我小j。 先做个自我介绍,我在国内大厂担任数年的开发工作,但是回顾我的职业生涯,我认为还是充满遗憾和失望的,中间做过几次错误的选择。在此,刚好借助这个文章,我想回顾下之这数年的职业生涯,点出失败的教训,描述下在我认为的互联网公司能安全度日,谋求晋升的要...
继续阅读 »

大家好,我小j。


先做个自我介绍,我在国内大厂担任数年的开发工作,但是回顾我的职业生涯,我认为还是充满遗憾和失望的,中间做过几次错误的选择。在此,刚好借助这个文章,我想回顾下之这数年的职业生涯,点出失败的教训,描述下在我认为的互联网公司能安全度日,谋求晋升的要点以及说点大实话,希望能给各位读者学习的地方。想法很跳跃,大家根据章节观看。如果你有不认可的地方,都是你对,是我太失败。


观点


要对大厂祛魅


我一定要第一个提这个点。

起因是最近在很多技术群看到大家都对大厂开发的身份非常崇拜,觉得大厂的人一定比小厂中厂优秀,大厂的人说话一定是对的云云,大厂的技术一定更好,而且在国内论坛上和学生辩论过大厂的观念,让我这个前员工深受震撼。所以一定要找机会聊一下这个话题,可能会伤害朋友们的感情,但是还是想聊一下。



  1. 大厂人是不是一定非常优秀

    不是,国内大厂在黄金时期大部分是冗余性招人,以应对每年的绩效考核和未来可能的业务拓展,一个管理一定要懂怎么要新财年的hc,这样才能保住完成手下大部分的开发任务。

    大厂面试的默认逻辑会导致大量学校好、学历好、掌握面试技巧的人进入大厂,这也是为什么很多知识星球,面试指南,面经,小册盛行的原因。

  2. 剖析大厂开发

    在我们了解了这个前提下,解析下大厂开发,其实也符合二八原则,大厂20%左右的员工是真的有经验有天赋的超能力者,他们去实现架构,完成整个开发流程套件、开发系统的开发。而大量的员工实际上是在其他大佬规划好的线路上填api糊业务罢了,完成基础职务,之后再开发各种okr项目来满足绩效的要求。从技术的角度来看,大部分大厂开发实际平均水平也没有那么高,也是业务仔罢了。

  3. 大厂真正优秀的是什么


    • 大厂真正优秀的是有一些内部架构大佬完成一套完善的开发套件以及设置开发流程,让每个参与大厂的开发都有相对不难受的开发体验以及完整的上线监控流程。让不同水平的开发都足以完成他们被要求完成的任务。




    • 大厂优秀的是有远超中小厂的业务体量、薪资福利。




    • 大厂优秀的是身边同事基本都很优秀,都有自己能学习的点,也是未来的社交圈子。




    • 大厂优秀的是能让你熟悉一整套成熟的开发流程,需求评审-开发评审-业务开发-发布提测-正式上线-日志监控-热修回滚。让你了解一整个应用的开发方式。




    • 大厂优秀的是能给你简历加分,带来未来可能的发展机会。




    • 大厂优秀的还有像ata、学城这种前人留下的各种资料可供学习,虽然很多水文但是也远比简中外面的文章靠谱。




    • 大厂优秀的是有更多owner项目的机会,让你能有机会发挥自己的能力大展拳脚。






身为大厂人,应该清楚现在的成就是自己的能力还是平台给的机会,戒骄戒躁。

身为非大厂人,也不要太神话大厂,其实屎山一样很多,大家还是理性讨论。


说句政治不正确的,很多大厂的成功除了依托本身人才和领导层的慧眼以外,更多还是依托时代背景,时势造英雄。 为什么目前环境小厂发育艰难,因为一旦你业务达到一定水平足以引起大厂注意以后,大部分大厂都会提出收购,如果你统一收购就会并入大厂之中。如果你不同意收购,他们会利用自己的雄厚财力定点爆破你的员工,抄袭你的创意,诋毁你的业务,抢走你的客户。当前创业不仅要选对市场,还要顶得住大厂的摧残。


高考很重要,学历很重要,专业很重要


虽然可能看到文章的人大多数已经就业或者在大学学习,但是我还是想提这个点。

诚然,互联网开发已经算是不看学历,不看出身的几个职业之一,但是在相同水平的一群求职者中,面试官还是更愿意招自己的校友、学历好看的人、专业对口的人。这个也算是一个潜规则,从好学校毕业中得到一个好员工的概率确实比从一般的学校中挑到前几名的概率大。虽然我们说宁做宁做鸡头不做凤尾,但是现实生活往往是凤尾的平均境遇比鸡头被伯乐适中的概率高,不要去赌自己能被人发掘,要尽量凑到高水平人群中,往往被人选择的机会更大。


选择高校的排名大概就是综合排名>行业内专业知名度>高校所在城市(影响你的实习选择)。


要承认和接受互联网里的圈子


首先叠个甲,这块并不是说圈子一定是好事,但是目前的环境圈子确实能在职业发展中帮助你迅速提高,这个圈子包括老乡圈、学校圈、公司圈(比如bidu帮、ali帮)、技术圈、老同事圈(etc.),大家在一个陌生环境中还是会倾向去找自己有关系的人,结成圈子,铁打一块,在一个圈子里,对你面试过关,绩效提高,晋升都有帮助。


互联网也需要情商,也有嫡系


很多人包括我之前对程序员的理解也是不用跟人打交道,只需要在电脑上完成开发任务即可,但是实际的工作生涯中,因为你的绩效是人评,你的晋升是人评。不可避免还是要多跟人打交道。跟+1(组长)的关系,跟+2(部门老板)的关系或多或少还是对你的结果有一些影响,我并不是说让大家去舔,但是起码要有一些眼力见,做该做的事情。


聊完了前面几个很油的话题之后,我们回归到实际开发生活中


尽量选择大厂,注意识别子公司和外包


虽然我们之前想让大家对大厂祛魅,但是目前来看进入大厂还是能带来更多的收入和晋升机会以及未来的跳槽机会,而且你未来的同事圈层也会更为优秀,要知道这些人就是你未来的内推池,在互联网,互帮互助永远比单打独斗更好。在同等情况下,我们肯定推荐大厂offer>小厂offer,核心offer>边缘bu offer。大厂的卷虽然不一定能一定让你收益,但是很多小厂卷都卷不出收益,从roi来看,大厂核心部门是我们的就职首选。

但是也要分清大厂、大厂子公司和外包。有些公司虽然名义上是大厂子公司,但是无法享受大厂的权益,属于是披着羊皮卖狗肉,环境不好的时候选择先去子公司呆着无可厚非,但是如果你一心想参加大厂,却选错了bu,可能会浪费一段时间。

尽量不要选择外包,国内目前对外包的开发经历还是或多或少有一些歧视的,这个歧视不会表现在jd里,而是hr简历关、面试中可能因为你的背景一键否定。


领导的意义远大于你的想象


一定要珍惜一个好的领导
在相同水平的公司选择下,重要性上我认为有资源的部门>领导nice程度>>>>>>其他因素。

有潜力/大老板亲自抓的业务能带来更多的晋升机会,而且窗口期进入也很容易,一旦做大了容易成为骨干,后续owner项目机会大(前提不被后续老板亲信空降摘桃子)。
不好但是有资源的部门也能分一杯羹。
但是领导作为你天天见面的人,对你的影响比任何都大,一个理想中的领导不一定技术非常牛逼,但是一定是懂得对外抢肉抢功劳,对内帮助内部成员成长,懂得规划成员的晋升路径,及时跟进组员问题,适当提携帮助的人。由此可以看出来,跟着一个好的领导,不仅有利于工作情绪,也会让你一路顺利的走上晋升之路。

相反,遇见一个不合适的领导,不仅经常pua,不下班,还经常让你背c,没有晋升机会,不如趁早活水骑驴找马。离职原因无非钱给少了,心受委屈了,坏领导能让你同时体会两种感受。


学会和领导汇报工作


新人经常做错的一个事情就是闷头干活,不会汇报,不会报功。要知道领导不可能了解每个人的进度和开发内容,每周的周报是唯一的汇报途径。如果你所做的内容不被领导知道,那么又怎么表现你的价值呢?所以,要学会跟领导汇报进度,可以是每次做完一个阶段后发一个简略的阶段报告,亦或是遇到问题时及时和老板沟通目前的困难以及可能能解决的方法。让老板充分了解你的工作,才能帮你去谋求进一步向+2的汇报,不要做一个只会闷头干活的老黄牛。


学会跟领导提出想法


承接上个话题,举一个例子。如果我们想晋升涨薪,完全可以oneone的时候跟老板提出想法:老板你看我如果想晋升/涨薪,我应该去做哪些内容/完成哪些目标呢。从领导的回答也可以看得出他对你的态度



  1. 如果他认真回答,给你列好路径,那么说明晋升/涨薪还是很有希望的,这也是身为领导应该去做的事——规划自己小弟晋升,那么就按着他的路子付出努力实现

  2. 如果他给你画饼,打哈哈。说明你不是嫡系,可能需要在多做一些事情引起他的注意。

  3. 如果他完全无视这个话题,说明他完全没考虑你的晋升情况,那么这个时候就该考虑后路了


要学会onoene找老板沟通,不仅是让老板知道你最近的情况,也是了解老板对你的态度的时候,要学会双向沟通。


不要过多的嫌弃分配的业务


大部分大厂的业务并没有太高的技术含量,尤其像业务部门的活动业务和基建部门的客服业务,我们要清楚的认识到工作就是给自己赚窝囊费的,只要钱给足,业务什么样都是可以接受的。但是在完成日常业务的时候,我们可以考虑如何优化自己手里的活,怎么让自己手里的活效果更好,这方面的助力是有助于老板看到你的亮点,理解到你的能力的。而不是经常抱怨任务烂,不想做。


学会与人为善,维护自己的朋友圈


要知道,你身边的朋友大多技术不弱于你,未来这些人都是你可能的内推对象和被内推对象,要学会与人为善,尽量不要和同事闹冲突,最好之后也经常保持联系,万一之后有内推的机会这些都是潜在的大腿,要知道无论是国内还是国外,招人的第一选择永远是内推,维护好自己的朋友圈,早晚会得到助力。


多贴近业务,了解业务流程


不要只会做一个执行者,在日常的业务开发中要尽量的去学习业务的流程,了解整个bu的运转方法,盈利方法,这样在需求会上你也能提出自己的意见。多和产品和运营聊天,了解业务数据。这样你也能对bu下一步是进一步发展还是收缩有一定预期,提前规划下一步自己的努力方向。


要学会投巧的发展


首先感谢群友大编制的提出。人不可能是全能的,一定要有一定的不可替代性和独特性,如何在一个团队中脱颖而出,除了本身真的足够优秀以外,还可以投巧的发展,举个例子,在一个前端业务团队,普遍大家都会脚手架配置和组件化,拥有这些技能不稀奇,但是如果A会可视化开发,B会nodejs,那么这两个同学在这个团队中就容易显得更亮眼,如果大家的业务都是糊业务,这两个同学在所学技能上稍微多点优化就容易获得更好的绩效。


要有技术追求,但不要太沉迷在公司成长


虽然现在大家也基本上认识到成长不能靠公司了,大部分公司的日常业务开发技术含量并没有那么高,不要妄想在日常日复一日的业务中提高自己的技术水平,那只能提高你糊业务的熟练度和经验。如果想追求技术的提高,还是要靠工作之余的okr项目或者是自己的私下的学习。但是,想在目前国内这个环境中稳定成长厚积薄发,还是不能放弃技术追求,技术经验在身,就算面对裁员风险也不慌。我们要卷,要以提高技术、增加晋升机会,有目的的卷,无效的卷不仅带不来收益,还能带来同事的鄙夷和icu的风险。


承认天赋的差距,在团队中不掉队


程序开发确实是一个天赋的职业,要承认天赋和能力的差距,达到日常业务线上0bug、0delay的60分目标不难,但是想更进一步确实需要正确的方向和努力,我们做不到比所有人都优秀,只需要做到在团队中不掉队,不是最差的几个,就能尽可能的保证在裁员大潮幸存。


在开发之余,考虑自己的长处


目前国内环境比较恶劣,35的达摩克利斯之剑悬在每个人头上,一方面大厂hc在缩小,创新项目在关停,就算你再自信,一但没有hc,也没有换岗位的机会。另一方面随着年龄的增长,初级中级开发的大门也随之关闭,一但你在某个年龄段没有达到对应的职级,就容易被视作失败。而跳槽更要看目标公司有没有对应职级的坑位,职级越高坑位越少。目前高龄开发的环境还是比较恶劣的。

在这之上,我们要考虑是否找到另一个赛道,发挥自己的长处。能有效延缓焦虑,降低未来的风险


总结


说了这么多,也是我目前的一些浅薄经验纸上谈兵,至少从我的职业经验来看,并没有做到以上的内容,还是一个owner项目的大头兵,写了这些内容,也是希望新人不撞我的南墙,老人提前规划后路。欢迎大家多多交流,让国内有一个更好的程序员成长环境。

永远不要忘了,家人爱人和朋友是你永远的后盾,在你坚持不住,想投降的时候,记得你永远有一个避风港存在,一个成功的人永远离不开背后默默支持的人,工作只是我们生活中的一小方面,善待朋友,珍爱亲人,才是我们一直要做的事情。不要因为工作伤害爱你的人。


作者:valkyrja
来源:juejin.cn/post/7299853894733168681
收起阅读 »

2023行情不好,大龄员工如何跳槽

每一次找工作,都像一次职场大考,既是一次好的整理机会,也是一场对过去工作全方位的检验。--2023年换工作记。 来新团队快两周了,从年初二月份开始准备,到现在近9个月时间,换工作这事才算告一段落。 我今年35了,本科毕业十多年了,级别也不高,一线大兵,职场人的...
继续阅读 »

每一次找工作,都像一次职场大考,既是一次好的整理机会,也是一场对过去工作全方位的检验。--2023年换工作记。


来新团队快两周了,从年初二月份开始准备,到现在近9个月时间,换工作这事才算告一段落。


我今年35了,本科毕业十多年了,级别也不高,一线大兵,职场人的窘境在我身上齐活了--大龄Low T。


这篇文章总结了此次跳槽前后的一些思考与实践,供朋友们参考。


充分的准备


因为这次跳槽中间穿插了内部转岗、换城市、搬家,所以时间比较长。实际有效的求职时间大概5个月。


内容时长
复习专业技术1个月
刷题1个月
写简历3天
看机会&面试3个月


客观上行情确实不好,机会少,所以要留更长的时间等待机会,注意!是等!并不是你刚好投简历,就能遇到好的机会,你要留足够的时间等市面上合适的机会放出来。




公司一般年初会做好招聘预算,所以有金三银四,有的团队是下半年做完调研定好战略,启动招聘为明年做准备,这大概在金九银十。除了这两个窗口,其他时间大部分是淡季,除了少数公司遇到风口了会临时增加预算,或者业绩很好继续追加人,比如OpenAI的窗口,国内今年很多公司在补大模型和算法相关的人才。



准备-复习专业技术


我在百度呆了8年多,培养了一个习惯,重要的事情,全力以赴。



人和人的差距,其实就是几个关键点的差距。冲上去了就上去了。把每一个能做好的点都做到极致,你大概率就能超过别人。



时间有限,复习要有重点。


复习之前,你要明确几个简单的问题:



  1. 你出去要应聘的岗位和级别是什么?

  2. 这个岗位的要求是什么?

  3. 和别人比,你有什么优势?


上常用的招聘app(我主要用的是boss直聘)上搜一下相关的岗位是否有招聘,看看都有哪些公司、哪些岗位在招人,有什么要求。


如果你不介意换城市,多看几个城市,可以增加面试成功的几率。


然后,明确你要打造自己的"人设",不管你过去在公司干的怎么样,通过这几个月的复习你想成为什么样的人?成为哪个领域的专家,精通哪些技术、熟悉哪些技术,列出来,挑两三样重点复习,没有的话,就现整一个,临阵磨枪不快也光!B站上大把的免费教程教你如何快速成为专家。



求职中,最忌讳样样都会、啥都一知半解,好的简历和面试通常是精通一两门,其他的能横向拓展、融会贯通。




能精通一点意味着候选人能长期有耐心的钻研技术、深入解决问题、追求卓越,面试官有理由相信其他的问题他也一定能做的好。



我从事的是图形领域的开发工作,我花了一个月的时间,整理了OpenGL的常见API及用法、常见的渲染算法、C++高频问题,以及游戏引擎的架构和渲染管线,算是准备的比较充分了。


图形C++
OpenGL知识点整理(1)c++进阶知识点复习(1)
OpenGL知识点整理(2)c++进阶知识点复习(2)
深入理解opengl坐标系统c++3
游戏引擎(1)-ECS模式/
PBR(Physically Based Rendering)-理论/
PBR(Physically Based Rendering)-IBL/
图形学自学之路/

另外还有实时渲染算法、业务工程架构、引擎分析之类的整理,涉及到公司工作就没有发到公众平台上。


刷算法题


平时工作用到算法的地方并不多,想趁这个机会,把算法再熟悉一遍,温故知新。算法赋予了计算机灵魂,大厂考算法是有道理的。


提前给自己打了预防针,做好了打持久战的准备,所以直接买了力扣一年的vip会员,方便刷题和看题解。


另外专门读了一本系统的讲算法的书--《计算之魂-吴军》,从认知上提升对计算机、算法的理解。差不多刷了170多道题,基本上够用了。


关于刷题,之前写过一篇文章:重学数据结构算法(刷题心得)


投简历-找到有效的工作机会


节省时间,在网上找了个付费的简历网站,把履历填进去,能很方便的生成整洁的简历。也是直接买一年的,哥我就打算死磕了。


我已经工作十多年了,不能像刚毕业那样海投,那时是广撒网,有机会就去。现在有非常明确的目标,能接得住总包的工作机会就那么几家,一只手都数得过来,连预演练手的机会都没有,面一家就少一家。


锚定了意向中的那几家公司和岗位,有熟人的找熟人推一推,没熟人的硬投。实际发现,这年头HR都不靠谱了,更不用说猎头了。BOSS直聘上,研发自己跑出来找简历的一般都是真实的,那是真的着急招人,几率也更大,至少他要了你的简历,简历筛选这一关是过了,比HR效率高。


我最后投的几个岗位,都是字节研发侧主动来要简历的,加微信问了下,都是有大量真实的HC。


多说两句,其他的公司我就不黑了,字节我问了招聘方,他们明确表示不太在意年龄,冲这个人才观,我也更笃定了去字节。


面试-全力以赴每一场面试


我当了很多年面试官,也参加了很多次校招。面试其实很看眼缘,很难做到完全公平,除非你特别牛逼,有绝对的优势过面试,或者特别垃圾狗都嫌弃你,大多数候选人都在中间徘徊。


面试你的人大概率以后是你的leader,或者peer,他看你气质顺眼很重要,他认可你了,只要你不太差,也会给你过的。不喜欢你的气质,就无意中会有些刁难,过和不过都是一念之差。


这里说几个面试相关的细节。


不会的问题怎么办


说不知道、不会、没做过,是最差的回答。我面试中,会坦言自己没遇到过,请给我几分钟思考下,尝试找到合理的答案。


没有思路怎么办?


我会和面试官沟通,能否给一些提示,或者换一道题。


感觉自己没面好,直接放弃吗?


人生不要轻易言弃!!举两个我这次面试中的案例:



  • 案例1.


我一面的算法题写的有点问题,面试完回到家9点多。回忆代码逻辑,重新写了一遍,调试没问题了微信上和面试官沟通了下。


我表达的意思是:我不会放过任何一个有问题的代码,永不放弃!



  • 案例2.


二面的面试官问的很细,问了几个游戏引擎中很深入的问题,没回答好,我感觉自己应该是跪了。回到家我找了之前自己学习和整理的相关笔记发给面试官,告诉他,这些问题我之前真的有认真研究过,只是这次面试没回答好。


另外,我把在当前这家公司的历史绩效也截图发给了面试官,连着几年都拿了团队最高绩效,告诉他我真的很靠谱,恳求再给一次面试机会。


大概是我的真诚和坚持打动了面试官,第二天电话聊了下,还真给过了,推到了第三面。后面的面试就都比较顺利了。


涨幅


今年的行情,我了解到的,大部分公司都是卡30%的涨幅。HR问我期望薪资时,我很坚决的说,我看中的是这个机会,我热爱这个领域,薪酬差不多就行。


我心里能接受的最差的结果是降薪20%。这个年纪了,还能去一个往上走、充满机会的团队,持续成长,对职业发展来说是莫大的幸运,单纯的追求薪资是在杀鸡取卵、饮鸩止渴。


题外话-天赋是什么?


整个求职过程有点坎坷,有一些机会面的很好没有后话也很费解,后面也释怀了,大概是用人团队没有HC、或者给不上价,给内推人一个面子、走走过场,然后随便找个借口fail掉。


一个好朋友,也是前同事,一直关注我的面试进展,比我还紧张,他说,如果我这么努力这么牛逼都找不到工作,他的职业发展该何去何从。


第二天早上,我给他发了一个易建联退役的演讲视频[1分钟]:

v.douyin.com/iRSfCUAe/


真正的天赋,是你有多少热爱和付出-易建联


有多少朋友抱怨职场不公、运气不好,请问,你对自己的热爱有多少坚持,你对你的职业又有多少热爱,你又有多少勇气和毅力去改变这一切。



"没有人能随随便便成功,我也不例外"。



这是那天早上,我还在等offer、去上家公司上班的地铁上,在微信上打给这位朋友的最后一句。


作者:sumsmile
来源:juejin.cn/post/7300118821533089807
收起阅读 »

一个小公司的技术开发心酸事

背景 长话短说,就是在2022年6月的时候加入了一家很小创业公司。老板不太懂技术,也不太懂管理,靠着一腔热血加上对实体运输行业的了解,加上盲目的自信,贸然开始创业,后期经营困难,最终散伙。 自己当时也是不察,贸然加入,后边公司经营困难,连最后几个月的工资都没给...
继续阅读 »

背景


长话短说,就是在2022年6月的时候加入了一家很小创业公司。老板不太懂技术,也不太懂管理,靠着一腔热血加上对实体运输行业的了解,加上盲目的自信,贸然开始创业,后期经营困难,最终散伙。


自己当时也是不察,贸然加入,后边公司经营困难,连最后几个月的工资都没给发。


当时老板的要求就是尽力降低人力成本,尽快的开发出来App(Android+IOS),老板需要尽快的运营起来。


初期的技术选型


当时就自己加上一个刚毕业的纯前端开发以及一个前面招聘的ui,连个人事、测试都没有。


结合公司的需求与自己的技术经验(主要是前端和nodejs的经验),选择使用如下的方案:



  1. 使用uni-app进行App的开发,兼容多端,也可以为以后开发小程序什么的做方案预留,主要考虑到的点是比较快,先要解决有和无的问题;

  2. 使用egg.js + MySQL来开发后端,开发速度会快一点,行业比较小众,不太可能会遇到一些较大的性能问题,暂时看也是够用了的,后期过渡到midway.js也方便;

  3. 使用antd-vue开发运营后台,主要考虑到与uni-app技术栈的统一,节省转换成本;


也就是初期选择使用egg.js + MySQL + uni-app + antd-vue,来开发两个App和一个运营后台,快速解决0到1的问题。


关于App开发技术方案的选择


App的开发方案有很多,比如纯原生、flutter、uniapp、react-native/taro等,这里就当是的情况做一下选择。



  1. IOS与Android纯原生开发方案,需要新招人,两端同时开发,两端分别测试,这个资金及时间成本老板是不能接受的;

  2. flutter,这个要么自己从头开始学习,要么招人,相对于纯原生的方案好一点,但是也不是最好的选择;

  3. react-native/taro与uni-app是比较类似的选择,不过考虑到熟练程度、难易程度以及开发效率,最终还是选择了uni-app。


为什么选择egg.js做后端


很多时候方案的选择并不能只从技术方面考虑,当是只能选择成本最低的,当时的情况是egg.js完全能满足。



  1. 使用一些成熟的后端开发方案,如Java、、php、go之类的应该是比较好的技术方案,但对于老板来说不是好的经济方案;

  2. egg.js开发比较简单、快捷,个人也比较熟悉,对于新成员的学习成本也很低,对于JS有一定水平的也能很快掌握egg.js后端的开发


中间的各种折腾


前期开发还算顺利,在规定的时间内,完成了开发、测试、上线。但是,老板并没有如前面说的,很快运营,很快就盈利,运营的开展非常缓慢。中间还经历了各种折腾的事情。



  1. 老板运营遇到困难,就到处找一些专家(基本跟我们这事情没半毛钱关系的专家),不断的提一些业务和ui上的意见,不断的修改;

  2. 期间新来的产品还要全部推翻原有设计,重新开发;

  3. 还有个兼职的领导非要说要招聘原生开发和Java开发重新进行开发,问为什么,也说不出什么所以然,也是道听途说。


反正就是不断提出要修改产品、设计、和代码。中间经过不断的讨论,摆出自己的意见,好在最终技术方案没修改,前期的工作成果还在。后边加了一些新的需求:系统升级1.1、ui升级2.0、开发小程序版本、开发新的配套系统(小程序版本)以及开发相关的后台、添加即时通信服务、以及各种小的功能开发与升级;


中间老板要加快进度了就让招人,然后又无缘无故的要开人,就让人很无奈。最大的运营问题,始终没什么进展,明显的问题并不在产品这块,但是在这里不断的折腾这群开发,也真是难受。


明明你已经很努力的协调各种事情、站在公司的角度考虑、努力写代码,却仍然无济于事。


后期技术方案的调整



  1. 后期调整了App的打包方案;

  2. 在新的配套系统中,使用midway.js来开发新的业务,这都是基于前面的egg.js的团队掌握程度,为了后续的开发规范,做此升级;

  3. 内网管理公用npm包,开发业务组件库;

  4. 规范代码、规范开发流程;


人员招聘,团队的管理


人员招聘


如下是对于当时的人员招聘的一些感受:



  1. 小公司的人员招聘是相对比较难的,特别是还给不了多少钱的;

  2. 好在我们选择的技术方案,只要对于JS掌握的比较好就可以了,前后端都要开发一点,也方便人员工作调整,避免开发资源的浪费。


团队管理


对于小团队的管理的一些个人理解:



  1. 小公司刚起步,就应该实事求是,以业务为导向;

  2. 小公司最好采取全栈的开发方式,避免任务的不协调,造成开发资源的浪费;

  3. 设置推荐的代码规范,参照大家日常的代码习惯来制定,目标就是让大家的代码相对规范;

  4. 要求按照规范的流程设计与开发、避免一些流程的问题造成管理的混乱和公司的损失;

    1. 如按照常规的业务开发流程,产品评估 => 任务分配 => 技术评估 => 开发 => 测试 => cr => 上线 => 线上问题跟踪处理;



  5. 行之有效可量化的考核规范,如开发任务的截止日期完成、核心流程开发文档的书写、是否有线上bug、严谨手动修改数据库等;

  6. 鼓励分享,相互学习,一段工作经历总要有所提升,有所收获才是有意义的;

  7. 及时沟通反馈、团队成员的个人想法、掌握开发进度、工作难点等;


最后总结及选择创业公司避坑建议!important



  1. 选择创业公司,一定要确认老板是一个靠谱的人,别是一个总是画饼的油腻老司机,或者一个优柔寡断,没有主见的人,这样的情况下,大概率事情是干不成的;

    1. 老板靠谱,即使当前的项目搞不成,也可能未来在别的地方做出一番事情;



  2. 初了上边这个,最核心的就是,怎么样赚钱,现在这种融资环境,如果自己不能赚钱,大概率是活不下去的@自己;

  3. 抓住核心矛盾,解决主要问题,业务永远是最重要的。至于说选择的开发技术、代码规范等等这些都可以往后放;

  4. 对上要及时反馈自己的工作进度,保持好沟通,老板总是站在更高一层考虑问题,肯定会有一些不一样的想法,别总自以为什么什么的;

  5. 每段经历最好都能有所收获,人生的每一步都有意义。


以上只是个人见解,请指教。


作者:qiuwww
来源:juejin.cn/post/7257085326471512119
收起阅读 »

实战来了,基于DDD实现库存扣减~

大家好,让我们继续DDD&微服务系列,今天,我们看看在DailyMart项目中如何基于DDD实现库存扣减功能。 1. 库存模型 1.1 核心概念 库存是一个非常复杂的概念,涉及在仓库存,计划库存,渠道库存等多个领域实体,在我们《DailyMart微服务...
继续阅读 »

大家好,让我们继续DDD&微服务系列,今天,我们看看在DailyMart项目中如何基于DDD实现库存扣减功能。


1. 库存模型


1.1 核心概念


库存是一个非常复杂的概念,涉及在仓库存,计划库存,渠道库存等多个领域实体,在我们《DailyMart微服务&DDD》实战中,主要关注的是在仓库存模型。


image-20231028224038257


在这个模型中有三个重要的概念:可售库存、预售库存、占用库存,他们的定义如下:


可售库存数(Sellable Quantity,SQ)
可售库存即用户在客户端所见的商品可销售数量。当SQ为0时,用户不能下单。


预扣库存数(Withholding Quantity,WQ)
预扣库存是指被未付款的订单占用的库存数量。这种库存的存在是因为用户在下单后可能不会立刻付款。预扣库存的作用是为用户保留库存,直到用户完成付款,才会从中扣减相应数量的库存。如果用户未能在规定时间内付款,预扣库存WQ将被释放回可售库存SQ上。


占用库存数(Occupy Quantity,OQ)
占用库存是指已经完成付款,但尚未发货的订单所占用的库存数量。这种库存与仓库相关,并且牵涉到履约流程。一旦订单发货,占用库存会相应减少。


根据上述定义,对于一个商品,可售库存数量与预扣库存数量之间的关系是:可售库存(SQ) + 预扣库存(WQ) = 可用库存。


由于每种商品通常包含多个不同的 SKU,在商品交易链路中,无法通过商品id来精确定位库存。为了更高效地管理库存查询和更新请求,我们需要设计一个具有唯一标识能力的 ID,即库存 ID(inventory_id)。此外,在库存扣减操作中还需要存储库存扣减记录,一旦用户取消订单或退货时,可以根据扣减记录返还相应的库存数量。


1.2 领域模型


通过对库存领域概念的分析,我们很容易完成DDD领域建模,如下图所示:


image-20231030160921576


库存 (Inventory): 库存对象充当库存领域的聚合根,负责管理和跟踪商品的可售库存、预扣库存和占用库存等信息。库存对象也具备唯一标识能力,使用库存 ID(inventory_id)来标识不同库存。


库存记录 (InventoryRecord): 库存记录是一个实体,用于记录库存的各种操作,例如扣减、占用、释放、退货等。每个库存记录都有一个唯一的记录 ID(record_id)来标识。


库存 ID(InventoryId)和记录 ID(RecordId): 这两者都是值对象,它们负责提供唯一标识,分别用于标识库存和库存记录。


库存扣减状态(InventoryRecordStateEnum):这也是个值对象,用于标识扣减库存的状态。


2. 库存扣减


库存扣减看似简单,只需在用户支付后减少库存即可,但实际情况要复杂得多。不同的扣减顺序可能导致不同的问题。比如我们先减库存后付款,可能会出现用户下单后放弃支付,导致商品少买或未售出。另一方面,如果我们先付款后减库存,可能出现用户成功支付但商家没有足够的库存来满足订单,这又非常影响用户体验。


一般来说,库存扣减有三种主要模式:


2.1 库存扣减的三种模式




  • 拍减模式:在用户下单时,直接扣减可售库存(SQ)。这种模式不会出现超卖问题,但它的防御能力相对较弱。如果用户大量下单而不付款,库存会一直被占用,从而影响正常交易,导致商家少卖。




  • 预扣模式:在用户下单时,会预先扣减库存,如果订单在规定时间内未完成支付,系统将释放库存。具体来说,当用户下单时,会预扣库存(SQ-、WQ+),此时库存处于预扣状态;一旦用户完成付款,系统会减少预扣库存(WQ-、OQ+),此时库存进入扣减状态




  • 付减模式:在用户完成付款时,直接扣减可售库存(SQ)。这种模式存在超卖风险,因为无法确保用户付款后一定有足够的库存。




对于实物商品,库存扣减主要采用拍减模式预扣模式,付减模式应用较少,在我们DailyMart系统中采用的正是预扣模式。


2.2 预扣模式核心链路


接下来我们重点介绍库存预扣模式的核心链路,包括正向流程和逆向操作。


2.2.1 正向流程


正向流程涉及用户下单、付款和发货的关键步骤。以下是正向流程的具体步骤:


1)用户将商品加入购物车,点击结算后进入订单确认页,点击提交订单后,订单中心服务端发起交易逻辑。


2)调用库存服务执行库存预扣逻辑


3)调用支付服务发起支付请求


4)用户付款完成以后,调用库存平台扣减库存


5)订单服务发送消息给仓储中心,仓储中心收到消息后创建订单,并准备配货发货


6)仓储中心发货以后调用库存平台扣减占用库存数。


image-20231029215629997


2.2.2 逆向操作


逆向操作包括取消订单或退货等情况,我们需要考虑如何回补库存。逆向操作的步骤如下:


1)用户取消订单或退货。
2)更新扣减记录行,状态为释放状态。
3)同时更新库存行,以回补库存。


2.2 库存扣减的执行流程


每一件商品的库存扣减都至少涉及两次数据库写操作:更新库存表(inventory_item)和扣减记录表(inventory_record)。


image-20231030171653428


为了确保库存扣减操作的幂等性,通常需要在扣减记录表中给业务流水号字段创建唯一索引。此外,为了保证数据一致性,修改库存数量与操作流水记录的两个步骤必须在同一个事务中。



关于系统的幂等性实现方案,我在知识星球进行了详细介绍,感兴趣的可以通过文末链接加入。



在数据库层面,库存扣减操作包括以下关键步骤:




  • 用户下单时:insert 扣减记录行,状态为预扣中,同时 update 库存行(减少可销售库存,增加预扣库存,sq-,wq+);




  • 用户付款时:update 扣减记录行,状态为扣减状态,同时update库存行(减少预扣库存,增加占用库存,wq-,oq+);




  • 仓库发货时:update 扣减记录行,状态为发货状态,同时update库存行(减少占用库存数,oq-);




  • 逆向操作时:update 扣减记录行,状态为释放状态,同时update库存行(增加可销售库存,sq+);




通过下图可以清晰看到库存扣减时相关相关数据状态的变化。
image-20231030163042599


3. 核心代码实现


接下来,让我们从接口层、应用层、领域层和基础设施层的角度来分析库存扣减的代码实现。(考虑到篇幅原因,省略了部分代码。)


3.1 接口层


接口层是库存操作的入口,定义了库存操作的接口,如下所示:


@RestController
@Tag(name = "InventoryController", description = "库存API接口")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Slf4j
public class InventoryController {
...

@Operation(summary = "库存预扣",description = "sq-,wq+,创建订单时调用")
@PostMapping("/api/inventory/withholdInventory")
public void withholdInventory(@Valid @RequestBody InventoryLockRequest lockRequest) {
inventoryService.withholdInventory(lockRequest);
}

@Operation(summary = "库存扣减",description = "wq-,oq+,付款时调用")
@PutMapping("/api/inventory/deductionInventory")
public void deductionInventory(@RequestParam("transactionId") Long transactionId) {
inventoryService.deductionInventory(transactionId);
}

@Operation(summary = "库存发货",description = "oq-,发货时调用")
@PutMapping("/api/inventory/shipInventory")
public void shipInventory(@RequestParam("transactionId") Long transactionId) {
inventoryService.shipInventory(transactionId);
}

@Operation(summary = "释放库存")
@PutMapping("/api/inventory/releaseInventory")
public void releaseInventory(@RequestParam("transactionId") Long transactionId) {
inventoryService.releaseInventory(transactionId);
}
...
}

3.2 应用层


应用层负责协调领域服务和基础设施层,完成库存扣减的业务逻辑。库存服务不涉及跨聚合操作,因此只需调用基础设施层的能力,并让领域层完成一些直接的业务逻辑。


@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Slf4j
public class InventoryServiceImpl implements InventoryService {
...
@Override
@Transactional
public void withholdInventory(InventoryLockRequest inventoryLockRequest) {
Long inventoryId = inventoryLockRequest.getInventoryId();
//1. 获取库存
Inventory inventory = Optional.ofNullable(inventoryRepository.find(new InventoryId(inventoryId)))
.orElseThrow(()->new BusinessException("No inventory found with id:" + inventoryId));

// 2. 幂等校验
boolean exists = inventoryRepository.existsWithTransactionId(inventoryLockRequest.getTransactionId());

if(exists ){
log.error("Inventory record with transaction ID {} already exists, no deduction will be made.", inventoryLockRequest.getTransactionId());
return;
}

//3. 库存预扣
inventory.withholdInventory(inventoryLockRequest.getQuantity());

//4. 生成扣减记录
InventoryRecord inventoryRecord = InventoryRecord.builder()
.inventoryId(inventoryId)
.userId(inventoryLockRequest.getUserId())
.deductionQuantity(inventoryLockRequest.getQuantity())
.transactionId(inventoryLockRequest.getTransactionId())
.state(InventoryRecordStateEnum.PRE_DEDUCTION.code())
.build();

inventory.addInventoryRecord(inventoryRecord);

inventoryRepository.save(inventory);
}
...
}

3.3 领域层


领域层负责处理直接涉及业务规则和逻辑的操作,将库存预扣、扣减、库存释放等操作封装在聚合对象 Inventory 中。同时,领域层定义了仓储接口,如下所示:


@Data
public class Inventory implements Aggregate {
@Serial
private static final long serialVersionUID = 2139884371907883203L;
private InventoryId id;

...

/**
* 库存预扣 sq-,wq+
*
@param quantity 数量
*/

public void withholdInventory(int quantity){
if (quantity <= 0) {
throw new BusinessException("扣减库存数量必须大于零");
}

if (getInventoryQuantity() - quantity < 0) {
throw new BusinessException("库存不足,无法扣减库存");
}

sellableQuantity -= quantity;
withholdingQuantity += quantity;
}

/**
* 释放库存
*
@param currentState 当前状态
*
@param quantity 数量
*/

public void releaseInventory(int currentState, Integer quantity) {
InventoryRecordStateEnum stateEnum = InventoryRecordStateEnum.of(currentState);
switch (stateEnum){
//sq+,wq-
case PRE_DEDUCTION -> {
sellableQuantity += quantity;
withholdingQuantity -= quantity;
}
//sq+,oq-
case DEDUCTION -> {
sellableQuantity += quantity;
occupyQuantity -= quantity;
}
//sq+
case SHIPPED -> {
sellableQuantity += quantity;
}
}
}
...
}

/**
* 仓储接口定义
*/

public interface InventoryRepository extends Repository {
boolean existsWithTransactionId(Long transactionId);

Inventory findByTransactionId(Long transactionId);
}

3.4 基础设施层


基础设施层负责数据库操作,持久化库存状态,如下所示:


@Repository
@Slf4j
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class InventoryRepositoryImpl implements InventoryRepository {
...
@Override
public Inventory find(InventoryId inventoryId) {

InventoryItemDO inventoryItemDO = inventoryItemMapper.selectById(inventoryId.getValue());
return itemInventoryConverter.fromData(inventoryItemDO);
}

@Override
public Inventory save(Inventory aggregate) {
InventoryItemDO inventoryItemDO = itemInventoryConverter.toData(aggregate);

if(inventoryItemDO.getId() == null){
inventoryItemMapper.insert(inventoryItemDO);
}else{
inventoryItemMapper.updateById(inventoryItemDO);
}

InventoryRecord inventoryRecord = aggregate.getInventoryRecordList().get(0);
InventoryRecordDO inventoryRecordDO = inventoryRecordConverter.toData(inventoryRecord);

if(inventoryRecordDO.getId() == null){
inventoryRecordMapper.insert(inventoryRecordDO);
}else{
inventoryRecordMapper.updateById(inventoryRecordDO);
}

return aggregate;
}
...
}

小结


本文详细介绍了库存领域的关键概念以及库存扣减的三种模式,同时基于DDD的分层模型,成功实现了预扣模式的业务逻辑。在库存的预扣接口中,通过业务流水表确保了接口的幂等性,不过更新库存的接口暂时还没实现幂等,幂等会在下篇文章中统一解决。同时,值得注意的是,本文所展示的方案采用了纯数据库实现,可能在高并发情况下性能略有下降,当然这也是我们后面需要优化的点。


作者:飘渺Jam
来源:juejin.cn/post/7299037876636696615
收起阅读 »

独自一人时写代码 VS 朋友在旁边时写代码

网友评论:@TAO大鑫:程序员是不允许别人站在身后的@Bibala-Bong:朋友在身边,不停的ls ls ls ps ps ps top top top 怎么能让屏幕上东西多怎么来 @贼王卍冬:一个人写代码:百度有啥我会啥; 朋友在旁边:今天气不错啊@铁柱未...
继续阅读 »


网友评论:


@TAO大鑫:程序员是不允许别人站在身后的

@Bibala-Bong:朋友在身边,不停的ls ls ls ps ps ps top top top 怎么能让屏幕上东西多怎么来 

@贼王卍冬:一个人写代码:百度有啥我会啥; 朋友在旁边:今天气不错啊

@铁柱未来科技有限公司董事长:有时候感觉后边有人就是猛一回头

@新浪云: 程序员不要面子啊

作者:程序员的幽默
来源:mp.weixin.qq.com/s/A-MdLvqmOPxTFBPTJVZ0OQ
e>

收起阅读 »

21亿!李佳琦或面临破产,网友:想看他努力工作样子

双11还没有到来,一场由京东、李佳琦、小杨哥之间的大战却因1台烤箱拉开了大幕。而正是这台烤箱,在李佳琦迫使品牌方起诉京东,得罪小杨哥的那一刻,也扯下了超级头部主播“全网最低价”的遮羞布。事情起因是这样的:海氏向市管局举报京东近日,海氏(品牌方)向市管总局实名举...
继续阅读 »
收起阅读 »

做好人的意义是什么?

今天看抖音上“三根葱”演绎了一个片段: 老张指使老王干活,别人问为啥老让他干,他说:谁让他听话呢? 老李骂老王磨磨蹭蹭,别人问为啥不骂老张,他说:老张脾气大,不好惹! 最后总结,懂事的会承担更多,脾气好的都在受气,照顾人的没人照顾。 看到这里,我多少有点共...
继续阅读 »

今天看抖音上“三根葱”演绎了一个片段:



老张指使老王干活,别人问为啥老让他干,他说:谁让他听话呢?


老李骂老王磨磨蹭蹭,别人问为啥不骂老张,他说:老张脾气大,不好惹!


最后总结,懂事的会承担更多,脾气好的都在受气,照顾人的没人照顾



看到这里,我多少有点共鸣。


我想到,我经历过两类不同的领导。


第一种,善用权衡之术,有时特意挑起内部斗争。比如挑起产品部和技术部对立,加剧技术部和市场部不和。一开始,我还不明白,他为什么要破坏团结


后来,我的技术领导给了我答案:



我们和产品部吵架,要找人评理,这个裁判就是他(副总),他会站在谁那边呢?这全看我们平时的表现。我们比产品部更讨好他,他就会偏向我们。下一次,产品部让他更满意了,他又会站在产品部那边。



这种权衡之术,是公开的。但是,只要你还有欲有求,你就无法破解。帮派越多,各方越对立,领导就越如帝王般尊贵。这一套,封建社会玩了几千年。看到这里,估计你不会再骂那些“昏君”了,因为他们比你清亮。


我还有一个领导。他从不挑起各部门的对立。反而,他默默地维持和谐,调和职能部门各司其职。这一点,我也能看出来。因为,如果产品部对技术部有意见,他不但不会煽风点火、添油加醋,而且都不说是产品部提的意见,他说是自己的想法。


结果呢,如同当年“不知尧舜是吾君”一样,老百姓说:我们自己过得好,和皇帝什么关系?真格的,我们皇帝是谁啊?


员工也觉得,我们部门间完全可以自驱运转。那位领导如不存在一般,不受敬畏,员工都不向他谄媚


在我们传统的观念里,会将挑事者定义为小人,将默默行善者定义为好人。


我们从小受的教育是要当个好人。然而,长大了,我们发现,当个小人却能少受罪,更容易获得世俗眼里的成功。



想要赢了竞争,设局毁了对手效果最快。


想要笼络人心,搬弄是非,一起诋毁对方,能够快速团结一批人。



你看,利用别人的人风生水起,成就别人的人却穷困潦倒。


既然做好人没有好结果,那么当好人的意义又是什么呢?


说实话,我也一度迷茫、动摇,甚至否定。


我想,历史长河中,有没有人和我有同样的疑惑,但是他却找到了答案,而且还流传了下来,并且还恰好被我能看到。


于是,我就去古籍中找。我喜欢去找古籍,解读古籍。最好只看文言文,别有翻译。因为有时候,你读不懂,读不懂又没有翻译,你就会自己去脑补。看白纸是脑补不出来的,有那么零星几个能看懂的字,其实是古人给你一个引子,其他是你自己想出来的。你想出来的答案,肯定合乎你的逻辑,你不会抵触,反而正好解决了你的困惑。你又不是想让答案变成金条,你不就是要一个能通顺的解释吗?


这个疑惑,我在《幽梦影》中找到了答案:



黑与白交,黑能污白,白不能掩黑。此君子小人相攻之大势也。


然人必喜白而恶黑,此又君子必胜小人之理也。



把君子比做白色,小人比作比黑色。黑色很容易就能污染白色,但是多少白色都很难掩盖住一点黑色


从这里看,君子是干不过小人。因为,小人的势力很大。


但是下一句神奇的事情来了,你喜欢君子?还是喜欢小人?


人们肯定是喜欢君子讨厌小人。谁又愿意和尔虞我诈的人一起共事呢?从这个角度看,“君子又必胜小人”。


现实中,大家虽然对小人前呼后拥,但是每个人心里却是向往光明的,选择是无奈的。


很多坚持当好人的人。并非不知道当小人的套路,只是坚守一份志向罢了。


那么,做好人的意义就有了:在这个纷纷扰扰的世态下,公序良俗依然是人们美好的向往。多数普通人只是向往,而好人却已经做到了。难道这不是碾压式的胜利吗?


至于代价,都是每个人自己选的。


作者:TF男孩
来源:juejin.cn/post/7175306788995072056
收起阅读 »

3 个技巧,让你像技术专家一样解决编码问题

「我应该如何提高解决问题的能力?尽管我掌握了 JavaScript,却无法解决实际问题或理解复杂的 JavaScript 代码。」 经常有年轻的开发者朋友问我类似的问题。对开发者来说,解决问题非常重要。编写优秀的代码是一门创造性的艺术,而要成为出色的开发者,就...
继续阅读 »

「我应该如何提高解决问题的能力?尽管我掌握了 JavaScript,却无法解决实际问题或理解复杂的 JavaScript 代码。」


经常有年轻的开发者朋友问我类似的问题。对开发者来说,解决问题非常重要。编写优秀的代码是一门创造性的艺术,而要成为出色的开发者,就必须成为富有创造力的能够解决问题的人。



我发现新手程序员犯的最大的错误是专注于学习语法,而不是学习如何解决问题。—— V. Anton Spraul



尽管我观察到,解决问题的技能需要时间和经验的积累,但我坚信掌握它并不需要很多年;只要勇敢地直面问题,就会有所提高。我曾与许多初级开发人员一起工作,年轻人们也比他们的老伙计更善于解决问题。


本文将详细讲解三个技巧,让开发者可以像技术专家一样解决问题。重头戏开始之前,我们先来看看技术专家和技术小白在解决问题方面有哪些不同。


专家思维 vs 新手思维



大多数人会回避或胡乱处理问题。优秀的思考者和领导者则会主动寻找问题,他们也拥有能够更好地解决问题的方法。—— Michael Simmons



Robert J. Sternberg 教授根据美国心理学家 Herbert A. Simon、Robert Glaser 和 Micheline Chi 等人的研究,揭示了技术专家解决问题比技术小白更有效的秘密。



Arnaud Chevallier 在 Work forward in solving problems, not backward 一文中犀利写道,「逆向工作法是一种从假设出发的方法。如果想要提高利润率,逆向工作法会指引你去寻找增加收入的办法,因为增加收入可以带来更高的利润率。那减少成本呢?难道在确定最终的解决方案之前,我们不应该先全面地了解各种可以实现目标的办法吗?」


可以看到,技术专家通常会花大量的时间寻找、明确和定义问题,并且使用正向工作法解决问题,同时密切关注问题解决的过程。下面就跟大家分享,技术专家们常用的问题解决技巧。


三个专家级的问题解决技巧


01 问题十二连 The 12 What Elses


提问题听上去没什么难度,但要找到正确的、缺失的问题并准确地描述出来却不容易。Lenedra J. Carroll 介绍的「问题十二连 The 12 What Elses」可以有效帮助我们摆脱这个苦恼。


在头脑风暴时,先提出一个问题,并生成 12 个答案;然后选取其中一个答案转化为下一个问题,再生成 12 个答案。不断重复此过程,直到获得一个明确的解决方案。


通过连续地提问,我们会得到一个「问题回答地图」,它对假设的测试和结构化解决复杂问题很有帮助。


使用「问题回答地图」测试假设


提问和追问是如何将我们往正确方向上引导的?下面两个例子可能会给你答案。




02 根本原因分析法 Root Cause Analysis


我们经常在多次解决失败后,才发现问题的情况跟预期有所不同,所以在开始解决问题之前,就要先了解其根本原因是什么。


只有消除错误的选择,才能更好地定义问题并找到有效的解决方案。根本原因分析法有助于避免在错误的方向上浪费时间和精力。


根本原因分析的几种方法


根本原因分析法的示例


当需要修复 Bug 时,开发者可以使用以下任意方式,进行根本原因分析:



  • 确定问题在哪个环境出现,并尝试在相同和不同的环境中重现它,以掌握更好的理解。

  • 如果与 Web 性能有关,可以分析捆绑文件。

  • 进行单元测试和集成测试。

  • 进行日志文件分析。

  • 进行交互式调试。


03 使用多元思维 Spectrum Thinking


二元思维认为事情的状态是非黑即白的,只有互相对立的两种可能。有些时候它是正确的,但其他时候,它可能是一种错误的简化。


二元思维


与二元思维对应的是多元思维,也可以称作频谱思维(Spectrum Thinking)。它会考虑更多选择、更多替代方案和可能性,比如「两者共存」「介于两者之间」「其他的可能性」或「二者皆否」等。


频谱思维


通过培养多元思维,开发者可以有效提升创造力;你会惊讶地发现,修复 Bug、解决冲突、设计/执行客户需求的实现方案等居然会有这么多种解决方案和方式。


以展示信息详情为例,二元思维认为,信息详情要么通过弹窗展示,要么跳转到一个带返回箭头的新页面进行展示。




多元思维认为还有其他可能性,比如新增 Tab 页直接查看和更新信息,无需关闭当前列表页面。



多元思维还可能认为,可以提供一个支持三种布局的动态模板,让用户自主选择要用以上哪种方式。


二元思维和多元思维各有利弊,在实际工作中可以配合使用。


写在最后


解决问题能力是一个超出软件开发范畴的话题,它高度取决于我们的心态和态度。要想培养和提高解决(复杂)问题的能力,首先要对问题和挑战充满好奇心,而不是感到沮丧。


就像 Tim Hicks 说的那样,「问题就像赛车道上的弯道。处理得好,便可以在接下来的直道中状态满分;如果过弯太快,很可能会引发侧翻,影响后续赛程。」


(原文作者:Rakia Ben Sassi)




了解更多开发者提效、研发效能管理、前沿技术等消息,欢迎关注 LigaAI@稀土掘金


LigaAI 助力开发者扬帆远航,欢迎体验我们的产品,期待与你一路同行!


作者:LigaAI
来源:juejin.cn/post/7243592123803009083
收起阅读 »

读完一个人的朝圣,我觉得每一个人身上都有男主的影子

莫琳:”你会去很久吗?“ 哈罗德:”到街尾就回来“     一个童年缺少母爱,父爱,中年丧子,一生都在低头做事,不敢正视他人,可以在一个小酒厂工作四十年,却不求升职加薪,与人无争,与人无交的退休老头,跋涉六百多公里,穿越整个大不列颠,拿着一封信去拯救患了癌症的...
继续阅读 »

莫琳:”你会去很久吗?“


哈罗德:”到街尾就回来“


    一个童年缺少母爱,父爱,中年丧子,一生都在低头做事,不敢正视他人,可以在一个小酒厂工作四十年,却不求升职加薪,与人无争,与人无交的退休老头,跋涉六百多公里,穿越整个大不列颠,拿着一封信去拯救患了癌症的老友,听起来应该是无聊透了。远远没有,帅气潇洒,带领古巴人民与美国死磕几十年,躲过n = 700次暗杀,成功睡到美国中情局女特工,并令其爱上自己,传闻睡过35000个女性的菲德尔*卡斯特罗的故事令人感到有种有趣有料。的确,哈罗德是一个平凡以至于差劲糊涂的人,但远没有那么简单,哈罗德、哈罗德,作者是借哈罗德写我们的父母,我们的孩子,我们的朋友,我们亲爱的自己,我们每个人身上可能都有哈的影子,如今这个影子开始征程,或叫朝圣,我更倾向于叫“做梦”。因为这真的像是哈罗德的一场梦。


  这里没有艺术,没有历史,儿女情长,伟大,浪漫。


  这里只有回忆,哈罗德 距离终点很近很远,近的是,一生真的很短,远的是,回忆又是那么漫长。


”没有爱的生活不叫生活“


    哈罗德有一个酒鬼父亲,从不关心他的儿子,在十六岁生日那天,将哈赶出了家门,而他的母亲,早在很久以前已经抛弃了这个家庭去周游世界。在父母那里哈罗德没有得到一丝爱,好像还不如很多人养的宠物的到的关爱多,没有得到爱的哈罗德好像也吝啬于给予爱,路上他在回忆道:“他欠过去一点点慷慨”,但他本人是“喜欢和人交往的,希望明白她们之所爱,之所失”。哈不是一个自私心眼坏的人,(和生活中大多人一样,心眼不坏,好多父母也说,自己孩子“心眼不坏”,这个词有参考价值吗?)他只是不会表达,这种表达好像也不仅仅只是 羞于对儿子说:“爸爸爱你”,也不是:“儿子,你真棒,爸爸为你自豪”(他的儿子没有过任何亲昵的经历)。更不是对爱人说一句:”亲爱的“,好像这个人本身:”没有多少爱“,就好像爱是水,爱是食物,是力气,我们能看到摸到能展示给别人看,”看我有的是力气,我有的是爱“,就像没有力气的男人,哈罗德是一个没有爱的男人。哈罗德倒不是冷漠,也不是自私,在我看来,哈罗德一个60岁的老头,其实是个孩子,一个没有被给予爱与鼓励多的孩子,一个没有受到爱的给予的孩子,是不会轻易去爱别人,爱这个社会的。他们没有爱人的能力,更很难让人感受到来自他内心的热情与爱(友爱,情爱,亲情……)。


  哈罗德是一个“没有妈的孩子”,上学时,哈总是被小伙伴们这样嘲笑。它是一个极其脆弱敏感的孩子,他不敢交朋友,他不敢直视别人,甚至整个屋子的人看他一眼,都会脸红到脖子,他对儿子很少给予父爱,对妻子关怀,理解不够,这些都源于童年,缺失的亲情。


    一个人的成长的表现就是爱越来越多的人,事。即使受到伤害。


  (我不是鼓吹爱与自由可以战胜一切,不是让别人去滥情,只想说,帮帮我们身边的人,每个人,哪怕一个微笑,这也是脆弱的哈罗德坚持走到终点的原因之一)


”婚姻“


  莫琳,哈的爱人,总爱重复哈的话,要不就是”我不这么认为“,两人因为儿子的悲剧分道扬镳,只是名义上的夫妻,在哈走后,莫琳经历了一系列的情绪波动,先是惊讶,抱怨,而后焦虑不安,后是平静的回忆,直到对哈的日夜思念,莫琳因为哈罗德对儿子的不作为,而抱怨,恨着哈罗德,二十年之久,莫琳本身是一个普通的女性,无论作为母亲,妻子,都算是合格的,那什么让两人冷漠二十年,让婚姻只剩下房子一个躯壳,是哈罗德的性格缺陷?两人沟通不够?是残酷的现实?…………,


  哈的徒步之旅让他们重新走到了一起,值得一提的是,两人对于初见时的回忆时如此的不同。(男人女人是两个物种)


  莫琳的回忆:"他微弯下腰,嘴唇贴近她的耳朵,伸手拨开她的一绺头发,才开口说话。这大胆的举动让她感到一股强烈的电流顺着脖子传上来,甚至今日想起,肌肤下仍能感受到那一份悸动。他说了什么?无论说了什么,都肯定是极其有趣的内容,因为两人都笑得歇斯底里,还尴尬地打起嗝来。她想起他转身走向酒吧取水时衣角扬起的样子,想起自己乖乖地站在原地等他。那时好像只有当哈罗德在附近,世界才有光。那两个跳得、笑得如此畅快的年轻人如今去了哪里?"


  哈罗德的回忆:“哈罗德在跳舞,突然发现隔着一整个舞池的莫琳在看着他。他还记得那一刻疯狂地挥舞四肢的感觉,仿佛要在这个美丽女孩的见证下甩掉过去的一切。他鼓起勇气,越跳越起劲,双腿踢向空中,双手像滑溜溜的海鳗扭动。他停下来仔细观察,她还在看着他,这次她碰到他的目光,忽然笑了。她笑得那样乐不可支,抖着肩膀,秀发拂过脸庞。他生平第一次不由自主地穿过舞池,去触碰一个完全的陌生人。天鹅绒一样的秀发下,是苍白而柔软的肌肤。她没有回避。“


  维系婚姻的到底是什么?A爱情,B浪漫的回忆,C未来的期盼,D,子女 E,两个人的时候感觉孤独,一个人时更孤独(莫琳回忆道)F,安于现状G,人丑又穷离不起(老婆太厉害,不敢提)


……敲黑板!!!这道题超纲,考试不考……


信仰与理智


  读完之后,我问过自己,哈罗德为什么要徒步去远在千里的贝里克?支撑他的是什么?


  他在经历一路的跋涉到底吃了多少苦?值不值?关键是他是个沉闷、死气沉沉没有活力的哈罗德。做出这个选择不可思议,作者提到将这归为“期待一种比不言自明的现实更大,更疯狂也更美好的可能”。在我看来,哈罗德身上有很多缺陷,他自己给自己贴了太多标签,沉默逆来顺受,软弱,羞涩……,但人不是一个个标签构成的,通过一个个的标签并不能完全解释一个人的行为,事实上,作者没有解释也不用解释,哈为什么做了这个决定,因为包括这件事在内的很多事都是有一种奇思妙想甚至吓到自己,自己也不知从哪冒出来的想法开始,首先,在那一时一刻,理想梦想狂想疯想轮奸了理智,从此孕育了伟大,自己被惊讶、震撼、感动,从而迈出了一步,两步,就像疑问自行车就两个轮子为什么可以冲的那么快,疑问它为什么不倒一样,没有人告诉你为什么?而你同样可以骑上去,跑的比风还快,还自由。你做到了,哈罗德的决定也做的那么简单与自然。


  做决定容易,简单的决定,简单的计划不一定成功,仅仅一双帆布鞋(属于海洋,却行走于陆地),一路上,哈曾羞于解释自己的计划,但一路的陌生人,即使有再多的不理解,不可思议,也都给予了支持,或物质上,或精神上,他们都是哈罗德走下去的动力,哈罗德感谢他们,正是这些动力让他尝试去冲破囚禁它一生的牢笼,束缚,释放了年轻时候,转瞬即逝的野性,冒险与激情,但是哈罗德毕竟只是哈罗德,标签解释不了全部,却注定哈罗德在那么一个阶段,否定自我,否定这次徒步的意义。


  人生就像一个缓冲区,就像数据库buffer,操作系统buffer,各种buffer一样,缓冲区存在的意义,在于解决通信双方处理信息的速度不同的问题,人生的buffer,怎么讲?得与失,的是写入buffer,失  是移除buffer。


  朋友有失有得,太多照顾不过来,就要失去热度低得,太少,你会感到孤独,又会去交新朋友,


从人生来讲,不只是朋友,童年,青年,中年,老年,童年的我们是空的buffer,接受各种各样的信息,我们每天都在快速的成长,不曾感到失去,直到青年,我们开始困惑,感伤,为了长大,活下去,为了责任,不得不得到很多不想得到的,失去很多宝贵的,(大话西游的主题,成长,得与失)。到了中年,可能渐渐的习惯了得失,不再多愁善感,这是我们可能是很多人心中的英雄和榜样,只有我们自己知道,我是个什么样的混蛋,到了老年,得到的可能仅仅是白发,失去的与日俱增,缓冲区越来越小,我们没有了憧憬,只剩下回忆,我们已经不是年轻的感伤,更多是一种超然的释怀。因为除了生命,任何都不属于我。


哈罗德在救赎曾经的哈罗德


  哈罗德呢?他老了,他在徒步,他在救赎自己,他在朝圣,但他并不是英雄,他正在失去很多,跟普通人不同的是,他早就失去了很多,甚至很多不曾得到,父爱,母爱,朋友,儿子,爱人,这些失去放在有这么一个性格缺陷的老头身上,有点残忍,但上帝在决定你命运的时候,才不会管你是不是很可怜了,更不会征询你的意见,就这样 ,哈罗德在失去唯一的陪伴——小狗后(一条小狗,它的名字就叫“小狗”,哈罗德就这么叫),崩溃了,没有了时间概念,没有了距离,以前用英里丈量到终点的距离,现在用回忆,在一幅幅回忆前 ,哈罗德真的要放弃了,莫琳在哈走的日子里也在回忆,回忆年轻,回忆自己对哈罗德过分要求,与缺失的理解,在哈崩溃时,莫琳恢复了以前的温情与鼓励,哈罗德蹒跚的走到了终点,老朋友,结束了,但她们的婚姻好像重新开始。


后记:


在我观察,这本小说,有爱需要表达,婚姻,信仰,三个主题,这是一本鸡汤小说,出自英国作家蕾秋乔伊斯,这是第二本我非常喜欢的女作家写的小说,以前以为女作家只会写给女孩的鸡崽文学,什么女孩你必须优秀…………,XXX,或者儿女情长,纯粹YY的爱情小说,现在证明,我错了,女作家也可以写出能体现对社会对历史对人性的深刻理解的作品(《穆斯林的葬礼》),他们对人心理的细腻把握,同样让人感到有趣,这本小说里,我并没有对哈罗德,旅途的见闻,中间媒体炒作,投机分子借机包装,哈罗德与荃妮的友谊做过多感想,因为我觉得这只是路上的故事,大树的枝叶,任何一部小说都要有插曲丰满主人公的形象,但主题从头贯穿到结尾,其中婚姻的主题很明显,但是我经历有限,不能提出特别的见解,望请见谅。


作者:五阳神功
来源:juejin.cn/post/7299491065395789863
收起阅读 »

整理了七八年的笔记后,感觉很累,好像并不值得......

🔊整理了七八年的笔记(包括收藏别人的),感觉很累,回顾后好像并不值得那么做,于是对收藏文章,做笔记,学知识有了一些不一样的感悟,于是写下此文,警示自己。 📚一、收藏怪 收藏不等于吸收,收藏的文章不消化,还是别人的,收藏不等于学会了知识点,警惕陷阱。 ...
继续阅读 »

🔊整理了七八年的笔记(包括收藏别人的),感觉很累,回顾后好像并不值得那么做,于是对收藏文章,做笔记,学知识有了一些不一样的感悟,于是写下此文,警示自己。



📚一、收藏怪




  1. 收藏不等于吸收,收藏的文章不消化,还是别人的,收藏不等于学会了知识点,警惕陷阱。




  2. 重复的事情不要做第二遍,当初偷懒没理解收藏的文章,到头来还得从头开始理解;但却做了一些重复的事情。生命其实很宝贵。




  3. 收藏文章要精选,收藏的文章过多会增加未来的负担; 再看是消耗未来的时间,未来的时间一定比现在的时间更加宝贵,请慎重地做文章收藏。好的文章点个赞,不想错过知识就及时总结消化。




去阅读了那些以前收藏的文章,当初没有懂的,现在也可能没有懂;现在懂的也并不是因为收藏了才懂的。




📒二、断舍离


那些似懂非懂的知识,要学会断舍离。收藏的文章,记录的笔记;并不是越多越好,数量可能带来质量的下降,可能充斥重复,甚至废话。



  1. 做减法,该丢掉就丢掉。 这是生活经验;也是哲学道理。

  2. 似懂非懂的知识,多了只会让自己难受。通透才能轻松。什么都想要,什么也达不到最好,反而容易让自己撑着。

  3. 少即是多,抓重点。什么都想学,什么也学不好。知识也是有二八定律的。

  4. 不要废话,保持简单,一句话能说清楚的事情,就不要两句话。

  5. 知识是会给增加烦恼、负担的。别让知识给自己制造无形的麻烦、也不给自己未来添堵。

  6. 允许自己有知识不会,也别想着什么都会;更别想着什么都学。




📑三、兴趣



  1. 不喜欢就不要学,讨厌的知识容易遗忘。学习知识也要取悦自己。

  2. 学习自己感兴趣的,这样才能深耕,深耕那些不喜欢的知识,会让自己痛苦。

  3. 学习是需要时间成本的,而且很大,对自己也要投其所好。




📜四、偷懒



  1. 记录再多不理解的笔记、知识,不及时消化,还是不会理解的,有用吗?这样建议别做。

  2. 摒弃那种笔记做越多越充实的自我欺骗行为。要做一个偷懒的人




✒️五、总结


最近整理大量以前的学习笔记,以及各种技术收藏文档;发现了很多无用的,累赘的;不懂的还是不懂;似懂非懂的还是似懂非懂。而做笔记的过程却花费了太多时间。 把事情寄托于未来,成本更高。思维上要学会偷懒。别用笔记上的勤奋来掩饰思维上的懒惰。


🔊注:有一些偏激的观点,但本文仅代表当下自己的想法。


作者:uzong
来源:juejin.cn/post/7299741943442112552
收起阅读 »

阿里云又崩了,这次送什么

双十一的烟味还没散,昨天下午至晚间(11月12日),阿里云又崩了,而且语雀又没逃过去,从出现故障到完全恢复长达3个半小时,这次又是怎么回事呢? 这次受影响最大的是OSS服务,也就是阿里云的对象存储服务,对外提供的是图片、视频,以及各种文件的读写服务,可千万别小...
继续阅读 »

双十一的烟味还没散,昨天下午至晚间(11月12日),阿里云又崩了,而且语雀又没逃过去,从出现故障到完全恢复长达3个半小时,这次又是怎么回事呢?


这次受影响最大的是OSS服务,也就是阿里云的对象存储服务,对外提供的是图片、视频,以及各种文件的读写服务,可千万别小看这个服务,我们平常聊天发图片、发文件,网站上展示的图片、视频,以及各种js、css、字体等文件可能都是放在OSS服务中的。


从网友的反馈来看,仅阿里系受影响的产品就包括:阿里云OSS、语雀、钉钉、阿里云盘、淘宝、闲鱼等,应该还有些用户相对少的服务没有爆出来,毕竟阿里系产品众多,对象存储在每个产品中都是不可或缺的。



使用阿里云OSS服务的外部公司产品估计就更多了,只是大家量小体微,没有掀起什么狂风巨浪,我这里也多多少少受了一点影响,上传文件出错。



对于这次故障阿里云发了一个公告,文字不少,大家看看是否清楚明白。



根源是某个底层管控服务组件出现了问题,不过没说这个组件是干什么的,起到什么作用。再看受影响的产品还是挺多的,队列消息服务都被波及了。我猜测可能是底层存储的某个控制程序又出问题了,而且是个广泛部署的服务,可能是鉴权,否则不会影响这么广泛,恢复这么缓慢。


话说同样是阿里系的语雀前段时间刚崩了七个多小时,这么快阿里云又崩了,还恰逢双十一,再往前翻,去年阿里云香港机房还挂了两天,这不免让人对阿里的技术心生疑虑,加之社会对阿里的管理文化颇多吐槽,如此下去,阿里在人们的心中可能就要堕落下去了,可以说有向悬崖边滑落的风险。


频繁的出现问题,可能不仅仅是技术上的问题了,管理制度上可能也存在一些风险,相信阿里的王博士和周大佬也想得到,这里就不瞎指挥了。



不知道阿里云这次怎么给大家交代,看看网友们的期待吧。



不过我们使用阿里云的产品,以前多多少少都出现过一些问题,前几年产品经理会主动给些补偿,不过最近几年,影响不大的话,用户不要求,也少见阿里云主动补偿。对于此事,后续我会继续关注。


作者:萤火架构
来源:juejin.cn/post/7300550397781147657
收起阅读 »

30岁之前透支,30岁之后还债。

前言 看到不少私信问我为啥没有更新了,我没有一一回复,实在是身体抱恙,心情沉重,加上应付于工作,周旋于家庭,自然挤压了自我空间。 今天思来想去,重新执键,决定久违地又一次写点分享,奉劝大家珍惜身体,愉悦生活。 愉悦二字说来容易,但各位都一样,奔波于现实,劳累于...
继续阅读 »

前言


看到不少私信问我为啥没有更新了,我没有一一回复,实在是身体抱恙,心情沉重,加上应付于工作,周旋于家庭,自然挤压了自我空间。


今天思来想去,重新执键,决定久违地又一次写点分享,奉劝大家珍惜身体,愉悦生活。


愉悦二字说来容易,但各位都一样,奔波于现实,劳累于生活,岂是三言两语就能改变的。


病来如山倒


我又病了,有些意外和突然的,令我措手不及。


一天早上我起来,脖子有些酸,就伸手揉揉捏捏,忽然发现脖颈左侧有一个肿块,仔细拿捏,发现竟然是在里面,而且硬邦邦的,伴有轻微的疼痛感。


当时早上对着镜子拍下来的肿块,我还保留了照片。


1.jpg


立马便一身冷汗冒出,我从未经历过这样的事情,去年身体毕竟出过问题,两相叠加之下,内心更是难以描述。


因为是周一,怀着忐忑的心情去上班了,接下来一直都有些神经兮兮,觉得自己身体出了大问题。


之前我有文章讲过自己去年其实已经检查出血脂的问题,停更半年之久,调养了一番,才真正感觉到身体有所恢复,根据我发文的日期可见一二。


恢复更新的这段时间,报复式地写作和分享,一度不知不觉地排到榜单第二,今天登录看了一下,居然还在月榜前三没下来,也是意外。


话说回来,人一旦身体冒出点病痛,整个心情都显得低沉萎靡,很快就能在方方面面反应出来。


我是硬着头皮上班的,抽空网上查了下好让自己有个心理准备。



百度一搜便是绝症,这是很多年前就知道的,但病急乱投医果然是人之本性,我毅然决然还是搜了。


然后,各种甲状腺之类的就来了,再搜,淋巴瘤也来了,再搜,好家伙,直接恶性肿瘤十有八九了。



面对未知而产生的接近绝望的心情,想必不少人有类似经验。


比如我,下意识先想到的竟然不是我是不是要完蛋了,而是想到自己是家中独子,父母年迈身体有恙,妻子操劳,孩子尚小,家中主要经济来源也是我。


我一旦倒下,实在不敢想,往深了一想各种负面因子都蜂拥而来。


我不知道有多少人和我的性格相似,就是身体出了这种未知的问题,一面觉得应该去医院看看,一面又怕折腾来去最后拿到最不可接受的结果,可能不知道反而能活久一点,大概就是这种心情了。


是的,我大体是个胆子还算大的人,也猛然间抗拒去医院了。


不去医院的结果,就是你每天都在意这个肿块,每天都要摸摸它是不是变小了,是不是消失了,每天都小心呵护着它,甚至还想对它说说话倾诉一下,像是自己偷养的小情人一样。


只盼着某天睡觉醒来,用手一摸,哈哈没有了这样。


我就是差不多一个月都这样惶惶不可终日地度过,直到这周六才被妻子赶去医院做了检查。


透支和还债



30岁之前透支,30岁之后还债。



说来好笑,摸到肿块的第二天吧,还有朋友私信找我合作,换做平时,我肯定欣然接受,并开始设计文稿。


但身体有问题,一切都索然无味了,再次真切地体会到这种被现实打碎一切欲望的撕裂感。


2.png


为什么我30岁之后身体慢慢开始出现各种问题,这两年我有静下心来思考过。


到底还是30岁之前透支太多了,30岁之后你依然养成30岁之前的生活习惯,无异于自杀行为。



我把身体比作一根橡皮筋,它大概只能扯那么长,我长期将它扯那么那么长,我以为它没事,直到有一次我将它扯那么那么那么长,砰的一声它就断了。


我们都无法知道自己的这根橡皮筋到底能扯多长,只要它没断,我们都觉得它还能扯很长,代价就是,只需断一次,你再也无法重来了。



30岁之前,我努力学习各种知识,熬夜那是家常便饭,睡一觉便生龙活虎。


我就像以前上学的三好学生一样,在学校我扎扎实实,放学了我还进补习班,补习班回来了我还上网学知识。


回头想想,真特么离谱啊,我上学都没这样,走上社会了竟然付出了之前在学校几倍的努力。


早知如此,我好好上学读书最后进入一个更优质的圈子,不就少走很多弯路了吗,但是谁又会听当年的老师和父母一番肺腑之言呢。


埋怨过去没有什么意义,只能偶尔借着都市小说幻想一下带着记忆重生回校园的自己。


细数下来,我30岁之前熬过的夜比我加的班还多,我不是天天加班,但好像真的天天熬夜。


可我身体一点问题都没有,我觉得自己不是那种被命运抛弃的人,内心一直这么侥幸,你是不是也和我一样呢。


30岁之后,该来的还是来了,32岁那年,我有一次咳嗽入院,反复高烧,退了又发烧,医生一度以为是新冠,或结核,或白血病什么的,后来全部检查了都不是,发现就是普通的肺部感染。


每天两瓶抗病毒的点滴,大概半个月才逐渐恢复,人都瘦脱相了,这是我人生头一次住院,躺在病床上像废人一样。


等到33岁也就是去年,偶然头晕了一次,那种眩晕,天旋地转,犯恶心,怎么站怎么坐怎么躺都不行,真正要死的感觉。


后面我一度以为是年纪轻轻得了高血压,结果查了下是血脂的问题,还不算严重,但继续下去很可能会变成一些心脑血管疾病。


我难以置信,这可都是老年病啊,我一个30几岁的程序员说来就来了?


调养半年多,肉眼可见身体有好转,我又开始没忍住熬夜了,想做自己的课题,想分享更多的东西,这些都要花时间,而且包括一些其他领域的内容,想得太多,自然花的时间就多。


一不小心就连续熬了一个多月,平均每晚都是2点左右躺下,有时中午还不午休,刷手机找素材。


终于,脖子上起了肿块,让我整个人都蒙圈了,觉得一切努力都是在玩弄自己,忽然间什么都没意思了。


我尽量把这种感受描述出来,希望你们能看明白,真切体会一二。


为什么30岁之后我一熬夜就有问题出现,说白了,30岁之前透支了已经,一来是身体负荷达到临界,二来养成了多年的坏习惯,一时想改还改不过来。



30岁之前真别玩弄自己的身体了xdm,橡皮筋断了就真断了,接不上了,接上了也没以前的弹性了。



健康取决于自律和心情



对于程序员来说,健康取决于两点:自律和心情。



30岁之前,请学会自律,学习时间自律,生活作息自律,一日三餐自律,养成这样的习惯,30岁之后的你会受益匪浅。


自律真的很难,我就是一个很难做到的人,我有倔强地适应过,却又悲哀地失败了。


就像你是一个歇斯底里的人,忽然让你温文尔雅,你又能坚持多久呢。


我用很多鸡汤说服过自己,对于已经30几岁的我来说,也只能维持一段时间。


想看的多,想玩的多,想学的也多,时间是真不够啊,真想向天再借五百年。


我应该算是幸运的那一类,至少我这般透支身体,我还活着,也没用余生去直面绝望。



我用这两年的身体故障给自己上了重要的一课,人死如灯灭。



如果能重来,我一定会学习时间规划,我一定会把每天的时间安排的好好的。


我一定会保证一日三餐不落下,少吃外卖,多吃水果蔬菜。


我一定会保证每晚充足的睡眠,早睡早起,绝不熬夜。


我一定会每天下班和放假抽出一些时间运动和锻炼。


我不是说给自己听的,因为我已经透支了。


我是说给在看文章的你们听的,还年轻点的,还没透支的,请用我的现在当做你可能更坏的未来,早点醒悟,为时不晚。


自律很难,但不自律可能等死,这个选择一点也不难。



工作压力大,作为程序员是避免不了的,所以我以前有劝过大家,薪水的重要性只占一半,你应该追寻一份薪水尚可,但压力一定在承受范围内的工作,这是我认为在国内对于程序员来说相对友好的途径。



我进入IT行业目前为止的整个生涯中,学习阶段听到过传智播客张孝祥老师的猝死,工作阶段听说过附近的4396游戏公司里面30多岁程序员猝死,今年又听到了左耳朵耗子先生的离世。


我想着,那一天,离我和你还有多远。


心情真的很重要,至少能快速反应在身体上。


当我这周六被妻子劝说去检查的时候,我内心一直是紧张的,妻子没去,就在家陪着孩子,跟我说你自己去吧,如果有坏消息就别回复了,等回来再说,如果没什么事那就发个微信。


我想我理解她的意思了,点了点头就骑车去了医院。


医院真不是什么好地方,我就是给医院干活的,我全身上下都讨厌这里。


最煎熬的时间是做彩超前的一个多小时,因为人太多,我得排队,盯着大屏上的号序,我脑子里想了很多事情,甚至连最坏的打算都想好了。


人就很奇怪,越是接近黑暗,越是能回忆起非常多的往事,连高中打篮球挥洒汗水的模样和搞笑的投篮姿势都能想起来。


喊到我的时候,我心跳了一下,然后麻木地进去了,躺下的时候,医生拿着仪器对着我的脖子扫描,此时的我是近一个月以来第一次内心平静,当真好奇怪的感觉。


随着医生一句:没什么事,就一个淋巴结。


犹如审判一般,我感觉一下无罪释放了。


当时听到这句话简直犹如天籁,这会儿想起来还感觉毛孔都在欢快地愉悦。


我问她不是什么肿瘤或甲状腺吧,她说不是,就一个正常的淋巴结,可能是炎症导致了增生,这种一般3个多月至半年才会完全消掉。


这是当时拍的结果


3.jpg


拿给主任医师看了之后,对方也说一点事没有,只是告诫我别再熬夜了。


我不知道人生还会给我几次机会,但我从20几岁到30几岁,都没有重视过这个问题,也没有认真思考过。


直到最近,我才发现,活着真好。


当晚是睡得最踏实的一晚,一点梦都没做,中途也没醒,一觉到天亮。


更离谱的是,早上我摸了一下脖子,竟然真的小了点,这才短短一天,说了都没人信。


我头一次相信,心情真的会影响身体,你心情好了,身体的器官和血液仿佛都欢腾了起来。


如何保持一个好心情,原来这般重要,我拿自己的身体给大家做实验了,有用!



希望大家每天在自律的基础上保持好心情,不负年华,不负自己。



总结


xdm,好好活着,快乐活着。


作者:程序员济癫
来源:juejin.cn/post/7300564263344128051
收起阅读 »

《程序员的自我修养》读后感

书中内容涉及哪些方面? 新人如何学习编程,如何进入这一行,对职业人的建议 进来以后职场中的一些经验,这一职业经常面临的问题 全栈工程师的相关问题,面试招人环节 除了技术你应该怎样提升自己,如何建立自己的品牌 如何教育自己的孩子编程,作者的自学设计经验分...
继续阅读 »

书中内容涉及哪些方面


新人如何学习编程,如何进入这一行,对职业人的建议

进来以后职场中的一些经验,这一职业经常面临的问题

全栈工程师的相关问题,面试招人环节

除了技术你应该怎样提升自己,如何建立自己的品牌

如何教育自己的孩子编程,作者的自学设计经验分享

程序员的未来和作者的美好希冀......

可以看出来作者写了很多,对程序员各个阶段都有思考和分享。看起来都是些老生常谈的建议,也有些都是职场的潜规则。但是还是得说出来,摆到明面上,这样大家才能学习、思考、践行。这也是这本书的意义所在。


我也说说自己的一点想法,一方面是对书的内容的消化吸收、一方面也是有自己的感悟,及时记录下来。


1. 保证健康的体魄


身体是革命的本钱,最近看《去有风的地方》,主角的闺蜜第一集就死了,为什么呢?没有照顾好自己的身体,胃不行,太可惜了。前些年 github 的996 项目还有越来越多的猝死现象也让大家对行业内司空见惯的加班潜规则加以抵制,都说明大家对自己的身体越来越重视了。说到底还是得(心里)坚持锻炼。


锻炼在现实中是怎么实施的呢?


很多人说,哎呀,我办了健身卡可是都没去过几次,太浪费了,就在家锻炼吧。


退而求其次,买了哑铃甚至跑步机,用上几次一直吃灰。


再或者,买了瑜伽垫,开通健身会员,跟着练上一个月,舒展筋骨,体能恢复什么的。坚持打卡,一旦哪天没打,完了,开始断断续续直至把各类健身会员订阅关掉。


说下楼跑步,冬天嫌冷夏天怕热.......


没错,这就是我,甚至遛狗都是骑着电动车让狗跑。但是,我是真的想让身体越来越好。所做的这些努力,哪怕放弃的次数再多,我也会继续下去,比起因为放弃过就不努力,我这样算不算越挫越勇呢?到现在,我已经不怕放弃了,只会遗憾没有开始。


2.读书、旅行与思考不能停


精神与身体都需要锻炼,什么软技能、代码重构、艺术审美,你不会真指望一本书能让你学会这些吧?


《自我修养》书里说的那些道理,更多的像是旅游景点的指路牌,告诉你方向,你想往哪个方向走,你就读哪方面的书充实自己,而不是把路牌拍张照站原地不动。多读书,现在这年头,你就是读狗血的网络小说,说不定哪天还能看到同名影视剧上映。


旅行嘛,去年被辞职以后我出去旅游了两周,回来身心俱疲,开始思考旅行的意义。看惯了全国统一的网红景点,我悟了。旅行也得带点脑子去,我想从这个城市看到什么?历史、不一样的人文、自然,总要有点不同吧,要是冲着网红景点的噱头去,那指定被坑。酒吧、小吃,哪个地方没有。旅行,就是要看不一样的东西。


关于思考,之前的我,对技术思考最多的时候就是在找工作的时候。那确实是每天都很充实,被面试官各种问题轰炸,工作中呢,差不多的管理系统,差不多的业务,差不多的逻辑,有复杂的也不会超过两天,超过了就把需求打回去,或者找别人一起想,最后说一声:实现不了。现在的我,几乎每天都在思考,一个是做的业务之前没做过,还有个是观念转变,面向面试上班,主动思考。


展开说说面向面试上班,既然面试问的最多也难回答的是:你遇到的问题有哪些,怎么处理的。那我上班就开始整理问题,碰到难题就思考,解决了就复盘。没问题我想问题,(1)想之前工作的几家后台系统的难题是什么,没有?那你搞的不是核心,难题都让别人解决了或者引入一个包搞定了。你要说实在没有,这个系统就我一个人写的,那可以想下通常这种系统比较难实现的是哪部分业务,比如权限、审核、排班等等,然后记录下解决方案(2)由点及面,css遇到了一个问题,比如移动端适配问题,单位是用vw呢还是rem呢,布局是flex还是百分比呢,搜结果的过程中顺便可以看看解决方案都有哪些,对照下优缺点和适用场景,最终选择最佳方案。


3. 认真工作、诚信做人


书里有这样一段话:


那些优秀的程序员有时看上去很懒,他们会在上班时间做那些与工作毫无关系的事情,比如,在纸上随意地乱涂乱画,长时间坐在那里发呆,甚至玩手机。但一旦他们进入编程状态,你又会发现他们变得像打字员般,指尖飞舞,瞬间完成他们的工作。 —第三章第一节第5小节 很懒却又很高效


这就是我们现在说的“摸鱼”,我之前一直觉得摸鱼的时候有种羞愧感,同事路过我会马上放下手机,假装在敲代码。真正意识到这是一个正常的行为,我也就心态上轻松了。除了无所事事的时候,有一堆工作还摸鱼的情况,我内心是这样的:**,太难了,等会再看吧,然后拿起手机。刷了一会,想到活还没干完,果断放下手机,开始敲代码或者接着想。越是在忙的时候,这样的情形重复次数越多。很显然,这是给大脑休息的机会,摸鱼基本上不用动脑子,只需要眼睛浏览,因为有这样的机会,接下来才能更高效的完成任务。


特别忙的时候,手机拿起放下的速度也越来越快,这个时候会比较着急,想上厕所也憋着,憋不住了上厕所一路上也在想逻辑,从第三视角去审视自己这个行为又觉得很有意思,不知道在心理学上是怎么解释的。说这一点,不是为了摆烂,而是认真的工作,这样无愧于内心,也肯定是有产出的。在读《人人都是产品经理》的时候,也有一段话很应景:


任何情况下 我们都要做好手头的事情。 确保就算这事儿对公司来说又黄了,我也要通过做事有所收获。


那面试你拿的出手的自然也就是这些收获。


诚信做人,这一点毋庸置疑,书中说的职场经验、软技能、建立自己的品牌啦,这些都能和认真工作、诚信做人挂的上钩。工作认真完成了,你的个人品牌效应自然能提升,职场中大家对你也会尊重。打个比方,初入公司,你活干不下来,是个人都想骂你两句。


差不多了,就写这么多感想吧。


作者:宅神king
来源:juejin.cn/post/7190294025214099517
收起阅读 »

别把执着用错地方,两种思维的碰撞

概要   今天通过一个项目问题解决过程来分享,两种不同的思维方式在解决项目问题时的碰撞,中间引起的带入问题,请忽略不计。 背景   先说说前提,本身的技术路子比较野,啥东西都能摸两把,基本的思路和习惯都是以结果优先,技术作为手段,但这并不代表我没有标准化的基准...
继续阅读 »

概要


  今天通过一个项目问题解决过程来分享,两种不同的思维方式在解决项目问题时的碰撞,中间引起的带入问题,请忽略不计。


背景


  先说说前提,本身的技术路子比较野,啥东西都能摸两把,基本的思路和习惯都是以结果优先,技术作为手段,但这并不代表我没有标准化的基准和要求,只不过这个次序和容忍度有不同的理解、而我作为程序猿中的代码收容所,杂货收割机,可能是绝大部分标榜 “技术控、理论控、优雅控” 最不屑的。


  文档、PPT、事务性、管理性、运维、交付、架构、甚至是商务、咨询、售前支撑都有涉及,这两年又对工控、数采非标互联网进一步在学习,说这些不是为了标榜啥,只是想说明我对技术的态度,是只要感觉缺的就会去补充学,早先,从一直排斥文档,认为这项工作是 “不务正业”,到后来慢慢发现实际是有点儿恐惧写文档,天天被批判,再到后来反感的PPT和"跟傻子讲技术",心态上变化,看到差距,尊重别人的成就,就会自然而然的追赶,直到无所畏惧。


前因


  Java属于可能我最先了解和尝试的编程语言,但怎么说呢,在当时的环境里面,C++、C# 是我选择的结果,期间也涉及了其他乱七八糟的语言,也都是副业需要,涉及到就捡起来用,可能内心觉得Java比较 “简单”,直到工作里面不得不顶着运维和维护,说实话,没啥太大障碍,真正接受生态,也就近两年,心态的变化,感觉看到了不一样的新大陆,当然主要是各位开拓者的不断努力,不断的思维碰撞和实践努力,而我本身也不能说是专职做这块,只是有些块别人解决有问题,思维碰撞一下,以下就说说关于问题解决的剖析。


过程


   同事A属于入行就做Java,也有个8年多工作经验,技术能力,执行力都不错,就是这个行业通病,沟通有所欠缺,这个只是一个点的分享,只是从思维上去谈问题,(我本身是个大白菜),还是规则引擎的点,之前有过分享,整体是由我设计的方案,之前有分享,聊聊规则引擎的调研及实现全过程,因工期等其他影响,我把人员能力问题也考虑在内,在正式应用交互过程中,关于Mqtt处理相应速度问题和数据重复入库的问题得以复现,同事A有不少的参与度,因为某些原因(我不得不负起主责,前后端整体调整),这是问题的大背景


复现排查



  • 尝试1:这个问题同事A经过问题复现,初步确认是多线程循环引起的问题,解决的办法很粗暴,判断如果循环超过1000次就终止线程,导致的结果就是性能损耗和任务丢失,(这种情况在采集上是可以容忍的,数据是不间断的),就此就准备收手。我认为这个种解决办法是最终没办法下的妥协处置,而且问题也没分析定位清楚,做进一步尝试,此处是应该要执着的地方,

  • 尝试2:于是A经过一顿跟踪,用了各种线程跟测工具和理论检索,通过方法锁尝试去解决该问题,造成的第二种后果是结果正确了,但及时性达不到,根本发挥不了性能。进一步也发现了消息密集的情况下会产生问题,中间也进行过任务队列的分组处置,(此项尝试基本属于A的各种线程理论一顿分析,进行尝试,得不出来啥有效结果,各种理论分析)

  • 尝试3: 我经过不停得添加代码,定位异常,定位到了异常代码块,属于递归循环调用侧发生得异常,之前线程循环调用得问题也基本定位到,是因为父子线程得优先级,加上规则本身深度遍历及结果等待造成得问题,也就是Future得get等待引发得,此时,要验证该问题,把规则内部得递归任务添加调整为同步,(只涉及到一句代码),循环得问题得以解决,处理速度也跟得上,(线程放置到了外侧处理消息(消息接收本身也是多线程)),但又引起了新得问题,入库得数据发生重复和不正常了(如果问题回溯,其实很快能发现,当然有点儿马后炮了)

  • 尝试4:此时,同事A又尝试想放弃,认为在入库侧判断是否重复插入即可,并把别人得关于多线程入库重复得解决常规办法得内容做了共享,我给得理由是:“再往前尝试以下,感觉马上就能找到真相,正是学技术得好时候,不要此时妥协”,很显示A在口头上答应,行动上已经放弃了,我就消息重复产生得地方又进行了各种锁尝试,也基本定位到了产生消息重复的地方,加上方法锁,结果和执行均验证没啥问题。

  • 补上最后一药: 最后的相同broker相同主题下多个规则执行问题,其实不是啥大问题,很容易就解决了,两种方案,但实在是实践浪费的太久,我尝试了复杂的理想办法,交付中的问题都得以解决。


回溯


   其实这个问题在回溯过程来看,在尝试4的时候,应该马上就能反应过来去解决的,但实际可能是周期和脑子都有点儿混乱,还是分析了执行结果和操作才做了验证,实在是我已经不敢太过相信线程理论,还是实践出真知,所以,这个过程中,我对Java的语法半吊子,但并不妨碍我去参与分析解决问题,而同事A,虽然知道线程的理论和各种语法,各个线程分析结果,但依然妨碍了他去解决此项问题,之前有听过软件的思维最重要,经验有时候会成为负担,可能在你们看来,这个问题其实有充足的理论基础,一定很容易解决定位这个问题,但怎么说呢,记得上计算机理论的时候,老师说过一句,编程就是抽象化具体事务到编程语言的过程、


  在其后的过程中,好像绝大多数都是把问题分解成实现,排查分析问题的过程,我理解就是把具体的事务反推到程序上,很可惜这个过程,被归集到个人的能力或者习惯上,毕竟,对过程负责,是常态,项目的面试过程也就是说清过程,至于是谁解决的问题,并没有那么重要,这造成了两种分化,掌握全貌的失去了动手能力,对结果负责,不对过程负责,掌握单一的,失去了对结果负责的能力,掌握着对过程负责,新的纷争和各种千奇百怪的妥协结果也就是值得接受的。


分析


   当你在执着各种编码规范,各种优雅简洁之道的同时,是否也能思考一下,我们所专注的语法,面试理论,就具体问题而言,真就是理论精通了之后,不会成为 “赵括”,指点江山,飞扬文字。


  而这种分化性,我已遇到了不下3种典型,要不点了吹牛逼的和撕逼的技能点、要不就点了技术理论的技能点,要不就去点了文档管理技能点,当然,只是个现象,躺平是常态,没啥压力和责任,谁愿意变成受虐狂,但有没有可能,也有那么一丝,对这个职业和技术的热爱? 可能又会变成鸡汤和躺着说话不腰疼,至于外在因素、想法和处境的不同,咱姑且就图一乐,从容面对吧、总之是,事不临身,我不愁,事临身,愁也没用,那能不能,稍微有一些,哪怕只有一丝希望的掌控呢,要说起怨怼,我有一肚子,但总不可能变成情绪发泄机吧,对结果有预期,但不放弃努力的过程,也许这是我此刻能够坚持做的。


PS


  在这里申明一下,同事A的各方面能力我很认可,此处也只是精力有限下的小分享(有个小背景是,我们基本上背着2.5个以上的事在解决此项问题)、所以请各位不要基于我个人的认知有指摘。


作者:沈二到不行
来源:juejin.cn/post/7292290711734681651
收起阅读 »

5年编程之心得体会

关键词:代码、编程、业务、技术、数据、面试、成长、开发、逻辑、能力 一、心得 说说我自己理解的编程:编程就是要教会只会0和1的电脑去解决现实生活中各种复杂的问题,电脑只有与或非三种逻辑,只有顺序循环分支三种控制结构。我一直觉得编程某种意义上是一门“手艺”,...
继续阅读 »

关键词:代码、编程、业务、技术、数据、面试、成长、开发、逻辑、能力


一、心得




  1. 说说我自己理解的编程:编程就是要教会只会0和1的电脑去解决现实生活中各种复杂的问题,电脑只有与或非三种逻辑,只有顺序循环分支三种控制结构。我一直觉得编程某种意义上是一门“手艺”,因为优雅而高效的代码,就如同完美的工艺品一样让人赏心悦目,最主要、最容易被我们直观感受到的问题就是:烂代码实在是太多了。后来,在亲历了许多个令人不悦的项目之后,我才慢慢看清楚:即便两个人实现同一个功能,最终效果看上去也一模一样,但代码质量却可能有着云泥之别,好代码就像好文章,语言精练、层次分明,让人读了还想读;烂代码则像糊成一团的意大利面条,处处充斥着相似的逻辑,模块间的关系错综复杂,多看一眼都令人觉得眼睛会受伤




  2. 越简洁的代码,越清晰的逻辑,就越不容易出错。而且在实际工作中不是用代码量来评价一个程序员的工作强度和等级,高端的同学总是用最简短精妙的代码来解决问题。代码变得越来越简洁,代码看起来更加结构化和规范化、扁平结构比嵌套结构更好




  3. 在团队合作中,你的代码不只有你在维护,降低别人的阅读/理解代码逻辑的成本是一种良好的品德




  4. 简单的代码,只会用到最基本的语法糖,复杂的高级特性,会有更多的依赖(如语言的版本)




  5. 一个公司如果数据库从来不出问题,那一定是因为没有业务量或者流量




  6. 所有技术的选型和设计,都有它的应用场景,除去那些让人开心的案例,剩下的毫无疑问就是坑;如何尽可能地避开这些坑,如何在出现问题的时候可以用最快的速度去修复,这些都是至关重要的因素




  7. 任何项目在早期,整个数据基本处于裸奔状态,没有做任何的权限校验与审计,用户可以对数据为所欲为,这个阶段主要考虑效率优先,随着业务的发展,数据安全的重要性愈发突显,大数据权限系统则会应运而生




  8. 现实中大部分程序员都属于是斐波那契程序员




  9. 关于代码意见:我的看法是,一个处理代码行数超过四五十行,就可以考虑缩减抽离了,为什么要这么做,其实很简单:出于可维护性,一个业务再复杂,离不开一个主干逻辑(也可能是多个)和 N 个子逻辑,你不能把臃肿的子逻辑代码放在同一个处理代码内部,这样太影响可读性,影响可读性的后果就是提高了维护成本
    7c90c17b3544b18518addf56f0bf9e29.jpg




  10. 首先从成长的角度来看,追求代码质量是一个优秀程序员对自己的要求,我想任何一门工艺、手艺,从业者想要把他做的更好,这是一个非常自然的目标,我们既然靠写代码谋生,就应该对代码有追求,对代码有自己的审美和判断,代码质量真的只是一个底线,在这条底线之上,才有可能谈稳定,谈伸缩,谈性能,谈架构,优雅与否则是区分顶级程序员与一般程序员的终极指标所在,能用不是代码的标准,能被维护才是代码的标准




  11. 程序员大厂面试三板斧:八股文、算法、项目经验




  12. 切记切记:不要用战术上的勤奋来掩盖战略上的懒惰




  13. 写代码是要有感觉的:感觉到了思如泉涌、键盘啪啪作响,一个需求很快就做完了,搬砖速度飞起




  14. 我们是一群与画家有着极大的相似性的猿/媛,是在创造,而不是完成某个任务,会在求解问题过程中产生精神愉悦或享受,我们崇尚分享、开放、民主、计算机的自由使用和进步




  15. 真正工作中都是写写业务代码,哪有那么多深度的技术问题;其实我觉得写代码最重要是逻辑思维够强,代码的规范工整,思路清晰,化繁为简,否则你说你写了多复杂的海量并发处理,多有深度,但是代码乱得一团糟,别人没法维护,再牛逼有何用




  16. 软件开发的任务应该是思考,思考手头的问题,设计出一个完美的解决方案,然后再把这个方案转变成可供用户使用的软件




  17. 阅读他人的代码是一种很棒的学习方式。正如一位作家所说,“阅读其他人的作品是让你成为一个更好的作家的最好方式”,这同样适用于代码




  18. 优秀程序员绝不只有技术:


    (1)问题解决能力


    (2)业务理解能力


    (3)沟通能力


    (4)产品思维


    (5)管理能力


    (6)分享表达能力


    ...




二、总结


锁屏.jpg
最后再开个玩笑哈哈:所以在感慨,在这个行业可能确实需要像前任这样的码农,挖坑,填坑,坑更多了,再填......生生不息,这样行业才能长久生存,没有 bug 可以修复,没有屎山可以铲,我们真的就失业了,如果每个程序员写的文档详细,逻辑清晰,注释清楚,拿什么让老板离不开你,靠什么威胁老板给你高工资,所以我现在的处境用一句话形容:全凭同行衬托


作者:纯之风
来源:juejin.cn/post/7273025562141327396
收起阅读 »

前端小工搬砖一周年了

入职一周年啦!对过去这一年的工作和生活都做个总结吧,经历的时候总觉得前方迷雾重重,回首看去每个脚印都清清楚楚。 工作 我还记得入职第一周的时候,交给我的第一个任务是修改几个页面的文案。工作确实不难,只是项目比较老了,整体结构比较复杂。开始的一些任务都是修修补补...
继续阅读 »

入职一周年啦!对过去这一年的工作和生活都做个总结吧,经历的时候总觉得前方迷雾重重,回首看去每个脚印都清清楚楚。


工作


我还记得入职第一周的时候,交给我的第一个任务是修改几个页面的文案。工作确实不难,只是项目比较老了,整体结构比较复杂。开始的一些任务都是修修补补,只要找对了地方,写个几行代码就可以了。


后面我也慢慢独立做一些新功能了。当亲朋好友问起我的工作时,我还能说出来我做了xxx。整体来说,我的工作都不算难,有些也只是比较麻烦复杂。现在的我就是个搬砖小工,告诉我需要做什么,然后我把它做完。


接下来我比较感兴趣的一个方向是提升开发效率。梳理日常的工作流程,通过一些工具或工程化的手段,来提供更好的开发体验。


学习


专业知识的学习上,感觉没有学习很多。平时的工作内容都不算太专业,也就是个基础的开发。虽然写的代码不少了,但也基本上就是使用一些语法和组件,不涉及太多原理上的东西。


前半年基本上都是学了一些跟开发密切相关的基础知识,后半年开始进行体系化的学习,每天早上到公司后学一会。在极客上学了一些课程,目前在看《vue.js的设计与实现》,一边看一边敲代码,快看完了,对于vue的原理确实更清楚了,平时写代码也更清晰了。


只是要具体说说学了点什么的话,又啥也想不起来了。还是要多写学习总结啊,写了会对所学的东西有个更深刻的理解。定个目标好了,以后一周写一篇学习总结。


生活


生活还是过得比较满意的。一开始找房就比较顺利,住了一年了,除了疫情期间邻居装修,整体还是比较满意的。


这一年也基本坚持下来了跑步的习惯,虽然也就养生跑了。除了疫情期间,每周会去跑个步。身体状态也都还不错。


今年对做甜点非常感兴趣。做了各种奶油蛋糕和慕斯蛋糕。天气热了之后,开始做糖水,杨枝甘露、各种水果奶昔还有烧仙草等等,还做了我非常喜欢的香草冰淇淋。


读书


读书想单独列出来,感觉能反映一个时期的思想状态。入职前半年看书时长40个小时,算是看书比较少的时段了。入职一个月后,我就开始看《工作的意义》和《生命的意义》了,还看了一些重生小说,半本《原则:应对变化中的世界秩序》,看完了《群体的疯狂》、《置身事内》和《梁永安:阅读、游历和爱情》。


上半年看的书比较杂乱,整个人也是迷茫和焦虑,看的基本都是一些热门书。


入职下半年就感觉好多了,看书74个小时。看完了《论生命之短暂》、《撒哈拉的故事》、《结构性改革》、《始于极限》、《庄子》、《道德经》、《孟子》、《传习录》等。看的都是一些我感兴趣的书,偏哲学的书。


下半年整个人也不那么焦虑了,虽然裁员的消息还是满天飞,但我也不担心了。看前方还是迷雾重重,只是我不再紧盯着前方,我看着脚下每一步。


总结


工作上算是中规中矩。生活上是丰富多彩,体验了许多之前没玩过、没做过的,但是我最爱的依然是跑步。最满意的是心态上的变化,从初入职场的迷茫焦虑,到逐渐平淡释然。只是一直困惑我的问题是方向,我始终没有找到人生的方向,一直以来也没有什么追求。不过也慢慢释然了,好像也没必要非要有目标。但行好事,莫问前程。


作者:叶之
来源:juejin.cn/post/7257122036597063735
收起阅读 »

10年老程序员告诉你,高级程序员应具备怎样的职业素质

回头望一望过往,从13年毕业至今,用手指数一数刚好能数过来,创过业,上过班,也搞过个人项目。 能力栈也从java、php、前端、产品经理、UI和平面设计之间反复横跳,反复折腾,🤣创过业的苦逼人应该都懂,后来主攻了前端,已经做了5年高级前端了。 最近自己行色匆匆...
继续阅读 »

回头望一望过往,从13年毕业至今,用手指数一数刚好能数过来,创过业,上过班,也搞过个人项目。


能力栈也从java、php、前端、产品经理、UI和平面设计之间反复横跳,反复折腾,🤣创过业的苦逼人应该都懂,后来主攻了前端,已经做了5年高级前端了。


最近自己行色匆匆地整理了一些编程方面的思考,聊聊自己对高级程序员的想法,当作是给自己这些年的一些总结吧。通过6个方面聊聊除了技术水平外,高级程序员应该具备什么样的职业能力。


一、代码风格很大程度决定了你的态度


代码需要有自己一贯的风格,包括命名约定、逻辑代码习惯、不写无用坏代码、语句块风格(如lambda表达式中只有一句话时省略return)、模块或函数注释、逻辑复杂部分注释,且注释需包含联系方式和时间,这样可以让后来者在需要求助的时候找到当事人,这也是对事负责的态度。


同时编码风格的追求体现了一种编码的热爱、一种不随意妥协的态度,当然也有可能是强迫症或洁癖发作,看不得不美观的东西。


二、人人都应具备解决问题的能力


通过百度、google、或者寻求同事帮助等方式解决编码中遇到的问题也是一个程序员的基础能力,而更高阶自独立思考能力在这边可以为你带来很好的提升效果。这边的问题可能会分很多类:


1、功能性问题,如上传文件时怎么才能成功、如何生成一张图片并返回图片流等等,这类问题通常是查资料、问同事朋友解决;


2、技术性问题,如怎样通过一个字符串生成二维码图片(当然你也可以直接用别人的库,省的自己造轮子),这可能也是钻研精神的一种体现,毕竟会造手机的人比会用手机的人厉害得多的多。这样一直钻研的人,久而久之就可以解决各种各样的问题,了解各种底层原理,离大牛之路原来越近了,但此时的你,可能头发也就少了好几根;


3、结构性问题,以下三个问题是更高阶人员才会遇到的问题,如我应该如何组织代码结构,模块与模块之间又是怎样的一种关系,当然你也可以完全不考虑这个问题,然后随便找个地方保存你的代码,或者干脆就写到一个函数里就好了,对功能和性能完全没有影响,但这样做你的心真的不慌吗?没有人给你code review出来吗?


4、协作性问题,一个项目大部分时候毕竟是很多人一起开发维护的,如何能保持大家的共同认知很重要,谁都不希望在同一个项目里重复造轮子,谁也不希望看到有人把代码搞乱,或把自己的代码搞乱。这时你应该需要用各种协作规则、编码规范,并用文档的形式记录下来,简单举几个例子,第一个编码规范让团队内的编码风格保持一致,这个最好理解却也最容易被忽视的东西。第二分工明确职责明确,编码前做好充分沟通进行分工且明确结构方案和技术方案,执行时不要干涉他人写的代码,而通过提交问题的形式让当事人处理迭代,同时将沟通时分配给自己写的公共模块记录到准备好的模块文档中并通知其他成员,做到信息一致。执行起来光有这些自然不够,还需要不断地code review来调整未按规定执行的代码。


5、项目性问题,正常是项目经理或产品经理需要考虑的事,项目迭代如何按时交付,这就要求项目内需要建立一个可行的开发计划,很多人可能会觉得制定开发计划就是一个坑,每天把自己坑到晚上10点才下班,久而久之就成了公司压榨员工的现象了。做计划是一件很难的事,我认为要解决这个问题,特别需要注意以下三点,第一个需避免计划谬误,每个人都会把计划美化,觉得可以做很多事,但做起来确是另一幅景象,遭受了挫败感,所以具体的事情要减少到原计划的50%到70%,让自己切实可完成,让计划为你带来成就感,第二个是预留30%左右缓冲时间让计划避免突发事情的破坏,第三个是保证执100%完成,这是达成任务获得成就感,从而增强信心的环境,如果任务制定太高了,就每天再往下降一点,知道可以确保100%按时完成。


其他问题也就不再举例列出了。


最后总结一点就是,问题解决固然重要,但不要为了解决问题而解决问题,知其然不知其所以然,又或者干脆网上搜索到的代码复制粘贴过来试,能跑通就不管了,全然不知问题的根本原因所在。


更好的做法是要去理解问题本身,找到原因并在自身内化。


三、模块抽象能力很大程度区分了程序员的层次


这个也可以理解为我们常说的封装,但又不仅仅是抽出代码封装,而包含了更多的设计思维在里面。


我认为这是区分中高级程序员很重要的一点,模块抽象能力代表了代码的组织性、灵活性、可理解度以及可维护性。


每一种流行框架或库的出现都代表了作者在模块抽象部分的新思维,ViewModel、Promise、Spring的ioc、aop这些,都代表了作者在抽象上的理解,才孕育出我们现在的各种技术、社区等。那我们在实际项目中的模块抽象,同样可以让代码结构拥有上面所说的四个特征,让项目更加美观。


模块抽象能力可以在项目设计阶段,以及下面说到的微重构阶段进行,让代码始终可以保持高维护性的状态。


四、用写开源库的心态设计你的每个模块


可能我是个开源爱好者的缘故吧,虽然我也没上传几个代码库,也没什么时间来维护。


但是在设计项目模块的时候都会不自觉地想象如果我要把它开源出去,它应该会有什么功能,哪些功能是我们现在会用到的,在编写前就把它设计得更加灵活,这样设计的目的是为了让模块或组件更能够减少日后项目变化带来的重构成本,也许有些功能在后面使用时已经就具备了,再到后面愈加成熟后再开源出来,供大家使用也是一个快乐的分享,而这些东西也就成了你的门面,当然前提是有足够的时间来维护,而不能让那些使用的人困惑于bug和未满足的需求。


五、微重构能力可让你的项目持续保持高可维护性状态


好的产品经理对产品会有更好的把控力,会制定出稳定可行的路线图,这对于开发来说是一件很好的事,因为这样开发人员编码时就可以根据产品路线图预留好相关功能的接口,从而让代码在日后迭代更方便。


但大部分产品可能不是这样的,产品路线图并不总是制定好的,产品经理经常需要根据市场反馈才能制定出近期策略,或者上面所说的路线图突然改变了,这时候预留的代码可能也要作废了,久而久之项目在这样的环境下改来改去,坏代码越来越多,可维护性越来越差,统一重构成本又太大,到后面谁都不愿意接这块烫手山芋了。


谁都没有对一个项目从开始就完美设计以后不再修改的能力,微重构就要求你在平时迭代时对之前因为需求限制,或没有考虑到的散装代码、未抽象的代码进行抽取重构,让代码一直保持在高可维护性的状态。


虽然会在迭代时额外花费一小部分时间,但这是为了在日后节约更多的时间和精力,同时也让新来者更容易接受项目维护。


一个微重构的例子:原本一个前端项目只需要和一个ip的服务器交互,此时的ajax请求可能一个简单的函数封装就可以满足需求,随着项目迭代,这个项目需要和多台服务器交互,很多人觉得函数中加个ip参数就可以了,需求实现了改动也小,心里美滋滋。但这样却违背了模块抽象的原则,灵活性也大大减小,此时根据微重构的角度则应该封装成一个ajax类,在创建对象时都有其独特的特征参数一一对应每台服务器,这便有了受欢迎的Axios。


并不是所有需要复用的代码需要微重构。


它大致可分为以下三点:


1、可复用抽取,绝大多数开发人员都知道这块内容,对原本只有一个地方使用到的散装代码在某一天给的需求中也需要这块代码,此时就是抽取这块代码的时候了,这边所说的“这块代码”不仅仅是包括一个代码块,它还包括一个更细微的字符串或数字的常量、一个配置项等;


2、相关聚合,在平时项目中,我可以很肯定你一定会把视图文件放一个文件夹,把工具文件放一个文件夹,把相关controller、service、dao放到一个文件夹,但在代码中可能又是另一幅景象,你可能会在想要的调用接口的地方直接调用接口,也可能会在A文件和B文件写满了sql语句,这些都和上面的文件分类截然相反。为了便于维护和统一管理,我们就需要将相关代码聚合在一起,如序列化和反序列化、构造和解析、接口操作、数据库操作等等,这些都可以看作是一些相关操作,可将它们挂载到一个相关类上,可单独写一个文件导出方法,也可以写成一个类。


3、模块抽象,这就和上面第三、四点所说的一样了,利用抽象能力重构原本应该抽象却没有抽象的代码。


六、让你的好习惯辐射到更多人


也许你自己也有一套行之有效的编码或项目管理心法,无论如何都请不要独享,把它传播给更多需要的人吧,因为这至少在两个方面可以让你受益:


1、与你的同事分享可以增进团队融合度,谁都希望与自己价值观相近的人共事,但要遇到这样的同事很难,这样的事大多数只存在于理想中,所以如果你的团队相处很好,请好好珍惜吧。


大部分情况是核心价值观和能力匹配度可接受,并通过不断地磨合来相互适应,提高融合度,这时团队成员的分享、辩论等都可以持续提高团队融合度,当然,从相反面也可以过滤核心价值观不够匹配的成员。


2、与朋友或陌生人等非共事关系的人分享进行价值输出,可以把这种分享看作是一种服务或一个产品,通过产品或服务对外输出价值,既让这份价值产出了更多的收货,又可以提升自身品牌信誉度。


从辐射渠道上,你可以写成文章、做成分享PPT,让它在同事之间流动,让它在BBS上传播。


如果你时间精力充沛,你也可以做成视频,然后去qq群、微信群、知乎、segmentfault、简书等等各大社交网站去传播。


作者:古韵
来源:juejin.cn/post/7262146559831212090
收起阅读 »

吵上热搜第一,华为和小鹏在争什么?

来源 | 伯虎财经(bohuFN) 作者 | 陈平安 大概没有人能想到,这场有关AEB技术的讨论会引起如此之大的风波,以至于不仅仅是行业内在热切讨论,甚至于直接冲上了微博热搜第一。 事情的起因源于小鹏汽车董事长和小鹏在一期采访里表达了对AEB技术的看法::“...
继续阅读 »


来源 | 伯虎财经(bohuFN)


作者 | 陈平安



大概没有人能想到,这场有关AEB技术的讨论会引起如此之大的风波,以至于不仅仅是行业内在热切讨论,甚至于直接冲上了微博热搜第一。


事情的起因源于小鹏汽车董事长和小鹏在一期采访里表达了对AEB技术的看法::“友商讲了AEB(汽车自动紧急制动系统),我认为99%是假的,它就是造假,那些宣传都不是公司官方发布的,全是来自小视频。我们的人也去问了,它的AEB根本不能开,路上误刹车的情况太多了。”


虽然这番言论并没有直接点出友商的品牌,但是AEB是华为智能汽车解决方案BU CEO余承东在在新款问界 M7 发布会上专门提到的竞争力之一:“华为 ADS2.0 系统的 AEB 能力进一步提高,前向刹停速度已经从上海车展期间的 60km/h 提升至 90km/h。”


很快余承东便在朋友圈给出回应,称“连AEB是什么,居然有车企的一把手还根本没有搞懂呢!”。



不仅仅是两家大佬,其他品牌的掌门人包括腾势销售事业部总经理赵长江、哪吒汽车CEO张勇也纷纷表达了自己的看法。


那么到底什么是AEB,为什么小鹏和问界会因为这个技术激烈讨论?


01 到底什么是AEB


到目前为止讨论已经走向尾声,而敲响结束钟声的,是昨晚车媒懂车帝的夜间 AEB 实测。


AEB是Automatic Emergency Braking的缩写,中文翻译是自动紧急制动。这项技术的好处是,它可以让车在符合一定条件的工况下,识别到碰撞危险并且接管车辆以紧急刹车,从而避免碰撞或减轻碰撞后果。


简单来说,就是能让你在面对碰撞来不及踩下制动踏板时,汽车也能自动制动,从而避免碰撞。


从实测的结果来看,搭载了问界ADS 2.0 系统的问界 M5 和阿维塔 11的表现要明显优于小鹏的两款车型——G6和G9。比如,在面对静态假车时,问界 M5 和阿维塔 11 都能在80km/h时完成刹停,小鹏的车型则是40km/h ,当面对静态两轮电动车时,问界 M5 和阿维塔 11则是能在 60km/h时刹车,小鹏 G6 则是30km/h。


事实上,在卖点宣传上,高速行驶时做到及时刹停是相当重要的一部分。不仅仅是问界新车M7,腾势的赵长江日前也发文表示,腾势现在可以做到60km/h的状态下启动AEB,以后的高阶智能驾驶版本可以实现80km/h及以上。


不过,AEB真的是自动刹停速度越高,就越好吗?


持相反观点的人还不少。何小鹏今早就在微博给出了回应。何小鹏的核心观点是:首先高速AEB存在安全隐患和体验的问题,当前要做的是优化智能辅助驾驶能力,降低误触率;其次在有人驾驶的主动安全策略方面,要更加谨慎。



事实上,AEB并不是新能源汽车独占的优势,而是现代汽车的一项基本配置。根据乘联会数据,截止今年年中,乘用车配置AEB功能占比为49.5%,其中新能源车配置该功能占比已达到55.8%。


一些汽车测试工程师表示,AEB建立在雷射雷达、无线电波雷达以及影像辨识系统上,工作原理是经过雷达测距、识别,根据距离和车速进行运算得出结果并相应。而影响其结果的因素有很多,比如系统的误判或者极端天气等。此前,业内发生多起的幽灵刹车也是产生于此。而这种误判在高速行驶的状态下,带来的安全风险会更大。


哪吒汽车CEO张勇也在微博表示,AEB场景的复杂性太高,“要做得好难度确实很高,需要极大里程和样本量的测试”。


因此能否在更高速的情况下完成刹停并不是衡量AEB好坏的标准,如何用更好的智能辅助驾驶去帮助驾驶员进行预先制动,躲避危险场景才是更好的选择。


02 争夺“智能驾驶”的标签


无论是华为加持下的问界,还是小鹏,都刚刚从生死边缘走回来。在刚刚过去的10月,小鹏交付新车20002台,环比增长31%,同比增长292%。而在整个三季度,小鹏的总交付量为40008辆汽车。


无独有偶的是,10月也是问界爆发的月份。10月份问界系列交付了12700辆汽车,其中新款问界M7贡献了绝大部分的10547辆。而在今年8月,问界的全系销量也仅为5018辆。不仅如此,根据问界的官方消息,新款问界M7上市50天累计大定突破80000辆。


如果要探究两家销量起死回生的秘诀,智能驾驶一定是绕不过的关键。无论是小鹏还是华为,都把自动驾驶作为一个重要的卖点,在宣传上,两家也一直在暗暗较劲。比如在发布ADS 2.0时,余承东用他一如既往的风格表示:“(智能驾驶)和新势力、特斯拉相比,我们遥遥领先”。


何小鹏则在接受采访时表示:“我们有的人负责吆喝,让大家关注起来。有些人负责干活,把这些东西干好,再把客户拿过来,我觉得这个配合是天作之合。”


在业内,这两位也确实是毫无争议的第一梯队。今年在智能驾驶能力的比拼上,“开城”成为了最主要的比较维度之一。何小鹏在今年的1024 小鹏汽车科技日上介绍,将于 11 月底在 25 个城市开放,紧接着在 12 月底扩大至 50 个城市。


余承东表示,华为高阶智能驾驶系统将在 2023 年 12 月于全国开放。


从市场的表现来看,智能驾驶也已经在事实上成为了消费者购车的一个重要影响因素。根据博主孙少军的分享,无论是小鹏还是问界,智驾的选装率都超过了六成。


在政策端,据HiEV报道,智能网联汽车准入试点通知最快将在11月发布,这或许意味着国家层面的自动驾驶L3标准即将到来。


各家车企也都在加大对于智能驾驶的投入。例如蔚来宣布10月起要把增强领航辅助NOP+的使用场景从高速进入城区,预计明年一季度,将累计开通城区领航路线里程20万公里;二季度,将累计开通城区领航路线里程40万公里。


理想则表示公司此前对智驾的重视度不够,应该提前半年全力投入,而不是今年年初才开始:“账上趴着 700 多亿的现金,要把它转化成持续的竞争力。”


在这个背景下,这两家头部企业需要迅速为自己和智能驾驶划上等号。就像比亚迪通过迅速吃下“油转电”市场完成市场认知从而滚起规模一样,在智驾全面提速的时代,即便是领先者华为和小鹏,也需要加一脚油门了。


*文章封面首图及配图,版权归版权所有人所有。若版权者认为其作品不宜供大家浏览或不应无偿使用,请及时联系我们,本平台将立即更正。


作者:用户5117553812944
来源:juejin.cn/post/7299016228579377202
收起阅读 »

人需借以虚名而成事

前言 自从我看冯唐老师推荐的《资治通鉴》之后,对历史有那么一丢丢的兴趣,直到在短视频里面刷到《百家讲坛》里面几位老师的讲解片段,以及跟自己经历结合,瞬间满满的共鸣,是啊时代一直在变化,而里面的为人处事、社会规则凡此种种却从来没有太大变化,这就是我们需要去学习...
继续阅读 »

bcf7ea99ded21c1a1ac9a1d85b59724c.jpeg


前言




自从我看冯唐老师推荐的《资治通鉴》之后,对历史有那么一丢丢的兴趣,直到在短视频里面刷到《百家讲坛》里面几位老师的讲解片段,以及跟自己经历结合,瞬间满满的共鸣,是啊时代一直在变化,而里面的为人处事、社会规则凡此种种却从来没有太大变化,这就是我们需要去学习历史的原因。


所以有了以下感慨。



<<百家讲坛>> 不愧是经典,整本历史歪歪斜斜写着两字:权谋,谋事、谋人,加上不确定因素,天时地利人和,最终变成命运。
人的一生就像书中一行字轻描淡写,绘成一笔~



人需借以虚名而成事




这里解释一下,人需要倚靠外部的这些名号、头衔从而能有比较大的作为。为什么这么讲呢,听我细细道来~


人生需要四行


这是王立群老师讲的,人生要想有点成就需要四行,首先你自己行,你自身本身够硬,能够做好事,其次是有人说你行,从古代的推荐机制,比如说优秀的人推荐其他优秀的人才对不对,李白的大名远扬,唐玄宗在公主引荐之下见了皇帝,第三个说你行的人要行,推荐你的那个人本身能力要强,不然没有说服力,第四是身体行,很多机会是熬出来的,比如司马懿伺候了3位君主,兢兢业业,最终才能完成自己的大业。


何为借以虚名?


1、刘备的例子,他在比较年长的时候还无法实现自己的基业,寄人篱下,他登场的时候是怎样的呢,名号叫刘皇叔,翻开长长的祖谱,八辈子打不到杆哈哈哈,不过因为当时被曹操挟持,所以需要有汉族帮忙自己,所以顺理成章的提拔上来。


2、项羽出生在一个贵族家庭。他的父亲项梁是楚国将领,曾经在楚汉战争中和刘邦一起作战。而他的母亲也是楚国的贵族,是楚王的女儿。


相比之下,刘邦的出身则比较低微。他的祖父是一个农民,父亲是一个小县官。他自己也曾经当过一个普通的县尉,但因为功绩不够而被罢免。


尽管项羽出身高贵,但他的性格比较豁达,喜欢豪情壮志和享乐人生,行事大胆不拘小节。刘邦则更加谨慎稳重,注重政治规划和长远发展。


3、王立群老师讲述过他自身的故事,小学的时候成绩优秀得到保送,后面名额被学校给了别人,自己去了私立的学校,半工半读,到了大学还是遇到了同样的遭遇,后面就到比较好的大学教书,但是有一天校长跟他讲他的成绩还是出身问题需要去另一所低一点的学校教书,他当时就哭了,命运比较坎坷的。


4、工作中,我们常常会听到,某位领导自我介绍某某大厂经历,还有某某大学毕业,还有当你投一些大厂的核心部门的时候,都会对你学历进行考核。


所以我们从上面3个例子来看,人生确实正如王立群老师讲的,需要四行,当你自己不行的时候,即使有机会也会最终流失掉;当没有推荐你的时候,也会埋没在茫茫人海中,并不是说是金子总会发光,现实是伯乐更加重要;当说你行的人没有能力的时候也不行,名牌大学、大厂经历也是这样,通过一个有名声的物体从而表示你也可以,也很厉害哈哈;最后身体是本钱,这个就不用过多的讲解了。


读历史的目的,从前人的故事、经历中,学习到点什么,化为自身的经验、阅历。


我发现现在很多人都喜欢出去玩,说的开阔视野,扩展见识,在我看来读历史才是真正的拓宽自己的眼界,原来几百年前也有人跟我一样遇到同样的问题,也有那些胸怀大志的三国名将郁郁不得志。


历史是一本书籍,它可以很薄,几句话、几行字就概括了一个朝代,它也可以很厚,厚到整个朝代的背景,比如气候情况、经济情况、外交情况、内政情况,各个出名的人物事迹,那岂是几页纸能讲得完的,是多么的厚重。


如果人不能借以虚名怎么做事?


修炼两件事情




同样百家讲坛也给出了一个比较好的见解,一个人想要成事,需要两个明,一个是高明、一是精明。高明是你有足够的眼光去发现,发现机会也好,发现危机也好,往往人生的成就需要这种高瞻远瞩的;另一个精明,是指在做事上打磨,细心主动,王阳明讲的知行合一,里面很关键的一点就是事上练,方法论在实战中去验证总结。


心态上练




李连杰在采访中说了这么一个耐人寻味的故事,他发现不管是有钱的人还是没有钱的人都会生气,比如一些老板在为几百万损失破口大骂,也有人因为几万的丢失是否生气,也有人丢了几块钱很愤怒。他觉得人都会愤怒,只是那个导致他愤怒的级别不一样而已。


他早年给自己定目标,发现当达到目标之后,发现还是有人比自己厉害,所以即使达到目标也没有想象快乐;即使有钱人无法解决痛苦的问题,比如生老病死。


所以人生意义在哪里?


我认为如果你奔着成事的想法,多修炼上面两件事,如果没有发展机会,不如躺平,积累自己的能力,就像道德经里面的无为而为,而心态的修炼是人生终极修炼,因为生死才是人生最大的难关,人应该怎么脱离时间束缚,不受衰老影响。


恰恰历史给了我们启示,要有所作为,能够为人类历史上留下精神粮食,做出浓厚贡献,就像我们都没有见过孔子、老子吧,但是他们的精神至今都在影响着我们。


作者:大鸡腿同学
来源:juejin.cn/post/7252251628090490917
收起阅读 »

假如互联网人都很懂冒犯

大家好,我是老三,最近沉迷于听脱口秀,并且疯狂安利同事。 脱口秀演员常常说的一句话是:“脱口秀是冒犯的艺术”。最近我发现,同事们好像有点不一样了。 阳光灿烂的早上,趿拉着我的宝马拖鞋,跨上包浆的小黄车,屁股感受着阳光积累的炙热,往公司飞驰而去。 一步跨进电梯...
继续阅读 »

大家好,我是老三,最近沉迷于听脱口秀,并且疯狂安利同事。


脱口秀演员常常说的一句话是:“脱口秀是冒犯的艺术”。最近我发现,同事们好像有点不一样了。




阳光灿烂的早上,趿拉着我的宝马拖鞋,跨上包浆的小黄车,屁股感受着阳光积累的炙热,往公司飞驰而去。


一步跨进电梯间,我擦汗的动作凝固住了,挂上了矜持的微笑:“老板,早上好。”


老板:“早,你还在呢?又来带薪划水了?”


我:“嗨,我这再努力,最后不也就让你给我们多换几个嫂子嘛。”


老板:“没有哈哈,我开玩笑。”


我:“我也是,哈哈哈。”


今天的电梯似乎比往常慢了很多。


我:“老板最近在忙什么?”


老板:“昨天参加了一个峰会,马xx知道吧?他就坐我前边。”


我:“卧槽,真能装。没有,哈哈。”


老板:“哈哈哈”。


电梯到了,我俩都步履匆匆地进了公司。


小组内每天早上都有一个晨会,汇报工作进度和计划。


开了一会,转着椅子,划着朋友圈的我停了下来——到我了。


我:“昨天主要……今天计划……”


Leader:“你这不能说没有一点产出,也可以说一点产出都没有。其实,我对你是有一些失望的,原本今年绩效考评给你一个……”


我:“影响你合周报了是吗?不是哈哈。”


Leader、小组同事:“哈哈哈“。


Leader:“好了,我们这次顺便来对齐一下双月OKR,你们OKR都写的太保守了,一看就是能完成的,往大里吹啊。开玩笑哈哈。”。


我:”我以前就耕一亩田,现在把整个河北平原都给犁了。不是,哈哈。”


同事:“我要带公司打上月球,把你踢下来,我来当话事人。唉,哈哈”


Leader、同事、我:“哈哈哈“。


晨会开完,开始工作,产品经理拉我和和前端对需求。


产品经理:“你们程序员懂Java语言、Python语言、Go语言,就是不懂汉语言,真不想跟你们对需求。开个玩笑,哈哈。”


我:“没啥,你吹牛皮像狼,催进度像狗,做需求像羊,就这需求文档,还没擦屁股纸字多,没啥好对的。不是哈哈。”


产品经理、前端、我:“哈哈哈”。


产品经理:“那我们就对到这了,你们接着聊技术实现。”


前端:“没啥好聊的,后端大哥看着写吧,反正你们那破接口,套的比裹脚布还厚,没事还老出BUG。没有哈哈。”


我:“还不是为了兼容你们,一点动脑子的逻辑都不写,天天切图当然不出错。不是哈哈。”


前端、我:“哈哈哈”。


经过一番拉扯之后,我终于开始写代码了。


看到一段代码,我皱起了眉头,同事写的,我顺手写下了这样一段注释:


/**
* 写这段代码的人,建议在脑袋开个口,把水倒掉。不是哈哈,开个玩笑。
**/


代码写完了,准备上线,找同事给我Review,同事看了一会,给出了评论。



又在背着我们偷偷写烂代码了,建议改行。没有哈哈。



同事、我:“哈哈哈”。


终于下班了,路过门口,HR小姐姐还在加班。


我:“小姐姐怎么还没下班?别装了,老板都走了。开玩笑哈哈。”


HR小姐姐:“这不是看看怎么优化你们嘛,任务比较重。不是,哈哈。”


HR小姐姐、我:“哈哈哈”。


我感觉到一种不一样的氛围在公司慢慢弥散开来,我不知道怎么形容,但我想到了一句话——


“既分高下,也决生死”。




写这篇的时候,想到两年前,有个叫码农小说家的作者横空出世,写了一些生动活泼、灵气十足的段子,我也跟风写了两篇,这就是“荒腔走板”系列的来源。


后来,他结婚了。


看(抄)不到的我只能自己想,想破头也写不不来像样的段子,这个系列就不了了之,今天又偶尔来了灵感,写下一篇,也顺带缅怀一下光哥带来的快乐。


作者:三分恶
来源:juejin.cn/post/7259036373579350077
收起阅读 »

技术主管是否需要什么段位的技术

今天来跟大家讨论一下技术主管需要什么样段位的技术? 首先我要说明的一点,技术主管前提一定是技术出身。对于那些完全不懂技术,但是又身兼技术主管或者总监的同学,我这里就不再赘述,毕竟这个已经超出我目前理解力的范围。比如阿里云的王坚博士,基本上不懂技术细节,但是依然...
继续阅读 »

今天来跟大家讨论一下技术主管需要什么样段位的技术?


首先我要说明的一点,技术主管前提一定是技术出身。对于那些完全不懂技术,但是又身兼技术主管或者总监的同学,我这里就不再赘述,毕竟这个已经超出我目前理解力的范围。比如阿里云的王坚博士,基本上不懂技术细节,但是依然是阿里云的CTO,一手缔造了阿里云。


那我们这里再详细讨论一下,作为一名技术主管,到底应该有什么样的一个技术的段位?或者换句话来说,你的主管的技术水平需要到达什么样的一个水位?


先说结论,作为一名技术主管,一定是整个团队的技术架构师。像其他的一些大家所讨论的条件我觉得都是次要的,比如说写代码的多少,对于技术深度的钻研多少,带的团队人数多少等等,最核心的是技术主管一定要把控整个团队整个业务技术发展的骨架。


为什么说掌控团队技术架构是最重要的?因为对于一个团队来说无非就两点,第一点就是业务价值,第二点就是技术价值。


对于业务价值来说,有各种各样的同学都可以去负责业务上面的一些导向和推进,比如说产品经理,比如说运营同学。技术主管可以在一定程度上去帮助业务成功,甚至是助力业务成功,但是一定要明白技术同学一定要有自己的主轴,就是你对于整个技术的把握。因为业务上的决策说到底技术主管是只能去影响而非去决策,否则就是你们整体业务同学太过拉胯,无法形成战术合力的目的。


对于一线开发同学来说,你只要完成一个接一个的技术项目即可。但是对于技术主管来说,你就要把握整体的技术发展脉络。要清晰的明白什么样的技术架构是和当前的业务匹配的,同时又具备未来业务发展的可扩展性。


那为什么不能把整个技术架构的设计交给某一个核心的骨干研发同学呢?


所以这里就要明白,对于名技术主管来说,未必一定要深刻的钻研技术本身,一定要把技术在业务上的价值发挥到最大。所以在一定程度上来说,可以让适当的同学参与或者主导整个技术架构的设计,但是作为主管必须要了解到所谓的技术投入的产出比是什么。但是如果不对技术架构有一个彻底的理解,如何能决定ROI?



也就是在技术方案的选型里面一定要有一个平衡,能够用最小的技术投入获取到最大的技术利益,而非深究于技术本身的实习方式。如果一名技术主管不了解技术的框架或者某一些主干流程,那么就根本谈不上怎么样去评估这投入的技术产出比。一旦一名技术主管无法衡量整个技术团队的投入产出比,那就意味着整个团队的管理都是在抓虾和浑水摸鱼的状态,这时候就看你团队同学是否自觉了。


出现了这种情况下的团队,可能换一头猪在主管的位置上,业务依然运行良好。如果在业务发展好的时候,可能一直能够顺利推动,你只要坐享其成就可以了,但是一旦到了要突破困难的时期,或者在业务走下行的时候,这个时候你技术上面的优势就一点就没有了。而且在这种情况下,如果你跳槽到其他公司,作为一名技术主管,对方的公司对你的要求也是非常高的,所以这个时候你如果都说不出来你的技术价值对于业务上面的贡献是什么那想当然,你可能大概率就凉凉了。


那问题又回到了什么样的水平才能到达架构师这个话题,可以出来另一篇文章来描述,但是整体上来说,架构的本质首先一定要明白,为的就是业务的增长。


其次,架构的设计其实就是建造一个软件体系的结构,使得具备清晰度,可维护性和可扩展性。另外要想做好架构,基本的基础知识也必不可少,比如说数据库选型、分布式缓存、分库分表、幂等、分布式锁、消息架构、异步架构等等。所以本身来说做好架构师本身难度就非常大,需要长期的积累,实现厚积而薄发。如何成为一名优秀的架构师可以看我的公众号的其他文章,这里就不再详细的介绍了。



第二点是技术主管需要对于技术细节有敏感度。很多人在问一名主管到底应该具备什么样的综合能力,能不能用一种更加形象的方式来概括,我认为就有一句话就可以概括了。技术主管应该是向战略轰炸机在平常的时候一直遨游在大气的最上层能够掌控整个全局,当到了必须要战斗的时候,可以快速的补充下去,定点打击。


我参加过一次TL培训课程,讲师是阿里云智能交付技术部总经理张瑞,他说他最喜欢的一句管理概括,就是“心有猛虎,细嗅蔷薇”,也就是技术主管在平常的时候会关注于更大的宏观战略或策略,也就是注重思考全局,但是在关键的时候一定要关注和落地实际的细节。


换句更加通俗的话来说,就是管理要像战略轰炸机,平常的时候飞在万丈高空巡视,当发生了战斗的时候,立即能够实现定点轰炸。



所以如果说架构上面的设计就是对于整个团队业务和技术骨架的把握,那么对于细节的敏感度就是对于解决问题的落地能力。


那怎么样能够保证你自己有一个技术细节的敏感度?


我认为必要的代码量是需要的,也就是说对于一个主管来说,不必要写太多低代码,但一定要保证一定的代码量,让自己能够最好的,最快的,最贴近实际的理解实际的业务项目。自己写一些代码,其实好处非常多,一方面能够去巩固和加深自己对技术的理解,另外一方面也能够通过代码去更加理解业务。


当然贴近技术的方式有很多种,不一定要全部靠写代码来完成,比如说做code review的方式来完成,做技术方案的评审来完成,这都是可以的。对我来说,我就会强迫自己在每一个迭代会写上一个需求,需求会涉及到各方各面的业务点。有前端的,有后端的,也有数据库设计的。


自己亲自参与写代码或者code review,会让自己更加贴近同学,能够感知到同学的痛点,而不至于只是在空谈说教。


总结


所以对于一个技术主管来说,我认为首要的就是具备架构设计的能力,其次就是要有代码细节的敏感度,对全局和对细节都要有很强大的把控能力。


当然再总结一下,这一套理论只是适用于基础的管理者,而非高层的CTO等,毕竟不同的层级要求的能力和影响力都是不一样的。


作者:ali老蒋
来源:juejin.cn/post/7257784425044705340
收起阅读 »

互联网人参与企业数字化转型的过程与误区

做数字化转型业务已经有大半年,虽然以前在做智能表格类工具的时候,就有思考过如何通过智能表格类工具解决企业流程的问题,但远不如这大半年深更业务来得更真切。在这过程中也逐步习得了数字化转型的过程,并扫除了以前对数字化转型的一些误区,通过此文给大家分享。 第一步:业...
继续阅读 »

做数字化转型业务已经有大半年,虽然以前在做智能表格类工具的时候,就有思考过如何通过智能表格类工具解决企业流程的问题,但远不如这大半年深更业务来得更真切。在这过程中也逐步习得了数字化转型的过程,并扫除了以前对数字化转型的一些误区,通过此文给大家分享。


第一步:业务线上化


数字化从字面意思看,就是要将业务都数字化,后面基于数据再开展一系列业务的降本增效提质。数据怎么来呢?那必须尽可能将业务线上化了。


初入门者看似很简单,实则深似水。从互联网公司转型过来的从业者会发现以前的经验都失效了,很多时候也难以站在一个用户的角度来审视如何线上化这个问题。譬如以前做社交产品,还能自己站在普通用户的角度,YY出不少看似说得通的需求,到了企业数字化领域,不能一头扎入业务中,多跟业务分析师、一线业务专家沟通,业务这潭深水就可以够呛一肚子水。


业务的线上化并非易事,需要遵循以下的步骤:


建立系统之间的关系



建立系统之间的关系,本质是建立了数据流动的链条。系统主要是承载企业的数据,将系统连接起来即是将他这些数据串联起来,产生1+1>2的价值。


作为数字化专家,比较少见可以在企业成立之初就参与数字化的建设。企业草创阶段更多是企业的负责人担当这一角色。数字化专家半路加入,往往可能是面对一系列外部采购的系统,如:存储员工信息的飞书,存储财务预算的飞书文档和财务经营数据的金蝶,存放客户资料和销售线索的纷享销客等等。如果有研发实力的企业,可能还养着一个小团队,自研搭建了一些简单的业务系统。


企业数字化的过程,就像在下一盘围棋一样,每通过外采/自研建设一个系统,就像在棋盘上下子,并且我们在下子的过程中都会寻求棋子之间的联系,比如每个系统的用户信息,都可以通过飞书获取;生产经营的信息导出成文档,基于这些文档的数据可以在飞书上做财务预算;生产系统可以基于客户资料和销售线索调整生产计划等等。这些系统只有像棋子一样联系起来,整盘棋才能盘货起来,在市场竞争中占据优势。如果所有系统都没有规划,各自为政,一盘散沙,那势必会被竞争对手吞掉。想象一下,如果每建设一个系统的员工信息都需要重新建设,那该多头疼。


至于这些系统是怎么串联起来,一般来说通过数据的导入导出、开放接口等技术手段,采用哪种基于成本考虑,在此就不作赘述。


梳理标准作业流程



在已有信息输入的基础上,我们建立了系统之间的联系,这些系统有的是已经存在的,有的是亟待规划落地的。良好的系统关系的梳理与建立,能够帮助企业高屋建瓴地做好后续信息化的规划,知道系统建设的优先级,毕竟数字化的资源(预算、人力)是有限的。


确认了规划,我们才好知道下一步该建设哪个系统,这时我们便进入了第二阶段,梳理标准作业流程。这一阶段,可能通过翻阅过往标准作业流程文档、与业务专家进行访谈等手段,全面地梳理清楚这些流程。有了标准作业流程,数字化专家才好去对这些流程做归类,形成系统的功能模块,并规划相应的功能模块将这些标准作业流程线上化。


自研还是采购?


系统的落地无非是通过自研或者采购。不过这个命题对于那些中小企业来说看来是无需烦恼的,采购只能是唯一划算的出路。


对于有自研能力的公司,这是个头疼的问题。即使自研能较强的互联网公司,也不可能所有的能力都由自己建设。最常见的代码仓库、发布系统等等,往往是“采购”自公司内部的研效团队。选择自研,无非是希望可以更灵活、更可控;选择采购无法是看种成本——资金成本、时间成本。基于这些考虑,公司对那些服务较为核心、战略级业务,且愿意花更多时间等待成长成熟的系统,更多倾向于自研。而那些非核心的,等太久公司会瘫痪的系统(时间成本),也不需要花大价钱(有许多同样采购的客户分摊了成本)购买的,如财税系统、办公软件,则更多倾向于采购。


自研与采购其实也并非一定要二选一。有些提供软件SAAS的厂商,也愿意将源码售卖给客户,更有甚者,越来越多的厂商会提供对自研更友好的PAAS产品。这可以看作是一个先采购后迭代自研的过程。


第二步:降本增效的两大利器——体验&标准作业流程优化


数字化过程中有一个常见的误区,就是只要我努力地将标准作业流程搬到线上,就可以一定能帮公司降本增效提质,能让公司发展红红火火。这里的误区其实是有两个重要的误区:


误区



误区一: 数字化一定能公司降本增效提质,能让公司发展红红火火。再好的数字化建设也只是工具,如果使用者的意识没有跟上,可能达不到效果。比如强推系统而培训不足,那就会导致使用率不足,数据失真严重;有好的数据分析能力却没有很好使用的知识,那就无法帮公司提升做出正确决策的效率。作为数字化专家,有义务跟老公和团队沟通清楚数字化系统的能力范围,并采取相应的措施让人与系统的磨合做得更好。


误区二: 将标准作业流程搬到线上即大功告成。要达到降本增效的效果,只“搬”是远远不够的,还需要优化体验和流程。


体验优化


优化体验应该是互联网人独有的优势,互联网业务中,多少工程师被设计师毒打,摁在电脑桌前一个个设计稿还原,天生自带好坏体验的滤镜。体验差相信是很多传统行业信息系统的通病,慢,卡,难用基本是一线用户想到的形容词。


如果说互联网产品体验不好用户可以逃走,那公司的系统用户是无法选择的。体验差造成的问题有很多,比如新系统推广难,老系统用户敷衍了事,造假应付导致数据失真。因此在设计产品的时候虽然我们多数侧重功能要先有,但体验也万万不能忽视。


交互体验在传统行业数字化转型中扮演着重要的角色。由于传统行业的一线人员往往对电子设备的使用水平不如IT从业人员,因此需要设计出更符合他们使用习惯的数字化产品,从而提高交互体验,降低使用难度。


以银行业为例,招行银行推出了“一网通”服务,通过简洁的界面设计、便捷的操作流程,大大提高了用户的使用体验。此外,该服务还提供了丰富的数字化工具,如在线客服、手机银行等,使得用户可以随时随地进行业务办理,提高了业务效率。


(标准)作业流程优化


虽然体验对于互联网人而言驾轻就熟,但流程确实门外汉。往往在跟业务专家梳理和讨教流程的时候,惮于提出质疑和优化,这就损失了一个大好机会进行流程调整优化。


一个业务流程,线下和线上的操作可能大相径庭。以物业行业为例,一个巡逻的检查任务,以前只需要到每个巡逻点通过纸质签到即可,换成线上后,可能是扫码也可能是NFC近场检测,整个流程都会被颠覆、重塑。因此全新的流程理应跟业务专家、一线的代码员工沟通确认清楚再落地,那样对后续的推广都更为便利,反对的声音也自然更少。


细心的你可能还会发现,这里的(标准)被括弧括起来了,这表示流程的标准化是非常重要的,尤其对于上了规模的公司,如果同一性质的业务单元同一个作业流程完全不同,那将流程统一为一套标准就已经是生产效率的极大提升。但标准又不是必须的,如果公司的规模小,那标准化的工作可能并不是必须的,只针对流程做优化也是足够的,毕竟做流程的统一本身就非常费劲,而且在公司规模小、起步早期,过早统一标准也有可能束缚了业务单元自身的想象力。


那应该以什么样的标准来说明流程被优化了呢?目前主要是有两个,一个是能节省多少工时,另一个可以用最近比较流行的是否做到无纸化,前者是大部份老板都关注的可以节约的成本,后者除了成本的节约也可以更体验公司的社会责任与彰显社会形象,突显公司对节能减排方面的贡献。


第三步:智能化



如果说前两步的路径还尚算明确、既定,那智能化在大多数企业中还是在探索进行时。关于智能化我想到了个生动的形容:在智能化之前,信息系统是工具人士兵,使用者得思考、得指挥他们执行;在智能化之后,这些系统纷纷跃升为军师,可以给使用者出谋划策。


智能化的根基是数据。如果我们的终极目标是智能化,那么我们需要在智能化之前就要收集充分质量高的数据。收集充分,首先种类要是充分的,人员数据、销售数据、库存数据、生产数据等等,一切与业务相关的数据都可以收集。其次是对象要充分,一切可以被智能化所斌能的都可以收集数据,人员、设备、流程均可进行收集。质量高,可以通过标准化管理,建立数据质量控制体系,确保数据的准确性、完整性和一致性,需要的时候可以对数据进行校验和清洗,确保数据的准确性。


那收集的数据如何存放呢?一般而言,我们需要建立数据中台,整合公司各部门的数据源,实现数据的互联互通,减少重复工作,提高数据共享和利用效率。数据中台除了存储,还可以提供加工、计算等能力,给予业务系统更好的数据能力支撑。


当数据达到充分、标准、高质量的状态,数据便可以在以下这些场景给业务赋能:



  1. 数据驱动决策:通过数据分析,为企业的决策提供数据支持。例如,通过分析销售数据,预测未来的销售趋势,为生产、库存等部门提供决策依据。

  2. 个性化服务:通过智能化技术,实现服务的个性化定制。例如,通过分析客户的消费习惯和需求,提供定制化的产品和服务方案。

  3. 自动化生产:通过引入自动化生产线和机器人等设备,实现生产的自动化和智能化。例如,在汽车制造领域,引入自动化生产线代替传统的人工生产线,提高生产效率和产品质量。

  4. 智能化调度与优化:通过引入智能化调度系统,对生产和服务进行实时监控和优化。例如,通过分析生产数据和客户需求,动态调整生产和配送计划,提高效率和减少浪费。


综上所述,智能化需要数据作为基础,在数据之上构建智能化能力,并可以在不同的场景给业务提供数据决策、个性化服务、自动化生产、智能化调度与优化等能力。只有这样,才能让智能化真正成为企业发展的助推器。


总结


相信这篇文章能给初入数字化深水区的互联网人有比较清晰的实操脉络,也能避开不少坑。后续也会陆续出一系列关于数字化转型的关于产品思考、技术设计的系列文章,敬请期待!


作者:李CHENGXI
来源:juejin.cn/post/7298646156438765568
收起阅读 »

10年技术进阶路,让我明白了这3件事

这篇也是我分享里为数不多 “进阶” 与 “成长经历” 的文章之一。被别人送到嘴边的食物永远是最香的,但是咱们还是得学会主动去"如何找吃的",授人以鱼不如授人以渔嘛,我希望通过这篇文章能给正在努力的你,迷茫的你,焦虑的你,带来或多或少的参考、建议或者指引。 十年...
继续阅读 »

这篇也是我分享里为数不多 “进阶”“成长经历” 的文章之一。被别人送到嘴边的食物永远是最香的,但是咱们还是得学会主动去"如何找吃的",授人以鱼不如授人以渔嘛,我希望通过这篇文章能给正在努力的你,迷茫的你,焦虑的你,带来或多或少的参考、建议或者指引。


十年,谁来成就你?


  离开校园,一晃已十年,时日深久,现在我已成为程序员老鸟了,从软件工程师到系统架构师,从被管理者到部门负责人,每一段经历的艰辛,如今回忆仍历历在目。各位同行你们可能正在经历的迷茫,焦虑与取舍,我也都曾经历过。


  今天我打算跟大家分享下我这些年的一个成长经历,以此篇文章为我十年的职业历程画上一个完满的句号。这篇文章虽说不是什么“绝世武功”秘籍,更没法在短时间内把我十年的“功力”全部分享于你。篇幅受限,今天我会结合过往种种挑重点说一说,大家看的过程中,记住抓重点、捋框架思路就行了。希望在茫茫人海之中,能够给到正在努力的你或多或少的帮助,亦或启发与思考。


试问,你的核心竞争力在哪?


  你曾经是否怕被新人卷或者代替?如果怕、担忧、焦虑,我可以很负责任地告诉你,那是因为你的核心竞争力还不够!这话并不好听,但,确是实在话。认清现状,踏实走好当下就行,谁能一开始或者没破茧成蝶时就一下子有所成就。


  实质上,可以这么说,经验才是我们职场老鸟的优势。 但是,经验并不是把同一件事用同一种方式重复做多少年,而是把咱们过往那么多年头的实践经验,还有被验证的理论,梳理成属于自己的知识体系,建立一套自己的思维模式,从而提升咱们的核心竞争力。


    核心竞争力的形成,并非一蹴而就,我们因为积累所以专业,因为专业所以自信,因为自信所以才有底气。积累、专业、自信、底气之间的关系,密不可分。


核心竞争力,祭出三板斧


  道理咱们都懂,能不能来点实在的?行!每当身边朋友或者后辈们,希望我给他们传授一些“功力”时,我都会给出这样的三个建议:



  1. 多面试,验本事。

  2. 写博客,而且要坚持写。

  3. 拥有自己的 Github 项目。 



  其中,博客内容和 Github 项目,将会成为咱们求职道路上的门面,这两者也是实实在在记录你曾经的输出,是非常有力有价值的证明。此外,面试官可以通过咱们的博客和 Github,在短时间内快速地了解你的能力水平等。或许你没有足够吸引、打动人的企业背景,也没有过硬的学历。但!必须有不逊于前两者的作品跟经历。


  再说说面试,我认为,它是我们接受市场与社会检验的一种有效方式。归根结底,咱们所付出的一切,都是为了日后在职业发展上走得越来越好。有朋友会说,面试官看这俩“门面”几率不大,没错,从我多年的求职经历来看,愿意看我作品的面试官也只占了 30%。


  但是,谁又能预判到会不会遇到个好机会呢?有准备,总比啥也没有强,千里马的亮点是留给赏识它的伯乐去发现的


PS:拥有自己 Github 项目与写博,都属于一种输出的方式,本文就以写博作为重点分享。写博与面试会在下文继续展开。


记忆与思考,经验与思维


  武器(三板斧)咱们已经有了,少了“内功心法”也不行。这里分享下我的一些观点,也便于大家后续能够更好地参与到具体的实践中。




  • 记忆——记忆如同对象一样是具有生命周期,久了不用就会被回收(忘记)。




  • 思考——做任何事情就如同咱们写代码Function一样,得有输入同时也得有输出,输入与输出之间还得有执行。






  •  




  日常工作中,就拿架构设计当例子。作为架构师是需要针对现有的问题场景提出解决方案,作为架构师的思考输入是业务场景、团队成员、技术选型等,而它的输出就是基于前面的多种输入参数从而产出的短期或长期的解决方案,而且最终会以文档形式保存下来。


  保存下来的目的,是为方便我们日后检索、回忆、复用。因此,在业余学习中同理,给与我们的输入是书籍、网络的资料或同行的传递等,而作为输出则是咱们记录下来的笔记、博客甚至是 Github 的项目 Demo。



基于上述,我们需要深刻意识到心法三要素:



  1. 带着明确的输出目的,才会真正地促进自己的思考。蜻蜓点水、泛泛而谈,是无法让自己形成对事物的独特见解和具象化输出,长期如此,并无良益。

  2. 只有尽可能通过深度思考过后的产出,才能够形成属于自己真正的经验。

  3. 知识的点与点之间建立联系,构成明晰的知识体系,经验与经验则形成了自己独有的思维模式。


多面试,验本事


  既然“武器”和“内功心法”咱们都有了,那么接下来得开始练“外功”了,而这一招叫"多面试,验本事"。


  我身边的同行与朋友,对我的面试行为感到奇怪:你每隔一段时间就去面试,有时拿到了 offer 还挺不错的,但是又没见想着跳槽,这是为何?


风平浪静,居安思危


  回应这个疑问之前,我想反问大家 4 个问题:



  1. 是否曾遇到过在一家公司呆了太久过于安逸,也阶段性想过离开,发现真要走可却没了跳槽的勇气?

  2. 再想一想,日子一久,你们是不是就不清楚行业与市场上,对人才能力的需求了?

  3. 是否有经历过公司意外裁员,你在找工作的时段里有没有强烈感受到那种焦虑、无助?

  4. 是否对来之不易的 offer,纠结不知道如何抉择,又或者,最终因为迫于各方面压力,勉为其难接受了不太中意的那个?



  刚提到的种种问题,那份焦虑、无助、纠结与妥协,我曾经在职场都经历过。我们想象一下,如果你现在随随便便出去面试五个公司能拿到三四个 offer,你还会有那失业的焦虑么?如果现在拿到的那几个 offer 正好都不喜欢,你全部放弃了,难道你会愁后续没有其他机会了么?显然不会!因为你有了更多底气和信心


  我再三思考,还是觉得有必要给大家分享一个我的真实经历。希望或多或少可以给你一点启发:


  2019 年,因为 A 公司业务原因,我离开了工作 3 年的安逸的环境,市场对人才的需求我已经是模糊的了,当我真正面临时,我焦虑、我无助。幸好曾经跟我合作过的老领导注意到了这我这些年的成长,向我施予援手。入职 B 公司后,我重新审视自己,并给与自己定了个计划——每半年选一批公司面试。


一年以后,因为 B 公司因疫情原因,我再次离职。这次,我没有了焦虑,取而代之的是自信与底气,裸辞在家开始了我的休假计划。在整个休假期,我拒绝了两个满足我的高薪 offer,期间我接了个技术顾问的兼职,剩余时间把以前囤下来的书看了个遍,并实践了平常没触碰到的技术盲区。三个月后,我带着饱满的精神面貌再次"出山",入职了现在这家公司。


  有人会问:你现在还有没有坚持自己的面试计划?毫无避讳回答:有!仍然是半年一次。


乘风破浪,未雨绸缪


  就前面这些问题、情况,这里结合我自己多年来的一些经验,也希望给到大家一点破局建议:保持一定的面试频率,就如上文提到的“三板斧”,面试是接受市场与社会检验,非常直接、快速、有效的一种好方式。 当然,我可不是怂恿你频繁跳槽,没有多少公司能够欣然接受不稳定的员工,特别是岗位越做越高时。


  看到这里,有些伙伴可能会想,我现在稳稳当当的、好端端的,干嘛要去面试,何必折腾自己。假若你在体制内,我这点建议或许参考意义不大。抛开体制内的讨论,大家认为真的有所谓的“稳定”的工作吗?


  我认为所谓的“稳定”,都是只是暂时的,甚至虚幻的,没有任何的人、资本、企业能给你实打实的承诺,唯一能让你“稳定”持续发展下去的,只有你的能力与眼界、格局等。


  疫情也有几年了,相信大家也有了更多思考,工作上,副业上等等各方面吧。人无远虑,必有近忧,未雨绸缪,实属必要!



放平心态,查缺补漏


  面试是相对“主观的”,这是因为“人性”的存在,你可能会听过让人哭笑不得的拒绝你的理由:



  • 连这么基础的知识都回答不上,还想应聘这岗位

  • 你的性格并不适合当管理,过于主动对团队不好


  咱们先抛开这观点的对与错。人无完人,每个人都有自己的优点与缺点,甚至你的优点可能是你的缺点。职场长路漫漫,要是把每一次的面试都当成人生中胜负的较量,那咱们最后可能会输的体无完肤。咱们付出任何的努力,也只是单纯提高“成功率”而已。听我一句劝,放平心态,以沟通交流为主,查漏补缺为辅


  近几年我以面架构师和负责人的岗位为主,面试官大多数喜欢问思想和方法论这类的问题,他们拥有不同的细节的侧重点,因此我们以梳理这些“公共”的点出发,事后复盘自己回答的完整性与逻辑性,对于含糊不清的及时找资料补全清晰,尝试模拟当时回答的场景。每一段面试,如此反复。


  作为技术人我建议,除了会干,还得会说,我们不仅有硬实力,还得有软技能。


PS:篇幅有限,具体面试经历就不展开了,如果大家对具体的面试经历感兴趣,有机会我给大家来一篇多年的"面经"。


持续进步


编程语言本身在不断进步,对于菜鸟开发者来说,需要较高的学习成本。但低代码平台天然就具备全栈开发能力,低代码程序员天然就是全栈程序员。


这里非常推荐大家试试JNPF快速开发平台,依托的是低代码开发技术原理,因此区别于传统开发交付周期长、二次开发难、技术门槛高的痛点,在JNPF后台提供了丰富的解决方案和功能模块,大部分的应用搭建都是通过拖拽控件实现,简单易上手,在JNPF搭建使用OA系统,工作响应速度更快。可一站式搭建生产管理系统、项目管理系统、进销存管理系统、OA办公系统、人事财务等等。


开源链接:http://www.yinmaisoft.com/?from=jueji…


狠下心来,坚持到底


锲而舍之,朽木不折;锲而不舍,金石可镂——荀况


  要是把"多面试"比喻成以"攻"为主的招式,而"写博客"则是以"守"为主的绝招。


  回头看,今年,是我写博客的第八个年头了,虽说写博频率不高,但整体时间跨度还是挺大的。至今我还记得我写博客的初心,用博客记录我的学习笔记,同时抛砖引玉,跟同行来个思维上的碰撞。


  随着工作年限的增长,我写博客的内容慢慢从学习笔记变成了实战记录,也越来越倾向于输出经验总结和实践心得。实质上,都是在传达我的观点与见解。


  而这,至关重要。反过来看,后面机会来了,平台联系人也可以借此快速评估、判断这人会不会讲、能不能讲,讲得怎么样,成的话,人家也就快速联系咱了。进一步讲,每一次,于个人而言,都是好机会。



写博第一步,从记笔记开始


  我相信不少的同行曾经面临这样的境况,都有产生过写博客的念头,有些始终没有迈出第一步,有些中途停了下来,这里可能有不少的原因:要么不知道写什么、要么觉得写了也没人看、还有一种是想写但是比较懒等等。


我觉得,一切的学习,前期都是从模仿开始的 学习笔记,它就是很好的便于着手的一种最佳方式。相信大家在学生年代或多或少都写过日记,就算是以流水账的方式输出,博客也可以作为非常好的开启平台。


  由于在写博客的时候,潜意识里会认为写出来的东西会给更多人看,因此自己写的内容在不明确的地方都会去找资料再三确认,这是很有效的一种督促方法。确认的过程中,也会找到许多相关的知识点,自然而然就会进一步补充、完善、丰富我们自己原有或现在的知识体系


幸运,需要自己争取


  在写博客的这段时间里,除了梳理自己的知识体系之外,还能结交了一些拥有共同目标的同行,我想,这就是真正的志同道合吧。


  甚至在你的博客质量达到了一定程度——有深度与广度,会有一些意象不到的额外小收获。例如有一些兼职找到自己,各大社区平台会邀请自己合作,也会收到成就证明与礼物等等。



意外地成为了讲师


  到目前为止,正式作为讲师或者是技术顾问,以这样不同于往常的既有角色,我真切地经历了几次。虽次数不多,但每一次过后,即便时日深久,可现在回想起来,于我的成长而言,那都是一次又一次新的蜕变,真实而猛烈,且带给我一次次新生力量。


  话说回来,前面提到几次分享,有的伙伴可能会说了,这本来就性格好又爱分享的人,个例罢了,不一定适合大多数啊。说到这儿,我想,我有必要简短地跟你聊一下我自己。


跌跌撞撞,逆水行舟


  对于过往的自己,我的评价是从小就闷骚、内向的那种性格,只要在人多的时候发言就会慌会怂会紧张,自己越慌就越容易表达出错,如此恶性循环。随着我写博的篇幅越多,慢慢地我发现自己讲话时喜欢准备与思考,想好了再去表达,又慢慢地讲话就具有条理性与逻辑性了。


  当代著名哲学家陈嘉映先生,他曾在一本书里说过这样一句话,放到这里再合适不过了—— "成长无时无刻不是在克服某些与生俱来的感觉和欲望"


  回头看,一路走来,我从最初的摸索、探索、琢磨,到看到细微变化,到明显感知到更大层面的进步,再到后来的游刃有余,输出很有见地的思考,分享独到观点。


  我想,这背后,离不开一次次尝试,一次次给自己机会,一次次认真、负责地探索突破自己。其实,大多数人,还真是这么跌跌撞撞挺过来的。


伺机而动,用心准备


  2020 年,我第一次被某企业找到邀请我作为技术顾问是通过我的博客,这一次算是小试牛刀,主要以线上回答问题、交流为主。因为事先收集好了需要讨论的话题与问题,整个沟通持续了两个小时,最终也得到了对方老板的高度认可。


  此事过后,我重新审视了自己,虽然我口才并不突出,但是我基于过往积累的丰富经验与知识融合,并能够正确无误地传达输出给对方,我认为是合格的了。坦率来讲,从那之后我不再怀疑自己的表达能力。同时有另外一件事件更值得重视,基于让自己得到更多更广泛的一个关注,思前想后,概括来讲,我还是觉得落到这句话上更合适,就是:建立个人 IP


建立个人 IP


  那么,我希望打造个人 IP 的原因是什么呢?希望或多或少也可以给你提供一点可供借鉴、探讨的方向。


  我个人而言,侧重这样几个层面吧。



  1. 破局: 一个是我希望打破 35 岁魔咒,这本质上是想平稳快速度过职业发展瓶颈期;

  2. 觅友: 希望结识到拥有同样目标的同行,深度交流,构建技术圈人脉资源网;

  3. 动力 从中获取更多与工作不一样的成就感。有了强驱动力,也会使我在分享这条路上变得更坚定。


链接资源,提影响力


  在《人民的名义》里祁同伟说过一句话,咱们就是人情的社会。增加了人脉,就是增加自己的机会。当然前提是,咱们自己得需要有这个实力。


  建立个人 IP,最要提高知名度,而提知名度的主要方式是两种:写书、做讲师。后面我会展开讲,写书无疑是宣传自己的最好方式之一,但整个过程不容易,周期比较长。作为写书的简化版,我们写博客就是一种捷径了。


主动出击,勿失良机


  而作为讲师,线上线下各类形式参与各种社区峰会露脸,这也是一种方式。不过这种一般会设有门槛。


  这里不得不多提一句,就是建立 IP 它是一个循序渐进的过程,欲速则不达,任何时候咱们都得靠内容作品来说话, 当你输出的质量够了,自然而然社区人员、企业就会找到你,机会顺理成章来了。反过来讲,我们也得常盯着,或者说多留心关注业内各平台的内容风格,利用好业余零碎时间,好好梳理下某个感兴趣的内容平台,看看他们到底都倾向于打造什么样的东西。做到知己知彼,很重要。


  我认识的一个前辈,之前阿里的,他非常乐于在博客上分享自己的经验与见解,随着他分享的干货越多,博客影响力越大,某内容付费平台找到他合作出了个专栏,随着专栏的完结,他基于专栏内容又出了一本书,而现在的他已经离开了阿里,成为了自由职业者。


追求成就感,倒逼突破自我


  每一次写博客、做讲师,都能更大程度上填满我内心深处的空洞,或许是每一个支持我的留言与点赞,或许是每一节分享停顿间的掌声。如果我们抱着非常强的目的去做的时候,可能会事与愿违。就以我做讲师来说,因为我是一个新手,在前期资料准备所花费的精力与时间跟后续的课酬是不成正比的。


  作为动力源,当时我会把侧重点放到结交同行上,同时利用“费曼学习法”重新梳理知识,另外寻找机会突破自己的能力上限。



  大家有没有想过,讲课最终受益者的是谁?有些朋友会回答“双方”。但是我很负责任地告诉你,作者、讲师自己才是最大的知识受益者。


  如前面所讲,写博客为了更好地分享出更具价值性的内容,为保证专业性,咱们得再三确认不明确的点,而讲课基于写博客的基础上,还得以听众的角度,去思考、衡量、迭代,看看怎么让人家更好地理解、吸收、用得上这些知识点,甚至讲师得需要提前模拟、预估可能会在课后被提的问题。


这里总结一下,写博客与讲课的方式完全不同,因为博客是以图、文、表的方式展现,读者看不明白可以回头去看,但是讲课则没有回头路,是一环套一环的,所以梳理知识线的连贯性要求更强


  我个人认为,日常工作大多数是重复的、枯燥的,或者说,任何兴趣成了职业,那将不再是兴趣,或许只有在业余的时候获取那些许的成就感,才会重新燃起自己的那一份初心 ——行之于途而应于心。


源不深而望流之远,根不固而求木之长


  求木之长者,必固其根本;欲流之远者,必浚其源泉——魏徵


  有些同行或许会问:”打铁还需自身硬“这道理咱们都懂,成长进阶都离不开学习,但这要是天天写 BUG 的哪来那么多时间学?究竟学习的方向该怎么走呢?在这里分享下我的实际做法,以及一些切身的个人体会,希望可以提供一点借鉴、参考。


零碎时间,稳中求进


  6 年前,我确定往系统架构师这个目标发展的时候,每天都会做这么两件事:碎片化时间学习,及时产出笔记。



  • 上班通勤与中午休息,我会充分利用这些碎片时间(各 30 分钟)尽可能地学习与吸收知识,每天坚持一小时的积累,积少成多,两年后你会发现,效果非常可观,这就是一个量变到质变的过程


  而且有神经科学相关表明,”间歇式模块化学习的效果最佳,通勤路上就是实践这种模式的理想世界。“大家也可以多试试看。当然,一开始你学习某个领域的知识,可能效率没那么高,我建议你可以反复地把某一节掰开了揉碎了看或者听,直到看明白听懂了为止,接着得怎么做?如我前面说,咱们得要有输出!


  看过这样一段话,”写和想是不同的,书写本身就是逻辑推演和信息梳理的过程。“而且,研究表明,”人的记忆力会在 17-24 岁达到高峰,25 岁之后会下降,理解力的发展曲线会延后 5 年,也就是说在 30 岁之后也会下降。“


  你看,这个也直接或者间接告诉我们,还是趁早多做记录、多学习。文字也好,视频也罢,到底啥形式不重要,适合自己能长久坚持的就行,我相信你一定能从中受益。毕竟,这些累积的,可都是你自己实实在在的经验和思考沉淀!


  话说回来,其实做笔记能花多长时间,就算在工作时间花半小时也有良效,而这时间并不会对自己的工作进度造成多么大的影响,但!一定时日深久,受益良多。


构建知识 体系 丰富 思维 模式


  由于我们日常需要快速解决技术难题,很多时候从外界吸收到的知识点相对来说很零散,而知识体系是由点、线、面、体四个维度构造而成的


  那怎么做能够快速把知识串联起来呢?这里我举个简单的例子,方便大家理解。


  以我们系统性能调优出发,首先我们需要了解系统相关性能瓶颈的业务场景是什么?该功能是 I/O 密集型还是 CPU 密集型?如果是 I/O 密集型多数的性能瓶颈在数据库,这个时候我们就得了解数据库瓶颈的原因,究竟是数据量大还是压力大?如果是数据量大,基于现有的业务场景应该选择数据归档、临时表还是分库分表,这之间的方案优缺点有什么不同?适用场景怎么样?假如是数据压力大了,我们是否能用 Redis 做缓存抗压就行?


  再接着从 Redis 这个点继续思考,假如 Redis 内存满了会怎样?我们又了解到了 Redis 的内存淘汰策略,设置了 volatile-lru 策略,由于我们基本功扎实回忆起 LUR 算法是基于链表的数据结构,虽然链表的写的时间复杂度是 O(1),但是读是 O(n),不过我们得先读后写,所以为了高性能又选择 Hash 这种 O(1)的数据结构辅助读的处理。


  你看,我们是不是从问题出发到架构设计,再从数据库优化方案到 Redis 的使用,最后到数据结构,这一些系统的知识就串联起来了?



作者:雾岛听风来
来源:juejin.cn/post/7246593325935493178
收起阅读 »

人生天地之间,若白驹之过隙,忽然而已

人生天地之间,若白驹之过隙,忽然而已 这段时间有个同事离职了,其实身边不断有老人走、有新人来,但这回走的同事和别的有些不同,当时我入职面试的时候就是他面试的我,工作中有啥问题都会请教他,转眼间一起共事三年多,亦师亦友,忽然离去,心中不免有些不舍。 同事 其实自...
继续阅读 »

人生天地之间,若白驹之过隙,忽然而已


这段时间有个同事离职了,其实身边不断有老人走、有新人来,但这回走的同事和别的有些不同,当时我入职面试的时候就是他面试的我,工作中有啥问题都会请教他,转眼间一起共事三年多,亦师亦友,忽然离去,心中不免有些不舍。


同事


其实自从工作以来,我们每天接触最多的不是家人、朋友,而是同事,毕业几年来也认识了很多同事,有很多乐于助人、兢兢业业的,当然不乏一些泛泛之辈。


对于我个人而言,一般和同事都保持不错的一个状态,但如果问我同事间的关系如何相处,那我肯定告诉你:点头之交即可,不要想着你和同事怎么怎么好,转过头来就有可能把你给卖了,这台正常不过了,除非特别熟,不然尽量别说别的。


朋友


已经很久没和朋友好好聊天,吃个饭了,工作以来虽说是双休,但周末一直有事,即使没事,也只想躺在床上躺会,早上晚起一会,起来弄点饭吃完就中午了,又想再睡会,因为在公司里没有午休的习惯,一觉起来就不早了,出去溜达溜达就到晚上了,时间、时间都去哪了,都用来睡觉、吃饭。。。。


记得高中、大学,认识不少同学,但真正从自己内心算作朋友的,其实少之又少。


高中时同宿舍、同学都在一起玩,我以为他们是我的朋友,所以即使高中毕业了,每次回到家都联系着之前同宿舍的一块出来聚一聚,第一年还出来了,之后不是这个有事就是那个有事,或许是真的有事,亦或许不想和我聚一聚,还或许根本没人把你当成朋友。


大学更是这样,大学认识的朋友屈指可数。


其实有时想想,可能并不是别人的问题,是我自己的问题。但转念想想:”人生天地之间,若白驹之过隙,忽然而已“,想那么多干啥?古人曾说:”人生得一知己足矣“,况且我还有朋友呢!


家人


其实自从上小学开始,和家人在一起的时间就没有多少了,上大学后,一年到头也见不了几次,工作后更甚。


尽力对家人好点吧,多打打电话、多打打视频,现在的技术发达,视频通话可以直接看到对方,非常方便,家人最想要的就是在外漂泊的自己能过得好一点。


瞎写


转眼间毕业工作也好几年了,自我感觉技术上没有特别巨大的提升,但是技术厚度及深度较前几年有了不小的提升,也算是一些收获。


此文因一亦师亦友的大哥离职后产生的一些瞎想,希望大哥在新的城市里顺风顺水,未来更好吧!也希望自己能够不忘初心,在技术上更上一层楼。


努力,共勉


作者:Zhujiang
来源:juejin.cn/post/7265609829091557433
收起阅读 »

Leader:组织面对不确定性的压舱石

今天来跟大家分享一下Leader在一个团队里面到底起着什么样的作用?有一个最为简单的说法,Leader就是把整个组织的所有人通过文化规则和流程组织起来,能够顺利的完成一件或者多件重要的事情的角色。 组织的流程化 我们知道,组织越大事情和人就越多,为了组织好这...
继续阅读 »

今天来跟大家分享一下Leader在一个团队里面到底起着什么样的作用?有一个最为简单的说法,Leader就是把整个组织的所有人通过文化规则和流程组织起来,能够顺利的完成一件或者多件重要的事情的角色。



组织的流程化


我们知道,组织越大事情和人就越多,为了组织好这些人和事,一个组织往往就伴随着有各种各样的标准化流程,又称之为SOP。这个也不难理解,动辄几千上万员工的组织,如果连流程都没有,混乱一团,那可想而知会是一个巨大的灾难,在沟通和协同上面就会耗费大量的成本。


所以相对稳定的公司或者规模越大的公司,它的流程就会越多,这往往导致在做一个事情的时候,进行决策的时间也会更长。流程在一定程度上是解决了很多混乱的问题,但是流程本身也会带来效率低下的问题。但是总体而言,没有流程会造成更大的问题。


那是不是在建立起了流程以后就高枕无忧了呢?如果流程非常完善的情况,Leader又只是把流程做一个管理和编排和组织,那么Leader的价值基本上体现不出来,这种流程极度完善的情况下,那么还要Leader干什么呢?因此我们当代追求的Leader不仅仅是维护和管理这些流程和员工,而应该是企业在对面不确定性事情的法宝。


核心一句话就是Leader是公司面向不确定的事情的压舱石。


面向不确定性的未来


大型组织在流程在规章制度已经比较完善的情况,很多事情员工只要按流程走就可以了,但是我们知道如果一个组织通过流程就能处理所有的事情,那我相信这应该是一个极度老化、极度传统的公司,这种公司已经没有了任何的创造力,所有员工只是机械的去执行公司的命令和流程而已。没有创造性的公司,能面对千变万化的市场吗?


一个不需要公司里面的任何人都有创造力的组织,我相信本身组织就没有创新力。这种组织可能就是非常传统的国有企业,每个人不要有创造力,你只要完成你所要处理的工作就可以了,那这种情况下也只有垄断组织才能做得到,民营企业和国际化的企业是不可能能够实现的,一招鲜吃遍天,在当前这个时代已经不存在了。


所以我认为只有灵活的能够处理不确定的业务,不确定的事情的团队和公司才有成长和逆袭的可能性。因为市场是变化的,客户也是变化的,不可能所有的东西一成不变,用一套服务,一套标准,一套产品就能够解决客户永远的问题的时代早已经一去不复返了。不确定才是当前社会的主旋律,只有一个组织能够尽快的满足变化的需求,才能够拿得出最好最新的产品,才能赢得客户。



那些不确定的事情谁来负责比较合适呢?首先作为整个公司的负责人、一把手、CEO理应是去处理市面上的变化最好的任选,但是不可能所有的变化全部由负责人一个人来处理。这些负责人只能说把握五年,十年的趋势,从这些变化的趋势里面找到确定性的方向来组织和施公司的战略。那不可能所有鸡毛蒜皮,每个分公司,每个分部门,每个普通产品线的业务,如果都要负责人来解决的话,那么这个公司直接在负责人这个层面上面就先崩溃了,比如阿里巴巴而言面对几亿的用户、几千万的商家和合作方、几十万的员工,如果都要负责人亲力亲为,这是完全不现实的。


那能否让一线的员工来处理呢?这个听起来非常美好,每个员工都是公司一份子,理应去接受市场上面的变化,但想想也是不大现实的,因为对于基层一些员工来说,他们往往只有执行的权利,而没有对于很多不确定的情况下的判断的权利。而且很多基层员工由于工作的时间不久,对整个公司的了解也不是特别深,所以往往就算给了他权限,他也没办法能够处理好这些不确定的事情,权限过大反而有可能做出错误的事情。


那公司谁是处理这些不确定的事情里面最好的对象呢?答案就是每一位Leader,也就是每一个层面上不同的Leader,比如财务Leader、业务Leader、销售Leader和技术Leader等等。


一方面公司里面的Leader是整个公司的最核心的节点,他们能够接触到各种各样从上到下的信息,另外由于大量的Leader也是基础一线的负责人,所以往往对于前线的客户需求感知非常的强烈。所以现在的Leader往往是最能够洞察到前线客户需求变化的人,同时也因为Leader一般都有实际执行的权利,通常来说Leader往往在不同规模和不同层面上都有一定的决策权,因此可以快速的组织团队去应对客户需求和市场上的变化。


这个才是Leader最核心的意义,就是要组织小团队去处理这些不确定性的事情和风险,从而给团队,给公司,给业务带来巨大的增量价值。


Leader是不确定性的压舱石


这也是为什么说Leader是整个公司面对不确定性的事情的压舱石,只有整个公司的一线Leader都具备了这样的能力,整个组织才是一个具备有活力的组织,是能够迎接创新和拥抱变化的组织。


这种模式仿佛就是一个动车组一样,每个团队就犹如一起车厢,每个车厢都有自己独特的动力闭环,能够快速的迎接变化,快速的可拆卸组装,而且能够快速的在整个更高层战略的情况下实现更灵活的组合,以应对更大的确定性,以解决更难的问题。


从一些具体的层面上来说,当较大的业务系统发生了比较大的故障的时候,客户有强烈的投诉情绪,这个时候对于一线的开发同学来说,他很难能够确定到底是什么系统引起的,这个时候就需要团队的Leader作为第一业务的接口人来跟进和负责整个事情,从而使得各个团队之间不会相互推诿。所以一旦面对一些不确定性的问题的情况下,在一线同学无法判断问题是什么样根源、什么样的上下游以及什么样的背景的情况下,Leader就是处理问题最好的应急指挥人。


我们的线上有客户提出了大量的需求的时候,我们一些同学往往没有权利去决策是否能支持这个需求。或者有流程可以让一线同学会把这个问题层层上交,一直提交到最高层来审批为止,而往往由于这样流程上的阻碍或者麻烦,所以同学就不愿意去花费这么大的精力向更高层去建议到底要做什么样的东西,大部分员工干脆就不会去提这个建议,直接当这个事情没发生就行了。


有很多非常大的公司往往会倒闭,就是因为适应不了市场上面的变化,当整个市场都发生了很大的变化的时候,这些高层往往感觉不到发生了变化,而很多时候一线的员工往往已经意识到了这些敏锐的变化,但是各种各样的机制,一线员工无法高层传递建议,进而导致了整个公司在面对极大的变化的情况下的话无法应变而轰然倒塌,诺基亚就是一个非常鲜活的例子。


而作为一线的Leader,往往就能够敏锐的去捕获这些信息,而且在整个公司制度流程比较有保障的情况下的话,也能够放权给一线Leader快速做出决策,或者把这些问题快速的反馈给更高层的领导。


比如我在公司的时候就经常去和客户进行共创,就会经常被客户问到我们为什么PC上面还没有定制工作台的能力,而那个时候我们在2018年就有了移动端的能力,但是由于战略方向的问题,我们迟迟没有在PC上面去补足这个短板,进而反复被竞争对手攻击。我接收到了大量的来自于一线客户的反馈,我才做了一个决策帮助整个公司补足了在这一个产品上的短板,进而吸引到大量的增量客户,不仅创造了客户的活跃价值,还创造了商业化的价值。这就是Leader在足够授权下能替组织带来的增量贡献,而远远非整个团队坐等事情发生更有价值。


所以总结一下,各种公司在当今的社会都会面临各种各样的挑战和不确定性。一个公司如何来应对这些挑战和不确定确定性的能力就就决定了这个公司的命运。而面对这些不确定的核心就在于我们组织里面的关键的Leader节点,只有当Leader带领团队主动去拥抱和解决不确定性,才能给组织带来活力,重塑组织的命运。



因此一个公司想要发展的好,就一定要授权给所有听见炮火,两腿带泥的Leader,并且要构建出信任的文化和价值感让Leader带领团队能够以最好的姿态去面对和拥抱不确定性。


作者:ali老蒋
来源:juejin.cn/post/7298635806475026468
收起阅读 »

马斯克接手Twitter一年后的成果-工作量化的重要性

马斯克接手Twitter的一年后,在10.27其官方团队发布了一条推文展示这一年的工程成果。 有点国内那味了,论工作量化的重要性。 这一年里,我们在工程技术上取得了许多出色的成就,除了大家在应用中看到的明显变化之外,在幕后我们还做了一系列重要的优化和改进。...
继续阅读 »

马斯克接手Twitter的一年后,在10.27其官方团队发布了一条推文展示这一年的工程成果。



有点国内那味了,论工作量化的重要性。



这一年里,我们在工程技术上取得了许多出色的成就,除了大家在应用中看到的明显变化之外,在幕后我们还做了一系列重要的优化和改进。




  • 将「为你推荐」、「关注」、「搜索」、「个人主页」、「列表」、「社区」和「探索」等功能的技术栈整合到了一个统一的产品框架中。




  • 彻底重建了「为你推荐」的服务和排名系统,代码行数从700K减少到70k,减少了90%;同时计算资源减少了50%,处理相同请求的能力提升了80%。




  • 统一了「为你推荐」和视频的个性化、排名模型,显著提高了视频推荐质量。




  • 重构了API中间层的架构,删除了超过10万行代码和数千个未使用的内部废弃接口,同时删除了一些没人用的客户端服务。




  • 将获取帖子元数据的时间减半,全局API超时错误减少90%。




  • 对外部机器人、爬虫的屏蔽,相比2022年,增长了37%。平均每天,阻止了超过100万次机器人注册,并将私信中的无用信息减少了95%。




  • 关闭了位于萨克拉门托的数据中心,重新调配了5200台机架和148000台服务器,每年为公司节约了超1亿美元,总的来说,节约了48兆瓦的电量,60000磅的网络机架。




  • 优化了对云服务厂商的使用,开始在本地进行更多的工作,这一转变使得每月的云服务成本降低60%,同时我们还将所有的媒体和大文件从云端迁出,减少了60%的云端存储空间,除此之外,还成功将云数据处理成本减少了75%。




  • 构建本地GPU超级计算集群,并设计、交付了43.2Tbps 的高性能网络架构。




  • 提升网络主干的容量和冗余性,每年节省1390万美元。




  • 开展了自动化峰值流量故障转移测试,以持续验证平台的可扩展性和可用性。




作者:云舒编程
来源:juejin.cn/post/7295397683397066762
收起阅读 »

【复盘】2023年写过的bug

前言 在默默的算着,2023年300多天的日子已经悄然无息的从我手中流走,还没来得及细细的品味,2023年即将逝去。在最近工作中,遇到了两个线上比较棘手的bug,今天,就对自己2023年写过的bug来个复盘吧 2023年写过的bug 截至今日,以下数据是202...
继续阅读 »

前言


在默默的算着,2023年300多天的日子已经悄然无息的从我手中流走,还没来得及细细的品味,2023年即将逝去。在最近工作中,遇到了两个线上比较棘手的bug,今天,就对自己2023年写过的bug来个复盘吧


2023年写过的bug


截至今日,以下数据是2023年每月我解决操作过的bug数据分布:


image.png
以上大多数是测试阶段的bug,个别是线上的。作为一个码农,自认为在提测前对自己写过的功能保持着一个比较负责任的心态,尽量保持高质量的提测。但,没有谁能保证不写 bug,不出错的。我们要做的,是在bug出现以后,找到问题的根源,解决问题,避免同类问题再次发生。


解决一线上纰漏bug流程复盘


1、bug现场


前几天公司为迎接双十一,搞满减满折活动促销,对全场商品(除个别商品)仅仅开启每满200-70的满减满折活动,收到反馈,个别商品列表活动的标签显示错误,列表有500个左右商品,大概5个左右商品标签差个每字


image.png


2、代码逻辑


后台创建满减满折活动时,会将哪些商品能参加这个活动具体的标签写入缓存中,C端查询商品列表时,会去商品查询缓存,查看这个商品正在参加的进行中的活动的标签返回给前端展示。由于后台满减活动的配置逻辑是我做的,标签也是我写入缓存的,看到这个反馈,我心中第一反应,满减活动创建添加商品标签的缓存逻辑代码有bug?


3、排查思路



  • 测试环境创建一个满减满折活动,看是否个别商品满减标签显示错误,发现没有问题,复现失败

  • 让测试协助,是否测试环境能否复现此bug,测试也无法复现

  • 由于这块我没有特意代码补充日志,公司框架也没有全局去拦截请求的入参,靠日志排查之路走不通

  • 怀疑是否还开启了别的活动,商品是否还参与别的活动,冲突导致,查看数据库数据,发现目前仅仅就开启着这一个活动

  • 怀疑是否曾经开启过满200-70的活动,发现也没有开启过

  • 去看数据库500个左右的商品,5个标签错误的商品找出规律,没有发现

  • 活动创建,后编辑该了类型?发现活动创建成功后,也没有编辑过

  • 活动创建前端参数错误?回头着重去看我写的那块代码,再三斟酌,没有发现有问题,就算前端参数错误,为啥就那几个商品少了个每次,此路也不通

  • 想过并发,没有道理,因为创建活动就当时一个人操作

  • 想过很多人线上复现不了的bug最常见的解释,网络波动,我那也不应该,要么写入失败,不会写入成功,少一个字

  • 想过redis的缓存数据被人工手动改过?毕竟是线上的,不会随便改,也不应该,概率可以忽略

  • 既然C端的标签是从缓存拿去的,无奈我项目全局搜索所有用到设置商品缓存代码逻辑,一个个前后调用去看,最后给我看到了查询满减活动表,然后设置标签的代码,一步步定位最终最外层controller代码,才发现商品编辑那里有修改商品缓存的逻辑,只要涉及到商品编辑,那里会先删除这个商品的所有缓存,然后在添加缓存,由于那块组装商品标签逻辑和我创建活动添加标签逻辑不一致,少了一个类型判断导致


由于商品管理那块,我没有参与过需求的评审,开发、设计,所以从始至终排查问题都没有想到过那里会影响我做的满减满折活动的商品标签


4、问题解决


任何一个bug,能复现找到问题的根源就好解决,最棘手的时没有人能复现,又没有日志,完全去猜各种可能性


image.png


5、总结



  • 针对一些难以复现的bug或者遇到的技术问题 ,找到根本原因很重要

  • 要多了解业务,把各种变更造成的影响,要能提前预知到

  • 如果项目框架没有完善的全局日志记录,重要地方适当打印下日志


作者:千呼万唤始出来
来源:juejin.cn/post/7297917491795902476
收起阅读 »

程序员必看的几大定律,你中招了吗?

一 晕轮效应 我们通常会从局部信息形成一个完整的印象,根据最少量的情况对别人或其他事物做出全面的结论。 举个简单的例子,当你看到一个陌生美女的时候,你通常会认为对方长得这么好看,笑起来这么甜,肯定哪哪都好! 当你看到一位发量稀疏的开发老哥,你通常会觉得这位...
继续阅读 »

一 晕轮效应



我们通常会从局部信息形成一个完整的印象,根据最少量的情况对别人或其他事物做出全面的结论。



举个简单的例子,当你看到一个陌生美女的时候,你通常会认为对方长得这么好看,笑起来这么甜,肯定哪哪都好!


当你看到一位发量稀疏的开发老哥,你通常会觉得这位老哥技术能力肯定非常强,做人肯定也很靠谱!



在晕轮效应影响下,一个人或事物的优点或缺点一旦变为光圈被扩大,其缺点或优点也就隐退到光圈的背后,被别人视而不见了。



对于程序员来说,有两点可以考虑:




  1. 打造自己的光晕:让自己成为专家或者像个专家,可以提升自己的话语权。


    比如在掘金写文章,当你拥有几千粉丝,几十万阅读量的时候,即使你什么都不说,别人看到这个账号都会觉得你是个厉害人物,与你交流的时候都会注意几分。




  2. 突破别人的光晕:在我使用npm上各种组件或者工具的时候,常常会感慨,好厉害!这么多star的项目,肯定没有Bug吧,如果有,那一定是我用的方式不对!打开源码看的时候更是惊呼,好厉害,完全看不懂,也不可能看的懂吧?


    但其实,褪去这些光环,你会发现,即使是成熟的项目,也会有bug,高深的代码,也都只是一个个基础的语句组合起来的,当你理解了作者的思想,也就能理解代码。




二 眼不见为净定律



看不见的,就是干净的。



看到这个定律,我的第一反应就是,屎山代码为什么会存在?


还不是因为管理人员看不到这坨屎山,他看到的是一个功能正常运行的系统,所以人家并不觉得这是屎山,而是美丽的风景线!


只有我们这些天天在这座屎山上添砖加瓦的程序员才能会感受到这种绝望!


所以面对屎山代码,不要抱怨,最好的方法就是找个机会把这座屎山丢给其他人,毕竟眼不见为净嘛!


当它不在你手上的时候,你会发现其实它也挺好的,毕竟眼不见为净嘛!


三 虚假同感偏差


你们是否会遇到这种情况:明明一件很重要的事情,催了某个人很久了,他却迟迟未做!


这里就涉及到虚假同感偏差,因为这件事对你来说很重要,所以通常会自我推断,觉得别人也会认为这件事情很重要,然而事实上,对你很重要的事,对他人来说可能回过头就给忘记了!


所以啊,要让别人重视一件你觉得很重要的事情,就是也让他感觉到重要,这样别人就不敢忘记了,比如可以补充一句:某某领导正在关注这件事,麻烦尽快,谢谢!


另外就是当我们非常确信自己观点或意见的时候,也很容易产生虚假同感偏差,这时候如果有人提出不同的观点,我们会下意识的反驳,并且觉得问题来自于他人。


比如我们自信满满地写完一段代码并且自测之后,提交给测试人员进行测试,当测试人员跟你反馈存在某BUG,我相信第一时间反应大多都是:我不信!!!


然后就有以下对话:



你:可能前端有缓存,你刷新一下再试试?


测试:行,我试一下。


过了十分钟......


测试:还是一样的问题啊,你看一下。


你:是不是测试数据有问题啊,我自己都测试过了,不应该有问题!


测试:行吧,我再看看。


过了十分钟......


测试:数据都排查过了,是正常的,你检查一下吧!


你:(还想再挣扎一下)你怎么操作的?


测试:就点击一下这个按钮,我还能玩出什么花吗?


排查了一会,哦~居然是空值的情况没有判断,我还能再白痴一点吗!


你:问题已经修复了,是某某复杂的场景我没考虑清楚,你再测试一下!



四 自我宽恕定律



人性有个根深蒂固的特点,就是容易发现别人的缺点和错误,却不容易看到自己的不足。


正所谓,见人之过易,见己之过难。





  • 当看到别人的代码存在一个空指针异常,心里想:这都能忘记判断,其他代码会不会也有问题!




  • 当发现自己的代码存在一个空指针异常,心里想:只是不小心忘记判断了嘛,加一下就好了!




  • 当接手别人项目的时候:卧槽,这代码写的啥啊,注释没几句,变量命名这么奇葩,逻辑这么混乱,我要咋接啊!!




  • 当项目给别人接手时候:我这代码虽然注释不多,但是很规范的,你看这变量命名不就能知道是什么含义了嘛,逻辑也非常顺,这个方法几百行你按顺序看下来就行了,我都给你写在一起,不需要跳来跳去地看,多方便!




五 补偿作用:



弱点也是一种力量源!



大家应该都听说过这个现象:瞎子的眼睛虽然看不见了,听力通常会变得非常灵敏!


这种生理上的现象吸引了很多有兴趣的心理学家,所谓补偿,就是发挥一个人的最大优势,激发其自信心,抵消其弱点。


看到补偿机制,我第一想到的就是在掘金看到的各种专科大佬。


虽然学历起点比其他人低一些,但有时候正是因为学历劣势,更加激发他们深耕技术的决心,反而达到其他更高学历人员都无法达到的高度。


这又让我想起了一句话:打不倒我的,会让我更强大!!


六 皮尔斯定理



意识到无知,才是知道的开始。



还有一句话,我觉得很适合接在这句话后面:知道的越多,才发现自己不懂的越多!


于是就形成了一个闭环: 意识到无知->开始知道->知道的越多->意识到无知


这句话我相信大部分人都听过很多遍了,不知道你们是从什么时候开始意识到自己的无知呢?


曾经,我还是小白的时候,在福州某公司上班,每天做的事情就是SpringBoot接口的开发,或者修改某些业务逻辑,我以为这差不多就是开发的全部了。


那时候对接的前端是使用Vue写的,我甚至不知道什么是Vue,只知道是某个挺流行的前端技术。


每次部署,我看前端文件里就只有一个index.html文件,我真的非常奇怪,为什么这么大的项目,只有一个html文件?


那时候我对前端认知还停留在html+js+css+jquery的时代,所以完全想不通。


本来还觉得自己前端也是有点基础的,直到接触Vue,我才惊呼,卧槽,前端怎么变成这样子了?什么nodejs,什么npm完全没听说过。


用过一段时间之后,我更是惊呼,卧槽,前端还能这样子?明明我HTML+CSS+JS只懂一点,都能做出这么好看的页面了。


有了各种开源前端组件,即使对原生HTML标签和CSS不太懂,也能算是个还不错的前端开发了。


还有这ES6语法用起来也太爽了吧,比JAVA可自由太多了。


所以很感慨,当我没进入前端圈子的时候,还以为自己懂一些,进入之后,才发现自己真的是一窍不通,啥都要学。


更感慨的是,当我第一次接触掘金,我惊呼,卧槽,这个社区分享的东西都好干啊,好多听都没听过的标题,原来我有这么多东西都不懂!原来前端是个这么卷的领域!


结语


感谢阅读,希望本篇文章对你有所帮助!


作者:林劭敏
来源:juejin.cn/post/7295623585363771443
收起阅读 »