【LeetCode】56. 合并区间

按照区间的左端点排序,那么在排完序的列表中,可以合并的区间一定是连续的。如下图所示,标记为蓝色、黄色和绿色的区间分别可以合并成一个大区间,它们在排完序的列表中是连续的。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if (intervals.size() == 0) {
return {};
}
sort(intervals.begin(), intervals.end());
vector<vector<int>> merged;
for (int i = 0; i < intervals.size(); ++i) {
int L = intervals[i][0], R = intervals[i][1];
if (!merged.size() || merged.back()[1] < L) {
merged.push_back({L, R});
}
else {
merged.back()[1] = max(merged.back()[1], R);
}
}
return merged;
}
};

【前端】Vue3+TypeScript笔记

创建Vue3工程

推荐基于 vite 创建(需 node.js)

1
2
3
npm create vue@latest   #创建项目
npm i #安装依赖
npm run dev #运行项目

Vue3核心语法

OptionsAPI 与 CompositionAPI

  • Vue2 API设计是Options(配置)风格的
  • Vue3 API设计是Composition(组合)风格的

setup

setup是Vue3中一个新的配置项,值是一个函数,它是 Composition API “表演的舞台”,组件中所用到的:数据、方法、计算属性、监视……等等,均配置在setup中。

setup 与 Options API 的关系:

  • Vue2 的配置(data、methods……)中可以访问到 setup中的属性、方法。
  • 但在setup中不能访问到Vue2的配置(data、methos……)。
  • 如果与Vue2冲突,则setup优先。

setup语法糖:

1
2
<script setup lang="ts">
</script>

ref 创建:基本类型的响应式数据

1
2
3
4
<script setup lang="ts">
import {ref} from 'vue'
let arr=ref([])
</script>

reactive 创建:对象类型的响应式数据

ref 创建:对象类型的响应式数据

  • 其实ref接收的数据可以是:基本类型、对象类型。
  • 若ref接收的是对象类型,内部其实也是调用了reactive函数。

TS中的接口、泛型、自定义类型

Vue 生命周期

  • 创建前(beforeCreate) / 创建(created)
  • 挂载前(beforeMount) /挂载(mounted)
  • 更新前(beforeUpdate) / 更新(updated)
  • 销毁前(beforeDestroy) / 销毁(destroyed)

自定义Hooks

  • 需要axios
    1
    2
    npm i axios   //安装axios
    import axios from 'axios' //引入axios

路由

  • 单页面应用SPA(Single Page web Application)

  • 创建一个路由器,并暴露出去

路由组件通常存放在pages 或 views文件夹,一般组件通常存放在components文件夹。

路由器工作模式

  1. history模式
    适合to C
  • 优点:URL更加美观,不带有#,更接近传统的网站URL
  • 缺点:后期项目上线,需要服务端配合处理路径问题,否则刷新会有404错误。
  1. hash模式
    适合to B
  • 优点:兼容性更好,因为不需要服务器端处理路径。
  • 缺点:URL带有#不太美观,且在SEO优化方面相对较差。

路由传参

  • query参数
  • params参数

路由的props配置

路由replace

编程式导航

路由组件的两个重要的属性:$route$router变成了两个hooks

使用情景:几秒后去广告/登录成功跳转等

Pinia

集中式状态管理

  • 安装Pinia
    1
    npm i pinia

组件通信

  • props
  • 自定义事件
  • mitt
  • v-model
  • $attrs
  • $refs、$parent
  • provide、inject
  • pinia
  • slot
    • 默认插槽
    • 具名插槽
    • 作用域插槽

其他API

shallowRef 与 shallowReactive

通过使用 shallowRef() 和 shallowReactive() 来绕开深度响应。浅层式 API 创建的状态只在其顶层是响应式的,对所有深层的对象不会做任何处理,避免了对每一个内部属性做响应式所带来的性能成本,这使得属性的访问变得更快,可提升性能。

readonly 与 shallowReadonly

readonly

  1. 作用:用于创建一个对象的深只读副本。

  2. 用法:

    1
    2
    const original = reactive({ ... });
    const readOnlyCopy = readonly(original);
  3. 特点:

    • 对象的所有嵌套属性都将变为只读。
    • 任何尝试修改这个对象的操作都会被阻止(在开发模式下,还会在控制台中发出警告)。
  4. 应用场景:

    • 创建不可变的状态快照。
    • 保护全局状态或配置不被修改。

shallowReadonly

  1. 作用:与 readonly 类似,但只作用于对象的顶层属性。

  2. 用法:

    1
    2
    const original = reactive({ ... });
    const shallowReadOnlyCopy = shallowReadonly(original);
  3. 特点:

    • 只将对象的顶层属性设置为只读,对象内部的嵌套属性仍然是可变的。

    • 适用于只需保护对象顶层属性的场景。

