一些学习日记

一、响应式布局

核心概念

1、定义:页面自动适配不同尺寸设备的布局方式

2、方案:媒体查询、弹性布局、视口单位、rem布局

关键技术

1、移动端:viewport 、1px

2、CSS预处理器

3、Bootstrap栅格系统原理

性能优化

1、图片适配:srcset、懒加载

2、代码优化:CSS压缩、JS按需加载

框架响应式

1、Vue2:Object.defineProperty Vue3/React:Proxy

2、组件响应:v-if v-show

二、ES6 Proxy Reflect

概念0:元编程特性(meta programming),对象操作的高级控制标准化方法。

概念1:通过Proxy创建代理对象,在代理对象中使用Reflect对JS原始(get/set/has/apply)操作的拦截。

Proxy :代理模式,使用代理对象进行对象拦截并操作

Reflect:规范/标准操控对象,拦截并操作

必须结合使用?

receiver (proxy实例 or 继承proxy的那个对象)

触发代理对象拦截操作时,正确this指向

https://blog.youkuaiyun.com/qq_45828551/article/details/126251545

三、MVC MVVM

单双数据流

MVC:用户操作Controller更新Model,再通知View更新

MVVM:View与ViewModel自动同步。Model变化ViewModel自动更新;用户操作ViewModel修改Model。Model<=>ViewModel<=>View

四、Nginx正向反向代理

正:客户端做,应用:突破网络限制,翻墙,VPN;浏览器设置

反:服务器做,应用:负载均衡、安全防护、缓存加速;Nginx proxy_pass

五、函数式编程、命令式编程

Functional Programming,FP:计算视为数学函数的组合,关注“做什么”,递归,延迟计算直到需要结果;

命令式编程:关注“如何做”

//命令式-关注步骤
let sum=0
for(let i=0;i<10;i++){
    sum+=i
}
//函数式-关注转换-做什么
const sum=[...Array(10).keys()].reduce((acc,x)=>acc+x,0)
六、正则匹配RegExp

**定义:**文本处理,匹配、查找、替换字符的特定模式。

元字 符: . ^ $ [] \d \w \s

量 词: * + ? {m,n}

匹配模式:.*? i g m

分组捕获:() \1

方法:String:search match replace;RegExp:test exec

示例:

function getType(value) {
  return Object.prototype.toString.call(value)
    .match(/\s+(\w+)/)[1]  // 提取[object Type]中的Type
    .toLowerCase();        // 统一转为小写
}

// 测试用例
console.log(getType(''));        // "string"
console.log(getType(2));         // "number"
console.log(getType([]));        // "array"
console.log(getType(null));      // "null"
console.log(getType(new Date()));// "date"
console.log(getType(/regex/));   // "regexp"

//HTML标签内容提取
'<div>content</div>'.match(/<[^>]+>([^<]+)</)[1]
// 检测字符串中连续重复的单词
const regex = /(\b\w+\b)\s+\1/g;
const text = "hello hello world this is a test test";
const matches = text.match(regex);

console.log("重复的单词对:", matches); // 输出: ["hello hello", "test test"]


function deduplicateText(text) {
    // 匹配连续重复的单词(不区分大小写)
    const wordRegex = /(\b\w+\b)(?:\s+\1)+/gi;
    // 匹配连续重复的字符
    const charRegex = /(.)\1+/g;
    
    // 先处理单词重复,再处理字符重复
    return text
        .replace(wordRegex, '$1')  // 保留第一个单词
        .replace(charRegex, '$1'); // 保留第一个字符
}

// 测试用例
const testText = "hello hello world this is is a test testtt";
console.log(deduplicateText(testText)); 
// 输出: "hello world this is a test"

/ 正斜杠:网络路径、Unix Linux文件路径、除法、正则分隔符

\ 反斜杠:Windows文件路径、转义字符\n 换行

TS核心

一、基础概念

1、超集;编译阶段静态类型检查,tsc编译器编译为JS运行;提示+补全;特性:泛型 接口

2、any unknown void never;关闭~断言~无值~不存在

二、类型系统

1、interface type

同:对象/函数,泛型

不同:扩展extends &;同名合并;范围 对象/函数 所有

2、泛型 Generic

类型参数化;安全/复用

三、高级特性

1、类型断言

编译告知类型;as

2、类型守护

运行检查;typeof instanceof in

四、实践应用

//联合类型| 交叉类型& 类型别名type 接口interface 泛型T 类型断言as<>
<script lang='ts'>
import {defineComponent,PropType} from 'vue'
interface Column<T>{
    key:keyof T;
    title:string;
}
interface MetaColumn<T>{
    width:number
}
type NewColumn=Column&MetaColumn
export enum OrderStatus{
    Pending='PENDING',
    Shipped='SHIPPED',
}
export default defineComponent({
    props:{
    	columns:{
        	type:Array as PropType<NewColumn<any>[]>
    	},
        orderType:{
            type:OrderStatus.Pending
        },
        msg:{
            type:[String,Number] as PropType<string|number>,
        },
        type:{
            type:String as PropType<'success'|'error'>,
        }
	}
})
</script>

Git核心

GiHub 开源社区生态 GItLab私有化部署企业

一、基本工作流

git clone

git checkout -b feature/xxx

git add .

git commit -m ‘feat:xxx’

git push/pull [-u origin <分支名>] 首次/后续关联远程分支

PR/MR

二、常见问题

1、Git合并冲突

<<<<<<< HEAD (当前分支修改)>>>>>>> branch-name (其他分支修改)

