摄影 | 梧桐山
机身:SONY A7M2
镜头:SONY 24-70GM
出镜:无
地点:梧桐山
摄影 | 南山夜景
机身: SONY A7M2
镜头: SONY 24-70 GM
出镜: 无
地点: 深圳大南山公园
NodeJS加解密之Crypto
互联网时代,网络上的数据量每天都在以惊人的速度增长。同时,各类网络安全问题层出不穷。在信息安全重要性日益凸显的今天,作为一名开发者,需要加强对安全的认识,并通过技术手段增强服务的安全性。crypto 模块的目的是为了提供通用的加密和哈希算法。用纯 JavaScript 代码实现这些功能不是不可能,但速度会非常慢。Nodejs 用 C/C++实现这些算法后,通过 cypto 这个模块暴露为 JavaScript 接口,这样用起来方便,运行速度也快。
编码方式
为什么信息传输需要编码?
在开发加密解密数据的时候碰到需要把加密好的字节数组转换成 String 对象用于网络传输的需求,如果把字节数组直接转换成 UTF-8 等编码方式的话肯定会存在某些编码没有对应的字符(8bit 只能表示 128 个字符),在编码和解析过程中会出错,不能正确地表达信息。这时就可以通过常用的二进制数据编码方式 Base64 编码或者 Hex 编码来实现。
hex 编码
编码原理
将一个 8 位的字节数据用两个 16 进制数表示出来
将 8 位二进制码重新分组成两个 4 位的字节
其中一个字节的低 4 ...
摄影 | 广州行
机身:IPhone 13 Pro Max
镜头:IPhone 13 Pro Max
出镜:无
地点:广州
带你重新认识Node
最初做Node的目的是什么?
Node作者Ryan Dahl:
基于V8创建一个轻量级的高性能Web服务器并提供一套库
为什么是JavaScript?
Ryan Dahl是一名资深的C/C++程序员,创造出Node之前主要工作是围绕Web高性能服务器进行的
他发现Web高性能服务器的两个要点:
事件驱动
非阻塞I / O
Ryan Dahl也曾评估过使用C、Lua、Haskell、Ruby等语言作为备选实现,得出以下结论:
C的开发门槛高,可以预见不会有太多的开发者能将它用于业务开发
Ryan Dahl觉得自己还不足够玩转Haskell,所以舍弃它
Lua自身已经含有很多阻塞 I / O 库,为其构建非阻塞 I / O 库不能改变开发者使用习惯
Ruby的虚拟机性能不佳
JavaScript的优势:
开发门槛低
在后端领域没有历史包袱
第二次浏览器大战渐渐分出高下,Chrome浏览器的JavaScript引擎V8摘得性能第一的桂冠
Node给JavaScript带来的意义
除了HTML、Webkit和显卡这些UI相关技术没有支持外,Node的结构与Chrome十 ...
[面经分享] 收获多家大厂offer | 分享我的2022秋招经历
前言
好久不见,我是LeBron,有段时间没写博客了。最近几个月的大部分精力都放在秋招上了,边实习边秋招还是挺吃力的,总算结果还是不错。
先介绍一下个人情况:2022届双非本科应届生,项目经验和经历还算丰富,在字节实习至今也快8个月了,详细情况可以来我的博客看看哈 : LeBronChao’s Blog
秋招从7.19 ~ 10.24历时三个多月,腾讯、阿里、字节、百度、大疆、华为、Shopee、滴滴、美团、拼多多10家公司,将近40场笔试 / 面试(自我介绍都快念麻了),基本全部通过收到offer,借此机会做个总结和大家分享一下面经。
面试前的准备
简历
可以参考前端 Offer 提速:如何写出有亮点的简历
这个其实不用讲太多了,尽量地写出亮点,比如
开源项目经验
实习经历 & 重点产出
技术深度展现 / 知名开源框架PR
技术热情 / 影响力
知识产权 / 论文
校园项目经验 / 亮点经历
等等…
重点:Word格式容易出问题 尽量用PDF格式
相应岗位知识
这个其实靠平时积累会比较多一点,面试前可以通过面经做个自测,我面试的大部分是前端岗位主要分为以下几个方面
...
[源码解读]一文读懂Vuex4源码
Vuex4源码解析
Vuex是在Vue中常用的状态管理库,在Vue3发布后,这个状态管理库也随之发出了适配Vue3的Vuex4
快速过Vuex3.x原理
为什么每个组件都可以通过this.$store访问到store数据?
在beforeCreate时,通过mixin的方式注入了store
为什么Vuex中的数据都是响应式的
创建store的时候调用的是new Vue,创建了一个Vue实例,相当于借用了Vue的响应式。
mapXxxx是怎么获取到store中的数据和方法的
mapXxxx只是一个语法糖,底层实现也是从$store中获取然后返回到computed / methods中。
Vuex4使用
Vue.useStore
在Vue3 Composition API中使用Vuex
import { useStore } from 'vuex'export default{ setup(){ const store = useStore(); }}
V ...
如何优雅地操作数据库?ORM了解一下
什么是ORM
对象关系映射(Object Relational Mapping,简称ORM),是一种程序技术,实现面向对象编程语言中的内存对象与关系型数据库中的业务实体之间的关系映射。这样在我们操作数据库的时候,不再需要和复杂的SQL语句打交道,只需要简单地操作对象的属性和方法就可以直接实现对数据库中对应实体表的CRUD(增删改查)的操作。常见的ORM框架有Node.js 的TypeOrm、Sequlize,Java的Hibernate、Mybatis和Go的Gorm、GoRose等。
ORM的方法论基于三个核心原则
简单:以最基本的形式建模数据
传达性:数据库结构被任何人都能理解的语言文档化
精确性:基于数据模型创建正确、标准化的结构
为什么会出现ORM
面向对象编程语言和关系型数据库都是目前最流行的技术,但他们的模型是不一样的。
几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
以 MVC 分层模式为例。Model 作为数据承载实体,在用户界面和业务逻辑层之 ...
[深入浅出LB]手把手带你实现一个负载均衡器
Load Balance负载均衡 🌡
简介
负载均衡,含义就是根据一定算法将负载(工作任务)进行平衡,分摊到多个操作单元上运行、执行,常见的为Web服务器、企业核心应用服务器和其他主要任务服务器等,从而协同完成工作任务。负载均衡在原有的网络结构上提供了一种透明且有效的的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性,同时承受住更大的并发量级。
简单来说就是将大量的并发请求处理转发给多个后端节点处理,减少工作响应时间。
避免资源浪费
避免服务不可用
一、分类
四层(传输层)
四层即OSI七层模型中的传输层,有TCP、UDP协议,这两种协议中包含源IP、目标IP以外,还包含源端口号及目标端口号。四层负载均衡在接收到客户端请求后,通过修改报文的地址信息(IP + PORT)将流量转发到应用服务器。
七层(应用层)
代理负载均衡
七层即OSI七层模型中的应用层,应用层协议较多,常用的为HTTP/HTTPS。七层负载均衡可以给予这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了 ...
[建议收藏]你想知道的Vue3核心源码这里都有
Effect和Reactive
effect作为Vue响应式原理中的核心,在Computed、Watch、Reactive中都有出现
主要和Reactive(Proxy)、track、trigger等函数配合实现收集依赖,触发依赖更新
Effect
副作用依赖函数
Track
依赖收集
Trigger
依赖触发
Effect
effect可以被理解为一个副作用函数,被当做依赖收集,在响应式数据更新后被触发。
Vue的响应式API例如Computed、Watch都有用到effect来实现
先来看看入口函数
入口函数主要是一些逻辑处理,核心逻辑位于createReactiveEffect
function effect<T = any>( fn: () => T, options: ReactiveEffectOptions = EMPTY_OBJ): ReactiveEffect<T> { // 如果已经是effect,则重置 if (isEffect(fn)) { fn = fn.r ...