V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
V2EX  ›  xavierchow  ›  全部回复第 2 页 / 共 6 页
回复总数  119
1  2  3  4  5  6  
来个假设法,假设那天吃饭 D 也去了,本来 3 个人吃 54 的,人均不变的话 4 个人吃了 18 * 4 = 72 元, 如果这样的话啥都不用调整。但是 D 吃完后吐回去给餐厅了:)并和 ABC 说他要把 18 元充回去给餐厅,往卡里充的 18 元对应到优惠后的现金是 18 / 11 * 10 = 180 / 11 元。
因为要公平,充钱,花钱都是 4 人一起操作的,所以 D 找 ABC 每人收 180 / 11 / 4 ≈ 4.09 元
2024 年 6 月 16 日
回复了 k9990009 创建的主题 职场话题 工作上的疑惑,请教如何破局
> 技术只是工具,公司是业务驱动,技术没有话语权,需要让技术在公司变得重要,这个怎么做?
> 为团队争取了什么利益?
> 如何沟通,把想法传递过去,让老板接受去做一些业务上没多大收益,但是技术团队有收益的事?

三个问题有点关联,
业务驱动是没有错,技术在你们公司是可有可无的存在,还是负责落地的关键一环?如果没有技术你们公司也可以照样赚钱,那没什么话好说;否则的话,如果你想改变现状,可以让技术垮一次,不要去牺牲工作强度、挤压开发周期和流程去帮业务兜底,人教人教不会,事教人一次会。
老板要怪罪起来,你可以说主观上大家已经尽力了,但是客观条件(比如流程规范,时间规划等等)导致了事故频出,请管理层重视一下。另外你都会说业务比较复杂,原有的人又不敢动,也不用太怵老板换人。

总之,老板只有尝到苦头才会重视你们团队的诉求,你才有可能为团队争取利益。
2024 年 6 月 9 日
回复了 xiaotianhu 创建的主题 职场话题 工作多年以后,你们写复杂逻辑出的 Bug 还多吗
同意 12 楼,尽量不写复杂逻辑,if-else 也尽量少用,多用 composition 和 polymophism 。
编码层面可以尽量用抽象的思维隔离开通用和特殊的处理,
业务层面可以让产品经理或者架构设计师尽量把复杂逻辑捋清楚或者简化/统一化,最佳实践是拿着测试 case/code 和 产品对一对。
@bclerdx 另外法定的赔偿没有 N+2 这种,只有 N, N+1, 2N 三种,平时我们所的 N 是补偿金, +1 是 1 个月的代通知金。
协商解约我们这里不讨论,法定解约的话一般就是 N ,如果是合同到期前提前的话要加 1 个月代通知金。如果违法解约就是 2N 。
@bclerdx 项目绩效行不行并不能构成公司合法解约的唯一条件。《劳动合同法》第四十条第二款“劳动者不能胜任工作,经过培训或者调整工作岗位,仍不能胜任工作的” 的解约,对于公司来说是非常耗费资源和时间的,实体要件和程序要件缺一不可,大致流程如下,有一点没做好就可能导致违法解约,所以比较少的公司会选择走这条路线。

- 具有明确的岗位要求或岗位职责说明;
- 考核制度经民主程序制定且已经公示;
- 具有不能胜任工作的证据,一般是绩效考核结果;
- 实际履行培训或调岗程序;
- 具有经培训或调岗后仍不能胜任工作的证据,一般是二次考核结果;
- 将解约理由事先通知工会、听取工会意见;
- 作出正式的解约决定并向员工送达解约通知;
- 依法支付经济补偿金等。
2024 年 3 月 15 日
回复了 unt 创建的主题 程序员 Body 传参时,有没有必要将查询参数用一个字段包起来
> 但是我们最开始定的规范是一个 get 方法都不用,全部用 post 方法放 json 里,

不知道为什么一开始定这样的规范,与其自己去定义一套新的,还不如去使用已被详细讨论过并被严格定义的行业规范,比如 https://jsonapi.org/format/#fetching
2024 年 2 月 15 日
回复了 tlerbao 创建的主题 TypeScript 请教一个 Typescript 的问题
> http.get<ResultPage<SomeType>>("/test", params);
> 或
> http.get<ResultData<SomeType>>("/test", params);

这两个调用的参数一模一样,可以思考一下为什么你每次调用的时候知道该指定哪个返回类型?( ResultData VS ResultPage )
是不是其实 params 的类型是不一样的?
如果是的话,可以去定义 params 的类型,然后用 https://www.typescriptlang.org/docs/handbook/2/conditional-types.html , 大致思路就是用 param 的类型去确定响应的类型。

另一个方式就是你去定义 UnionType ,比如 Result = ResultData | ResultPage, 你只用写 http.get<Resutl> ...
然后在使用返回的响应值的地方,用 TypeGuard ( https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards )去 narrow down 具体的类型( ResultData VS ResultPage )
> 函数逻辑都想好了
> 但名字还没想出来

提供一个思路,我个人比较喜欢 top-down 的方式去写函数,而不是先去想逻辑。
即,先试图用一句话去描述这个函数是干什么的,可以不要管怎么实现( how ),
最好能在概括的时候思考一下函数的输入输出,只要你一句短语说的清楚的话,名字也就容易起了。

如果先去想逻辑和具体实现的话,很容易形成一个局面,就是你最后定义函数是为了包装一堆可能
原本不该在一个维度的逻辑代码,这时候取名字就很难了。