2、rebase merge

变基 个人分支整理

3、回退

git reset /revert

4、忽略

.gitignore git rm --cached 删掉已跟踪文件后才能忽略

5、分支策略

Git Flow Github Flow

6、历史记录

git log

7、撤销未提交的更改

git checkout – []

8、同步远程分支到本地

git checkout -b <local-branch> origin/<remore-branch>

or

git fetch origin

git pull origin <remote-branch>

9、stash

git stach save/git stash pop

10、合并多个提交

git rebase -i HEAD~3

11、commit 信息错误

git commit --amend

Vue3

一、核心机制与响应式原理

1、响应式原理
Proxy+Reflect Object.defineProperty
2、ref reactive
基本 const num=ref(0) //num.value++
对象 const obj=reactive({a:1}) //obj.a=2
3、toRef toRefs
const {a,b}=toRefs(state)//保持响应式
const a=toRef(state,'a')
4、v-model
v-model:title="tit"
props:['title'],
emits:['update:title']
this.$emit('update:title',t)
5、shallowReactive shallowRef
浅响应式

二、组合式API

1、区别
	类型 功能
2、setup()
	初始化
    beforeCreate created
3、逻辑复用
	组合函数 自定义Hook
    function useCounter(){
        const count=ref(0)
        const increment=()=>count.value++
        return {count,increment}
    }

三、生命周期与异步处理

1、周期
beforeUnmount unmounted
onMounted(()=>{})
2、watch watchEffect
watch:显示指定依赖
watchEffect:自动收集,立即执行,副作用
watch(count,(n,o)=>{})
watchEffect(()=>console.log(count.value))//自动跟踪

四、特性与优化

1、Teleport
子组件渲染到DOM指定位置
<Teleport to="body">
    xxx
</Teleport>
2、Suspense
异步组件加载
<Suspense>
    <template #default>
        <AsyncComponent />
    </template>
	<template #fallback>222</template>
</Suspense>
3、优化
源码(ts//ESM)、性能、API、reponono
编译优化:静态提升、与字符串化、内联事件处理函数、patchFlag、blocktree
渲染优化:diff算法
响应式:Proxy
API:ComponentAPI

五、通信与状态

1、父子
:msg="msg" @update="handleUpdate"
props:['msg'],emits:['update']
this.$emit('update',this.msg)
2、祖先
provide inject

六、技巧与陷阱

1、路由懒加载
component:()=>import('./Home.vue')
2、v-if v-for
计算属性
3TS类型错误
String as PropType<string>

Jest Vitest

^.+\.(js|ts)$ xxx.js文件

安装 配置 测试用例编写

test('xxx',()=>[
	const wrapper=mount()
	expect()
])

良好的测试覆盖率:边界条件、逻辑、空判断、提前返回

vite webpack

一、Vite原理

1、HMR

WebSocket ==> 仅重新编译修改的文件,ESM动态替换模块

2、秒启动

依赖于构建:esbuild node_modules ESM node_modules/.vite

按需编译:避免全量打包

二、Webpack原理

1、流程

初始化-编译-构建-输出

三、对比

开发:ESM,无需打包,按需加载;打包所有模块

生产:Rollup打包,输出优化后静态资源;依赖图生成bundle

生态:轻量;复杂项目

CSS预处理器

编程特性:变量、函数、混合;可维护性、开发效率

Less:轻量,小项目;Sass:全面,复杂项目

主题切换、响应式布局

CSS模块化方案:Tailwind CSS 原子类

大屏响应式布局

1、分辨率差异大;2、超宽屏;3、元素比例保持;4、动态数据适配

全屏图表自适应 vw vh+ECharts resize()

多模块弹性布局 Grid 媒体查询

超宽屏横向滚动 overflow-x auto flexbox

动态数据更新 JS resize+防抖

1、1920*1080为设计基准,相对单位 vw vh 向上适配

2、Echarts D3.js 响应式API

3、超宽屏幕:调整列数、横向滚动

CI/CD

持续集成(Continuous Integration)[kənˈtɪnjuəs ˌɪntɪˈɡreɪʃn]
持续交付(Continuous Delivery)[kənˈtɪnjuəs dɪˈlɪvəri]
和持续部署(Continuous Deployment)[kənˈtɪnjuəs dɪˈplɔɪmənt]

Node.js

概念:基于ChromeV8引擎的JS运行环境。JS是语言,Node.js是运行环境;Node.js扩展了JS能力,使其能脱离浏览器运行在服务器端。

核心能力:文件系统、网络请求、数据库、子进程等系统级操作

应用:API服务 Express.js Nuxt.js、CLI Webpack、编辑器 VSCode

文件系统:fs 、网络:http、模块化:CMJ CommonJS ESM

module.exports={}
require()

模块加载顺序:内置模块、文件模块、第三方模块

Uniapp

基于Vue.js的跨平台开发框架,支持编译到iOS Android Web 小程序等多端

多端适配:跨端组件、弹性布局、单位适配、条件编译

​ flex 750rpx #ifdef #endif

Tips

1、设备像素比 devicePixelRatio dpr

const dpr = window.devicePixelRatio || 1;  
canvas.width = canvas.clientWidth * dpr;*//实际像素数量(影响清晰度)

2、透明度

ctx.fillStyle = 'rgba(0, 0, 0, 0.05)';
//半透明实现拖尾效果  0-完全透明 1-完整颜色
ctx.fillRect(0, 0, canvas.width, canvas.height);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值