今天是 2025 年 3 月 29 日,距离暑期实习还有大概 20 天,很荣幸能够在前两天收到了美团的 offer,期待 4 月 21 日的入职,暑期实习大概是从今年过年期间开始准备的,一开始没有打算找到一个像美团这样的大厂,主要是想找一个能学到东西的实习,后来在 3 月 5 日的时候投了美团的实习,没想到就收到了面试通知,面试的过程也很顺利,主要是做了一些算法题和系统设计题,最后也顺利通过了面试,拿到了 offer。 说来也是比较巧的,在三月八号的时候我投了本地的一个小厂,当时面试真的汗流浃背了,就在上周三,我还是处于没有通过一面的状态,很感激面试官的耐心,给了我很多建议,其实已经迫不及待想要开始实习了,期待能在美团学到更多的东西,当然也希望能在实习期间结识到更多的朋友。
博客
代码人生:编织技术与生活的博客之旅
2025 年的第一次博客
今天是 2025 年第一次写博客,主要的想法是规划一下今年的生活,今天收获了第一台苹果设备 MacBook Pro ,也是人生中第一次负债(向父母借贷 1.25w),准备等给小孩哥补课和开学后的实习赚钱还完贷款。
今年的目标主要是完成还贷款,在 3 月的时候找到实习,然后再暑期的时候继续实习,以便在秋招能够找到工作,不求大富大贵,希望不要给父母添麻烦。 计划是 12 号前,把杂七杂八的 react19 的新内容看看,把以前有些不会的知识点过一遍,然后准备做出一个小项目,最好是在 26 号之前完成,然后花两天时间改一下简历。 还要做的就是需要在年钟把八股的东西准备一下,然后再把一些常见的问题准备一下,然后就是等待面试了,年后就投简历,目前项目还是有点不足的,需要加油。 年后再看吧,还会再补充的,同时博客也会开始更新了,显示 react 的复习,也许会有很多新鲜的小工具 😀 gogogo
js中的原型
prototype
所有的函数都有一个prototype
属性
将函数看成是一个普通的对象时,它具备__proto__
属性
构造函数Parent
有一个原型对象Parent.prototype
上面有一个constructor
Parent
可以通过 prototype 指向原型
原型Parent.prototype
可以通过constructor
指向构造函数
function Parent() {
this.name = "parent";
}
var p = new Parent();
console.log(p.__proto__ === Parent.prototype); // true
__proto__
是一个指向原型对象的指针,它指向的是Parent.prototype
可以使用 getPrototypeOf
如果要创建一个新的对象同时继承另一个对象的属性,可以使用Object.create
function Parent() {
this.name = "parent";
}
var p = new Parent();
var p1 = Object.create(p);
创造原型对象的方法
function createObject(o) {
function f() {}
f.prototype = o;
return new f();
}
//创建对象的过程
function inherit(Subtype, Supertype) {
Subtype.prototype = createObject(Supertype);
Object.defineProperty(Subtype.prototype, "constructor", {
enumerable: false,
configurable: true,
writable: true,
vlaue: Subtype,
});
}
//寄生式函数
这种方法是将子类的原型对象指向父类的原型对象,同时将子类的原型对象的构造函数指向子类
手写柯里化
假设存在一个函数func
func
接受三个参数 a
b
c
那么函数最多被柯里化三次
function func(a, b, c) {
return a + b + c;
}
var c1 = curry(func, 1);
var c2 = curry(func, 2);
var c3 = curry(func, 3);
c3(); //6
参数定长的柯里化
function curry(fn) {
const argLen = fn.length;
const presetArg = [].slice.call(arguments, 1);
return function () {
const restArgs = [].slice.call(arguments);
const allArgs = [...presetArg, ...restArgs];
if (allArgs.length >= argLen.length) {
return fn.apply(this, allArgs);
} else return curry.call(null, fn, ...allArgs);
};
}
这样写我们的柯里化就支持三个参数的运算
function func(a, b, c) {
return a + b + c;
}
var currried = curry(func);
curried(1, 2, 3);
curried(1)(2, 3);