写点什么

ARTS-WEEK3-23.8.28~23.9.2

作者:EchoZhou
  • 2023-09-01
    上海
  • 本文字数:2565 字

    阅读完需:约 8 分钟

ARTS-WEEK3-23.8.28~23.9.2

Algorithm 一道算法题

俩数之和,详见:https://leetcode.cn/problems/add-two-numbers/submissions/

// 链表class ListNode {  val: number;  next: ListNode | null;    constructor(val: number, next: ListNode | null){    this.val = val;    this.next = next  }}
function addTwoNumber(l1: ListNode| null, l2: ListNode | null){ const dummyHead = new ListNode(0); // 哨兵节点 let current = dummyHeadl; let carry = 0; // 进位数 while(l1 !== null || l2 !== null || carry !==0) { const val1 = l1.val || 0 const val2 = l2.val || 0 const total = val1 + val2 + carry carry = Math.floor(total/10) current.next= new ListNode(total%10) current = current.next if(l1 !==null){ l1 = l1.next } if(l2 !== null){ l2 = l2.next } } return dummyHead.next}
// test const l1 = new ListNode(2, new List(5,new ListNode(8))) // 生成链表const l2 = new ListNode(4, new List(7,new ListNode(9)))let result = addTwoNumber(l1,l2)while(result !== null) { console.log(result.val) result = result.next}
复制代码


Review 读一篇英文文章

The Key To Accelerating Your Coding Skills

详见:http://blog.thefirehoseproject.com/posts/learn-to-code-and-be-self-reliant/


当学习编程时,存在一个转折点,它标志着一切开始改变。这被称为编程的拐点。通过此阶段后,作为开发人员的运作方式将发生根本性的变化。从新手到自给自足的过程可能会令人沮丧,但一旦克服,将变得非常有力量。

在开始学习编程时,你需要掌握特定任务,培养注意细节的能力很重要。逐步地,你将开始识别模式,原本令人困惑和陌生的事物会变得熟悉。阶段性的学习过程中,掌握注意细节的能力非常重要,尤其在处理错误消息和问题时。

在学习阶段,你将遵循指导,但随着时间的推移,你会逐渐掌握解决错误和注意小细节的能力,从而能够更快地取得进展。当你完成教程阶段时,你会注意到自己能够以更快的速度编写代码。

进入拐点阶段后,你将逐渐脱离使用教程,开始解决没有预先解决方案的问题。虽然在这个阶段你可能会感到困惑和不安,但实际上,你在学习最重要的事情。此时,你将培养出自学未知知识的能力。

值得注意的是,编程是一个终身学习的过程,而不是达到知识全面掌握的终点。在完成拐点后,你将会在处理错误消息、查找解决方案以及使用已有代码方面变得更加自信。

在拐点过程中,最终阶段是接受。你要接受编程是持续学习的过程,不断解决更复杂的问题。通过经验获得的自信是关键,编程将始终是一个不断学习的过程。

总的来说,掌握拐点后,你将能够自信地解决问题,具备在编程和开发领域取得长远成功的基础。


Technique/Tips 分享一个小技术

前端开发常见的设计模式- 代理

什么是设计模式:研究类本身或者类与类之间的协作模式,是进行抽象归纳的一个很好的速成思路。

代理(Proxy):理解保护

代理是为了包装一个类,对相关操作进行二次转发或者进行一些管控。工作中来说,有些工作模式下,有时候我们可能会抱怨管理者代理了我们的决策等操作,但是换个角度想,他们保护了你不用直接被暴露在业务方侧,能够按照预期内的节奏提供服务,不会被主动设置一些预期外操作或私活。


(Reference:https://mp.weixin.qq.com/s/kc7tgGLiPUrmq67da9Uhow)


前端框架 vue 的响应式,就用到了代理模式。

通过 Object.define、Proxy 自动的完成依赖收集,相应数据变化。get 方法中收集依赖,set 方法中,get 方法中联动处理。

const data = {    a: 123,    b: 456}
let activeEffectconst effectStack = [];
function effect(fn) { const effectFn = () => { cleanup(effectFn) activeEffect = effectFn effectStack.push(effectFn); fn() effectStack.pop(); activeEffect = effectStack[effectStack.length - 1]; } effectFn.deps = [] effectFn()}
function cleanup(effectFn) { for (let i = 0; i < effectFn.deps.length; i++) { const deps = effectFn.deps[i] deps.delete(effectFn) } effectFn.deps.length = 0}
const reactiveMap = new WeakMap()
const obj = new Proxy(data, { get(targetObj, key) { let depsMap = reactiveMap.get(targetObj) if (!depsMap) { reactiveMap.set(targetObj, (depsMap = new Map())) } let deps = depsMap.get(key) if (!deps) { depsMap.set(key, (deps = new Set())) } deps.add(activeEffect)
activeEffect.deps.push(deps);
return targetObj[key] }, set(targetObj, key, newVal) { targetObj[key] = newVal
const depsMap = reactiveMap.get(targetObj)
if (!depsMap) return
const effects = depsMap.get(key)
// effects && effects.forEach(fn => fn()) const effectsToRun = new Set(effects); effectsToRun.forEach(effectFn => effectFn()); }})
复制代码


Share 分享一个观点

只有技术才是硬通货。


详见:https://coolshell.cn/articles/10688.html

很长一段时间内,觉得可能到了 30 岁就找不到工作了。有这种想法的原因有,不够自信,我是种半路转行,又是二流大学。最主要的原因是懒惰,逃避。


入行这六年来,一直苦苦做业务,似乎觉得多做点业务,才对得起自己的那份工资。对于数据结构,后端知识一直疏于学习。直到认识耗子叔,我似乎找到了学习的灯塔。开始学习数据结构,后端知识,坚持学英语。学习的路上真的很枯燥,但成就感也满满。例如能用 docker 部署服务,会用 nest.js 处理一些后端的逻辑。分布式、单体应用、redis 等这些词不陌生的时候,似乎有了更多的自信。前几天参加华为机考的时候,会做俩道算法题。虽然机考还是被刷了,但是对我自己而言,是进步。放在一年前,我连参加的勇气都没有的。


只有技术才是硬通货,精练自己的手艺。

I know I'm not a smart guy, but I would keep it up.


用户头像

EchoZhou

关注

还未添加个人签名 2018-04-24 加入

还未添加个人简介

评论

发布
暂无评论
ARTS-WEEK3-23.8.28~23.9.2_EchoZhou_InfoQ写作社区