换句话说,发现函数难以起名的时候,可能要思考一下是不是应该转换一下思路,做一下拆解或者合并;
至于命名风格问题,各个语言和框架都有行业上比较成熟的惯例,加上 lint 就可以了。
2023 年 7 月 26 日
回复了 citrix 创建的主题 酷工作 [南京] [CSG Citrix XenServer] 热招 C++/C#/QA/PM 等技术岗位
不容易,国内用函数式做主力编程语言的公司真是屈指可数 👍🏼
2022 年 10 月 13 日
回复了 hsuyeung 创建的主题 程序员 单元测试问题请教
> 刚想了想,我感觉还是应该把“从 token 中获取用户信息”这一操作放到 api 层去处理,然后将用户信息或者其中某些字段作为参数传递到 service 中,service 只处理业务逻辑这样更好些。

对的,这就是写测试代码的好处,促使你重新思考分层 /解耦有么有做好,测试困难很可能代码设计就有坏味道了。
2022 年 10 月 5 日
回复了 lerefe 创建的主题 Java 请教关于函数式编程的优势
仅从题主的例子来说,
第 1 点不同是可读性,imperative VS declarative ,
第 2 点关于复杂度的担忧(循环),同样是函数式的写法可以用 fold / reduce, 另外尽量用 transducer ,看上去很多的 transformer 实际上也只是循环一次。(不清楚 java 是否有类似的东西,https://clojure.org/reference/transducers 是 clojure 在性能方面的考量和努力)
> 综上, 这个 store 是会在不同线程中批量或单独读取写入的, 那么, 有什么办法保证批量或单独读写的原子性吗?

不太清楚你这个 store 是什么,如果你有多个 node.js application 需要共享数据,最直接的就是把数据放在 database ( redis 也行)里,由 database 来保证原子性。
2022 年 9 月 21 日
回复了 tsingke 创建的主题 程序员 单元测试有落地效果好的团队吗?
我们从源头上抓起, 招聘的代码测试环节就有要求写测试代码,不写测试大概率是招不进来的。
进来后鼓励采用 TDD 方式开发,不写测试代码没人给 review PR ,就 merge 不回去主干分支,然后 CI 也会检查覆盖率。
之所以一直这么做,是团队真的获得了巨大收益(低缺陷率,低耦合模块结构,可以大胆重构 /加功能等等)
https://github.com/Wiredcraft/test-backend#functionality
这是个很好的问题,
我们定义 new 出来的子类实例 primaryStudent 为 p,
则 p.__proto__ === PrimaryStudent(class).prototype,
PrimaryStudent.prototype.__proto__ = Student(class).prototype.
这个是我们关于原型链的基本理解,不会有问题,题主的困惑在于为什么在 web console 中,p.__proto__ 会显示成 Student?

我在 node.js/chrome/safari 中分别尝试了一下,
1. 在 node.js 和 safari 中 p.__proto__ 为 "PrimaryStudent"
```
Welcome to Node.js v12.18.2.
Type ".help" for more information.
> class Student {
... constructor(name) {
..... this.name = name;
..... }
...
... helloStudent() {
... console.log('student');
... }
... }
undefined
>
> class PrimaryStudent extends Student {
... constructor(name, grade) {
..... super(name);
..... this.grade = grade;
..... }
...
... helloPrimaryStudent() {
... console.log('primarystudent');
... }
... }
undefined
> var p = new PrimaryStudent('john', 5)
undefined
> p.__proto__
PrimaryStudent {}
> PrimaryStudent.prototype
PrimaryStudent {}
>
```

2. 在 chrome 中, 如贴主所截图,p.__proto__为 "Student"
```
var p = new PrimaryStudent('john', 5)
p.__proto__
Student {constructor: ƒ, helloPrimaryStudent: ƒ}
constructor: class PrimaryStudent
helloPrimaryStudent: ƒ helloPrimaryStudent()
```

个人认为,其实在不同环境中,PrimaryStudent.prototype(即 p.__proto)还是同样的 object:{constructor: PrimaryStudent,prototype: Student.prototype}, 只不过在 node.js 和 safari 中,解释器用 constructor 来称呼这个 object,
在 chrome 中,它用 prototype 来称呼这个 object,不知道这个有没有回答到贴主的问题,
当然如有错误请各位指正。
2020 年 10 月 19 日
回复了 tiensonqin 创建的主题 酷工作 远程招聘 clojurescript 或者 Javascript 程序员
感觉是个 side project 呀,国内用 Clojurescript 的项目还是少啊
> 会写上一大堆的校验检查甚至是如果不存在就创建的代码

你需要明确你的模块的接口和职责,我猜测你的焦虑是由于对接口定义的不清晰, 另外不存在就创建很容易掩盖其他地方的错误,造成后期问题定位的更大问题。
可以看一下 [fail fast]( https://en.wikipedia.org/wiki/Fail-fast)。
另外你这些所谓的多余的代码有测试代码吗?能在测试环境跑过吗?不要去写不可测的代码,因为你不知道你所谓的多加的处理是否正确。(尽管你本意是让系统更 robust,但是增加复杂度和降低可读性来换取不知正确性的容错处理得不偿失)
2019 年 12 月 31 日
回复了 Immortal 创建的主题 程序员 大佬们,关于被开除的赔偿和离职流程有些疑问
这种仲裁一个准一个,基本上比较稳,现在还是劳动法还是比较保护劳动者的,我前前前东家因为社保缴纳问题被员工仲裁了,老板号称自己门路有多广都没用,上了仲裁还是乖乖赔偿。
https://xavierchow.github.io/talk_git_branch_model/#/
^这是我在公司推行 git flow 时的一个讲座的资料, 有图比较容易懂,希望能帮助到你。
@ooxiaoming 一般是 1~2 轮(视频)面试加线下任务测试,因为是国际化的团队,对英语还是有些要求的,起码读写不能有障碍。
1  2  3  4  5  6  
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1109 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 17:59 · PVG 01:59 · LAX 10:59 · JFK 13:59
♥ Do have faith in what you're doing.