toRaw 与 markRaw

toRaw

  1. 作用:用于获取一个响应式对象的原始对象, toRaw 返回的对象不再是响应式的,不会触发视图更新。

    官网描述:这是一个可以用于临时读取而不引起代理访问/跟踪开销,或是写入而不触发更改的特殊方法。不建议保存对原始对象的持久引用,请谨慎使用。

    何时使用? —— 在需要将响应式对象传递给非 Vue 的库或外部系统时,使用 toRaw 可以确保它们收到的是普通对象

markRaw

  1. 作用:标记一个对象,使其永远不会变成响应式的。

    例如使用mockjs时,为了防止误把mockjs变为响应式对象,可以使用 markRaw 去标记mockjs

customRef

作用:创建一个自定义的ref,并对其依赖项跟踪和更新触发进行逻辑控制。

Vue3新组件

Teleport

  • Teleport 是一种能够将我们的组件html结构移动到指定位置的技术。

Suspense

  • 等待异步组件时渲染一些额外内容,让应用有更好的用户体验
  • 使用步骤:
    • 异步引入组件
    • 使用Suspense包裹组件,并配置好defaultfallback

全局API转移到应用对象

  • app.component
  • app.config
  • app.directive
  • app.mount
  • app.unmount
  • app.use

其他

  • 过渡类名 v-enter 修改为 v-enter-from、过渡类名 v-leave 修改为 v-leave-from
  • keyCode 作为 v-on 修饰符的支持。
  • v-model 指令在组件上的使用已经被重新设计,替换掉了 v-bind.sync。
  • v-ifv-for 在同一个元素身上使用时的优先级发生了变化。
  • 移除了$on$off$once 实例方法。
  • 移除了过滤器 filter
  • 移除了$children 实例 propert

【前端】Vue笔记

搭建Vue开发环境

  • 下载Vue.js
  • 安装浏览器扩展:Vue.js devtools

Vue基础

模板语法

  • 插值:’{‘{‘’}’’}’

数据绑定

  • v-bind 单向
  • v-model 双向

MVVM模型

  1. M:模型(Model) :data中的数据
  2. V:视图(View) :模板代码
  3. VM:视图模型(ViewModel):Vue实例

数据代理

Vue中的数据代理:

  • 通过vm对象来代理data对象中属性的操作(读/写)

Vue中数据代理的好处:

  • 更加方便的操作data中的数据

基本原理:

  • 通过Object.defineProperty()把data对象中所有属性添加到vm上。
  • 为每一个添加到vm上的属性,都指定一个getter/setter。
  • 在getter/setter内部去操作(读/写)data中对应的属性。

事件处理

v-on: @

  • 事件的回调需要配置在methods对象中,最终会在vm上

事件修饰符

  1. prevent:阻止默认事件(常用);
  2. stop:阻止事件冒泡(常用);
  3. once:事件只触发一次(常用);
  4. capture:使用事件的捕获模式;
  5. self:只有event.target是当前操作的元素时才触发事件;
  6. passive:事件的默认行为立即执行,无需等待事件回调执行完毕;

键盘事件

  • keyup
  • keydown
  • keypress

计算属性

  • 计算属性是基于它们的响应式依赖进行缓存的
  • 与methods实现相比,内部有缓存机制(复用),效率更高,调试方便。
  • 1.计算属性最终会出现在vm上,直接读取使用即可。

监视属性

computed和watch之间的区别

  • computed能完成的功能,watch都可以完成。
  • watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。

绑定样式

条件渲染

  • v-if

列表渲染

  • v-for

收集表单数据

  • v-model

过滤器

内置指令

  • v-text
  • v-html
  • v-cloak
  • v-once
  • v-pre

自定义指令

生命周期

  • 常用的生命周期钩子:
    1. mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。
    2. beforeDestroy: 清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。

组件

  • 非单文件组件(不常用)
  • 单文件组件

【前端】前端学习记录

在学习前端之前,我只有一些408和C语言的基础,也从来没接触过实际开发。具体的学习路线我是参考了黑马的前端开发学习路线。听课的话都是b站上公开的课程。

1. HTML+CSS基础 :5天

看课。比较基础,前期跟看了一段时间视频,中期感觉视频讲的略啰嗦,于是直接看笔记,遇到案例再看视频。因为知道实际开发会用到后面的框架,所以以掌握知识为主,较少跟着敲代码。

重点:理解CSS盒子模型,移动端网页适配方式(rem、vw/wh),响应式(媒体查询),流式布局(主要是flex),会用less,会用BootStrap框架。

课程视频
学习笔记
学习笔记(移动端css)

2. JavaScript基础:5天

看课+跟敲代码。有一些其他语言基础,因此跳过了大部分循环声明函数体的基础。

重点:主要是要理解webAPI=DOM+BOM,会操作DOM。

课程视频

3. jQuery:2天

看课+跟敲代码。基本是提高对JS的易用性的封装,所以很好学。

重点:隐式迭代,筛选与排他,链式编程,BootStrapJS插件
项目:ToDolist

课程视频

4. Ajax:2天

这部分和前面很不一样,涉及到数据通信,第一次看不太理解。

5. Vue:7天

看课+跟敲代码
重点:MVVM模型,模板语法,生命周期

课程视频
学习笔记

【考研】408学习记录

科目

1. 数据结构(Data Structure)

2. 操作系统(Operation System)

3. 计算机组成原理(Computer Organization)

4. 计算机网络(Computer Network)

书目

基础

  • 【王道全书】讲义重点不清晰,从真题来看,详略并不得当。另外太多习题没有放在对应章节。只能说打基础和后期查漏补缺用用,但毕竟是408钦点教辅,不用不行。
  • 【湖科大教书匠计网视频】质量很高。说实话就是读ppt,但胜在过程比王道清晰细致。
  • 【LeetCode】刷算法题。

模拟题

  • 【王道模拟题】感觉质量不高,部分解析与真题思路有冲突,容易打乱体系。
  • 【湖科大教书匠计网模拟题】质量很高。专门考察了新增考点和低频考点,帮我复习了这些考点。符合近年命题趋势。

真题

  • 【2009-2023】专业课高质量题目资源比较少,多刷真题

复盘

复习建议

  • 依靠王道,感觉120+就很极限了,要提高必须看大学教材or黑书。

【考研】数学学习记录

科目

1. 高等数学

2. 线性代数

3. 概率论与数理统计

用书

讲义

  • 【张宇基础30讲】排版舒适,知识体系很全,方便放在手边梳理。

  • 【张宇高数18讲、线代9讲、概率论9讲】题型全面,分成了三本不是很方便。

  • 【李永乐《考研数学复习全书》】排版不太舒服。

习题册

  • 【李永乐660】难度简单,全是选填,刷着方便,有大片空白用于书写过程
  • 【李林880】难度适中,新题怪题少。
  • 【张宇1000】难度中上,有些新题怪题,刷着比较有意思。

模拟卷

  • 【李林6+4】风格贴近往年真题,但不够新颖,感觉缺少挑战
  • 【张宇8+4】很多新题,大题不错,适合主要训练。
  • 【李永乐6】只做了选填部分,选填质量很高,大题感觉和真题风格不太一样,后面就没做了。
  • 【李艳芳3】质量超高,解析很棒,难度封顶,欣赏命题与压力测试为主,预测为辅。

真题

  • 【2009-2023】【数学一】2020及之前年份卷面题型分布是8+6+9,2021开始是10+6+6,会明显感觉到刷题的节奏和状态的区别。

复盘

知识点补强

  • 无穷级数部分
  • 线代高质量概念题
  • 概率表达式分布

需要训练

  • 计算能力
  • 多解能力

【摘要】DAO

什么是DAO?

  • 去中心化自治组织 Decentralized Autonomous Organization
  • 基于区块链思想的组织形态

DAO的特点

  • 分布式与去中心化(distributed and decentralized)(Ori Brafman: 蜘蛛与海星)
  • 自主性与自动化(autonomous and automated)
  • 组织化与有序性(organized and ordered)
  • 智能化与通证化 (intelligence and tokenization)

DAO的优势

  • 快速、无边界的业务决策
  • 组织范围内的投票
  • 无法篡改规则

【个人看法】

  • 对互联网而言是一个新鲜的事物
  • 形式创新大于内容创新,把会议从腾讯会议、Zoom搬到链上(snapshot)而已
  • 组织形式的扁平不能弥合现实中资源的不均(算力、货币)
  • 对组织成员的约束很弱,主要靠自我驱动
  • 决策完全透明可追溯,成员匿名,这并不一定是优点

【杂想】为什么说人的本质是一切社会关系的总和?

费尔巴哈把宗教的本质归结于人的本质。但是,人的本质不是单个人所固有的抽象物,在其现实性上,它是一切社会关系的总和。

费尔巴哈没有对这种现实的本质进行批判,因此他不得不撇开历史的进程,把宗教感情固定为独立的东西,并假定有一种抽象的——孤立的——人的个体。因此,本质只能被理解为‘类’,理解为一种内在的、无声的、把许多个人自然地联系起来的普遍性。

从思想史上看,对人的本质的定义往往涉及人的自然性、精神性、社会性三个方面。在马克思之前的思想家中,旧唯物主义思想家往往用自然性来定义人的本质(如费尔巴哈、毕希纳、福格特、斯宾诺莎),唯心主义思想家往往用精神性来定义人的本质(如蒲鲁东、笛卡儿、康德、黑格尔)。

尽管这些思想家也强调了人的社会性(如亚里士多德就认为人是“社会的动物”),但他们却只是从脱离物质资料生产的社会交往本身来理解人的社会性,因此无法把握社会性的真正内涵。人的社会性的真正内涵被马克思所揭示,即“一切社会关系的总和”。

“生产关系总和起来就构成所谓社会关系。”在马克思看来,人的本质离不开以物质资料生产为基础的劳动实践,只有在这种社会关系中才能实现人的本质。可以说,人的本质从来就不是一个纯粹理论问题,而是一个与生产力、生产关系的辩证发展紧密相连的实践问题。

在这个命题中重要的是如何理解本质。本质似乎是使得后者存在的前提,你先是自然人,然后是一个社会人,然后是男人女人,然后是儿童成年人,然后是中国人外国人等等。但很遗憾这样的递进关系是错误的,它试图用一个类似博物学分类的框架,将你的本质抽离出来,在这种情况下你很容易认为人的自然性高于社会性,可你继续追问下去,人先是动物再是自然人,先是生物再是动物,先是物再是生物,难道你和其他动物/生物/物具有相同类型的本质?(不是相同的本质)人之所以是人,是跟其他非人的有着不同的本质,本质不是先决的东西,而是扬弃的东西,可以设想当某人百年以后,他在某天吃了什么东西是没什么意义的,如果有意义,也是因为吃东西这件事牵动了社会关系。因此说人的本质是一切社会关系的总和。

“为什么社会是人的总和是邪恶的?”

首先要认识到,人与社会都是一个符号化的东西,都是构建出的概念。你用人去定义社会,首先你要先定义人,即社会是什么样的人的总和。即使加上所有也一样,社会是所有(什么样的)人的总和。无论你怎么尝试试图将人所有具体的个体囊括其中,创造命题的同时,天然就创造了非人的概念,并给了有权力掌握定义的人将个体人妖魔化的空间。

【杂想】关于启蒙

我想在国内,很多人小时候家里墙上都挂过拼音表和地图。我小时候家里墙上倒是没有挂地图,但父母给我买过一个地球仪。那时还是个online和offline尚有界限的年代,转地球仪是我的乐趣之一,直接启蒙了我的世界地理观。

同期还有很多启蒙我的事物:印象中的一张历史年表启蒙了我的历史观,一本笠翁对韵和唐诗三百首启蒙了我的汉语语感,一个魔方启蒙了我的空间想象力。这些都是很小的很小的事物,但好奇心和世界观常识的构建是从这些种子上生长出来的。后来我能理解的更多事物,多多少少源于我的一些现实映射,当我上高中第一次看到四色问题时,脑子里浮现还是小时候的那个地球仪。

直到我长大以后以后,在上学和社会接触了更多的人,我才发现,很多人原来是没有好奇心的,也没有常识的。大部分是比我年长一两代的人,也有一些同龄人,甚至个别自驱力非常强。由于知识的诅咒,我很难想象没有好奇心和一些我认为的常识的自己是什么样的,但我绝不希望我是那样的。

以为我要强调启蒙的重要性吗?恰恰相反,我想说,所谓的“常识”其实很大程度上是某个共同环境下的共识,而很多“本以为是”的常识其实限制了人的相互理解。比如中国的首都是北京绝对是常识,丹麦首都哥本哈根就不一定了,而刚果首都布拉柴维尔几乎不会有人认为是常识。这当然与国家本身知名度有关,但对于刚果人或者在刚果做生意的中国人,刚果首都才是常识。

常识取决于共识。但每个人都多少有与共识相左的地方,具体到各类人群的意识形态与知识结构,到底常识的界限在哪已是不可考的状态了。

而关于地理的常识,其实是一个绝好的比喻。现实当然不会有人天天考你布基纳法索的首都是哪呀这种小众问题,但地域、家庭条件、专业、行业的常识空气墙每天都有很多人撞。与此同时,许多本应该启发民智的常识出于某些原因门槛高筑,例如基础的政治学和辩证法知识,越来越多的伪知识却伪装成常识的模样大行其道,例如消费主义、成功学。

在摆脱了小时候所谓的起跑线教育后,在与人接触时更多地考虑其知识体系和认知水平后,我开始逐渐意识到自己天然的优势和不足,不去否定卑微的自我,不去构建微弱的自信,能引导自己的好奇心并独立思考,我想,到这时候,启蒙才算开始。

  • Copyrights © 2019-2024 Hxy
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信