当前位置: 首页 > ai >正文

【前端】《手把手带你入门前端》前端的一整套从开发到打包流程, 这篇文章都会教会你;什么是vue,Ajax,Nginx,前端三大件?

文章目录

  • web前端概念引入
  • 一、前端3大件
    • (1)HTML
      • 1.基本标签
      • 2.超链接标签
    • (2)CSS
      • 1.CSS引入方法
      • 2.基本属性
      • 2.css选择器
    • (3)JavaScript
      • 1.js引入方式
      • 2.js基础语法
      • 3.js函数
      • 4.js对象
      • 5.js事件监听
  • 二、Vue
    • (1)介绍
    • (2)常用指令
    • (3)生命周期
  • 三、Ajax
    • (1)介绍:
    • (2)同步与异步
    • (3)原生Ajax
    • (4)Axios
  • 四、Nginx打包部署
    • (1)Nginx介绍
    • (2)打包部署流程
  • 五、前端工程化
    • (1)前后端分离:
    • (2)介绍:

web前端概念引入

1.网页是什么

web网页由各个网页元素比如文字,图片,视频等组成,由程序员编写的前端代码,由浏览器转换后形成。

浏览器中对代码进行渲染的部分,称为浏览器内核

不同的浏览器,内核不同,对于相同的前端代码解析效果会存在差异

2.web标准

  • web标准也称为网页标准,由一些列的标准组成,大部分由W3C(World Wide Web Consortium,万维网联盟)负责指定。
  • 三个组成部分:
    • HTML:负责网页的结构(页面元素和内容)
    • CSS:负责网页的表现(页面元素的外观、位置等页面样式,如:颜色、大小等)
    • JavaScript:负责网页的行为(交互行为)

还有基于js封装的组件Vue.js以及对于vue封装的element组件


一、前端3大件

HTML:超文本标记语言;

CSS:层叠式样式表

JavaScript:脚本语言

使用文档:w3school 在线教程](https://www.w3school.com.cn/)

(1)HTML

HTML(HyperText Markup Language):超文本标记语言。

  • 超文本:除了文字信息,还可以定义图片,音视频等内容

  • 标记语言:由标签构成的语言。

    HTML标签都是预定好的不能随意定义;并且HTML代码能够在浏览器中运行,标签由浏览器解析;

1.基本标签

(1)标签的特点

  1. HTML标签不区分大小写

  2. HTML标签属性值单双引号都可以

  3. HTML标签语法松散

基本标签种类如下:

(1)结构标签与布局标签

<html><head><title>标题</title></head><body></body>
</html>
//开发中经常使用的没有语义的布局标签
<div></div>
1.一行显示一个
2.宽度默认为父元素的宽度,高度默认由内容展开
3.可以设置宽高
<span></span>
1.一行显示多个
2.宽度和高度默认由内容撑开
3.不可设置宽高

HTML的内容前无论输入多少空格,最后只会显示一个,我们可以用空格占位符&nbsp

(2)标题标签

<h1></h1>  <!-- h1到h6重要程度依次降低 -->

(3)水平线标签

<hr>

(4)图片标签

<img src="..." width="..." height="...">
<!-- 1.绝对路径:绝对磁盘路径"D:/xxx"、绝对网络路径"https://xxx"  -->
<!-- 2.相对路径:从当前文件开始查找。(./当前目录 ;../上级目录)  -->

(5)音视频标签

<audio src="..."></audio> 
<video src="..."></video>

(6)换行、段落标签

换行:<br>
段落: <p>xxx</p>

(7)文本加粗标签

<b>xxx</b>
<srong>xxx</srong> <!-- 两者效果一样,但是strong有强调意味  -->

(8)表格标签

<table>				<!-- 1.table定义表格  --><tr>				<!-- 2.tr定义表格的行  --><th></th>		<!-- 3.th定义表格一行的字段  --></tr><tr><td></td>		<!-- 4.td定义表格一行的内容  --></tr>
</table>

(9)表单标签

<form action="" method="get">					<!-- 1.from定义表单  -->用户名:<input type="text" name="username">    <!-- 2.表单项,必须有name才可以提交  -->
</form>

1.表单属性:

action:表单数据提交的url地址(默认为当前地址)

method:表单提交的方式(get或者post等)

2.表单项:

<input>:通过type属性控制输入形式
<select>:定义下拉列表,其中加入<option>定义列表项
<textarea>:文本域

在这里插入图片描述

(10)label标签:

<label><input type="radio" name="gender" value="1"></label>

label标签能够使得单选按钮与文本‘男’聚焦,点击男也可以选中该选项;

2.超链接标签

<a></a>

1. 属性:

href:指定访问资源的url

target:指定何处打开资源链接(_self默认值,在当前页面打开;__blank:在空白页面打开)

2. CSS属性:

text-decoration:规定添加到文本的修饰,none可以消除默认超链接的下划线。

color:定义文本颜色

(2)CSS

CSS(Cascading Style Sheet):层叠样式表,用于控制页面的样式;、

1.CSS引入方法

(1)行内样式:

写在标签style属性中

<h1 style="xxx:xx; xxx:xx;">行内样式</h1>属性名:属性值

(2)内嵌样式:

写在style标签中,可以是任意位置,但是规范是把style标签写到head标签中

<style>h1 {xxx:xx;xxx:xx;}
</style>

(3)外联样式:

单独写到一个css文件中,需要使用时用link标签导入

.css文件一中直接写h1 {xxx:xx;
}需要使用的时候引入文件:
<link rel="stylesheet" herf="css文件路径">

2.基本属性

(1)color:

设置文本颜色

表示方式表达含义取值
关键字预定义的颜色名red、green、blue…
rgb表示法红绿蓝三原色,每项取值范围:0-255rgb(0,0,0)
十六机制表示法#开头,将数字转换成十六机制表示#000000、简写:#000

十六进制和rgb都是表示红绿蓝混合占比,十六进制前两位为红以此类推;

(2)容器属性

1.盒子模型

页面中所有的标签页都具有的属性,将内容包裹在其中;

组成为:内容区域content、内边距区域padding、边框区域border、外边距区域margin四个属性

在这里插入图片描述

  • 内容区域、内边距区域、边框区域三者宽之和为width
  • 内容区域、内边距区域、边框区域三者高之和为height

2.属性设置

border:设置边框属性,如1px soild #000 宽高1px 实线 黑色
padding:设置内边距
margin:设置外边距
(如果只需设置一个方位的边框,可以在属性名后-位置:padding-top:10px)

设置的时候指定了四个值,顺序是上右下左(顺时针)

三个值就是上右下;

两个值就是:第一个值表示上下,第二个值表示左右;

3.案例:

但我们需要一块内容居中,我们可以这样设置:

<div width=60% style="margin=0 auto">   
</div>

2.css选择器

CSS选择器用来选择需要设置样式的元素(标签)

主要分类为:

元素选择器,id选择器,类选择器
在这里插入图片描述

同时存在:id选择器>类选择器>元素选择器

(3)JavaScript

Javascript是一门跨平台、面向对象的脚本语言。用来控制网页的交互;

JS和java是完全不同的语言,从概念到设计都不同;基础语法类似

JS在1995年由Brendan Eich发明,并于1997年成为ECMA标准

(ECMA:ECMA国际制定了标准化的脚本程序语言ECMAScript,而js是遵循ECMAscript标准的)

1.js引入方式

两种方法:
(1)内部脚本

将JS代码定义在HTML页面中

<script>alert("helloJS")
</script>

在HTML文档中:

1.脚本位置和数量都是任意的;

2.一般脚本位置置于元素的底部,可改善显示速度;

2.

(2)外部脚本

定义在外部JS文件中,此时无需包含

<script srcc="demo.js"></script>

2.js基础语法

(1)书写语句

1.区分大小写:于java一样,变量名、函数名以及其他一切东西都是区分大小写的;

2.每行结尾的分号可有可无(推荐加上)

3.注释方法:单行注释//、多行注释/* */

4.大括号表示代码块

if(count===3){alert(count);
}

(2)输出语句

一共有三种输出语句:

1.使用window.alert()写入警告框

2.使用document.write()写入HTML输出到页面

3.使用console.log()写出浏览器控制台

<scirpt>window.alert("Hello JS");document.write("Hello JS");console.log("Hello JS");
</scirpt>

(3)变量

1.基本用法

JS中使用关键字var(variable的缩写)来声明变量。

JS是一门弱类型语言,变量可以存放不同类型的值。(var a=20;a = “张三”;是合法的)

变量名需要遵循如下规则:

​ 1.组成字符可以是任何字母、数字、下划线_ 或美元符号$

​ 2.数字不能开头

​ 3.建议使用驼峰命名

2.声明关键字区别

CAMAScript6新增了关键字let和const:

var,let,const三者区别

var是全局变量,可以重复定义;

let作用域为当前函数内,不可重复定义;

const作用域为当前代码块,相当于一个常量,一旦声明,常值就不能修改;

(4)数据类型、运算符、流程控制语句

1.数据类型

JS中分为:原始类型和引用类型

(原始类型直接操作值,引用类型操作的是值的引用。)

原始类型:

number:数字(整数、小数、NaN(Not a Number))
string:字符串、单双引皆可。
boolean:布尔。true、false。
null:对象为空。
undefined:当声明的变量未初始化时,该值默认值是undefined。使用type of a;可以获取a的数据类型

而引用类型就是如对象、数组、函数、日期等值存储在堆内存中,变量值存储的是内存地址;

2.运算符

算数运算符:+ - * / % ++ --
比较运算符:> < >= <= != == ===
逻辑运算符:&& || !
三元运算符:条件表达式?ture_value:false_value
赋值运算符:= += -= *= /= %=

js中有两个等于的比较运算符 =:

==会进行类型转换,===不会进行类型转换

var a = 10;
a == "10";  //ture
a === "10"; //false
a === 10;   //ture

类型转换

1.字符串转数字:如果字面值不是数字,则转为NaN。

parseInt("12"); //12
parseInt("12A54"); //12
parseInt("A12"); //NaN

2.其他类型转为boolean值:

0,NaN,空字符串,undefined 四个为false,其余都为true。

(空字符串是”“ 而空格字符为” “空格字符不为空字符串)

3.流程控制语句

if..else if else..
switch
for
while
do..while

3.js函数

介绍:函数(方法)是被设计为执行特定人物的代码块

定义:JS通过function关键字进行定义,语法为:

//方式1:
function 函数名(参数1,参数2...){//要执行的代码
}
//方式2:
var 函数名 = function(参数1,参数2...){//要执行的代码
}

注意

​ 1.形式参数不需要类型。(因为JS是弱类型语言)

​ 2.返回值也不需要定义类型,直接在函数内部使用return即可

调用:函数名(参数列表)

(传递可以传递任意数量的参数,但是只会接收对应形参个数;)

4.js对象

将会介绍数组对象,字符串对象,JSON与Obj对象,BOM对象,DOM对象

(1)Array

JS中Array对象用于定义数组

1.定义:

//方式1:
var 变量名 = new Array(元素列表); //var arr = new Array(1,2,3.4);//方式2:
var 变量名=[元素列表];		//var arr=[1,2,3,4];

2.属性:

length:设置或返回数组元素的数量。(无值元素也算长度)

3.方法

方法描述
forEach()遍历数组中的每个有值元素,并调用一次传入的函数
push()将新元素添加到数组的末尾,并返回新的长度
splice()从数组中删除元素
//forEach
arr.forEach(function(e){   console.log(e);							
})										
ES6:可以用箭头函数简化  
arr.forEach((e)=>{console.log(e);
})
//push
arr.push(7,8,9);
//splice
arr.splice(2,2); //从索引为2的地方开始删除2个元素,然后返回删除后的数组,会改变数组长度

(2)String

定义:

//方式1:
var 变量名 = new String("...");  //var str = new String("abc");//方式2:
var 变量名 = "...";			//var str = "abc";单双引号都一样

属性:

length:字符串长度

方法:

方法描述
charAt()返回在指定位置的字符
indexOf()检索字符串
trim()去除字符串两边的空格(不去除中间)
substring()提取字符串中两个指定的索引号直接的字符
//charAt()
let str = "Hello World";
console.log(str.charAt(1)); // 输出: "e"(索引1的字符)//indexOf()
let str = "Hello World, Hello JavaScript";
console.log(str.indexOf("Hello")); // 输出: 0(首次出现的位置)
console.log(str.indexOf("Hello", 5)); // 输出: 13(从索引5开始查找的首次位置)
console.log(str.indexOf("xyz")); // 输出: -1(未找到指定值)//trim()
let str = "   Hello   World   ";
let trimmedStr = str.trim();
console.log(trimmedStr); // 输出: "Hello   World"(仅去除首尾空格)//subString()
let str = "JavaScript";// 从索引0提取到索引4(不包含4)
console.log(str.substring(0, 4)); // 输出: "Java"// 省略第二个参数,提取从startIndex到字符串末尾
console.log(str.substring(4)); // 输出: "Script"

(3)JSON

1.介绍

JavaScript Object Notation(JS对象标记法。)

JSON是通过JS对象标记法书写的文本

由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输。

2.JS中Object对象的定义

var 对象名 = {属性名1:属性值1,			属性名2:属性值2,函数名称:function(形参列表){}
}//例子
var user = {name:"TOM",age:18,eat:function(){       	//eat(){alert("吃饭");}ES6可以alert("吃饭");}
}

3.JS中JSON的定义

在JS中这样定义出来的JSON本质上是个字符串;

var 变量名 = '{"key1":value1,"key2":"value2"}';//本质上就是字符串,内容为JSON格式数据
//value的值:数组放方括号中,对象放花括号中,字符串在双引号中

4.JS的Obj对象与JSON的互相转换

//JSON字符串转化为JS对象
var jsObject = JSON.parse(userStr);//JS对象转换为JSON字符串
var jsonStr = JSON.stringify(jsObject);

(4)BOM

1.介绍

Browser Object Model

2.组成:

Window:就是当前页面标签下的窗口(以下皆为其属性)

Navigator:就是单曲浏览器及其浏览器内核

Screen:当前的屏幕对象

History:返回上一页和历史记录

Location:地址栏(输入baidu.com的地方)

3.Window使用

浏览器窗口对象

window.alert("hello") //其中window可以省略 alert("hello")

属性:

history,location,navigator,screen

方法:

方法作用
alert()显示带有一段消息和一个确认按钮的警告框
confirm()显示带有一段消息以及确认按钮和取消按钮的对话框
setlntertval()按照指定的周期(毫秒计算)来调用函数或计算表达式
setTimeout()在指定的毫秒数后调用函数或计算表达式

3.Location使用

地址栏对象

window.location.属性		或  location.属性

属性:

href:设置或返回完整的URL

location.href = "https://www.abc.com";  //设置herf

(5)DOM

1.介绍

Document Object Model,文档对象模型;

DOM将标记语言的各个部分封装为对应的对象,我们通过操作对应的对象可以做到:

1.改变HTML元素内容

2.改变HTML元素的演示(CSS)

3.堆HTML DOM事件做出反应

4.添加和删除HTML元素

(那么重点就是:获取DOM对象、使用DOM对象的属性和方法)

2.DOM分类

DOM由W3C的标准,定义了访问HTML和XML文档的标准,分为3个不同的部分

(1)Core DOM – 所有文档类型的标准模型

对象类型作用域
Document整个文档对象
Element元素对象
Attribute属性对象
Text文本对象
Comment注释对象

(2)XML DOM:xml文档的标准模型

(3)HTML DOM:html文档的标准模型(多了更多对象,比如Image对应标签)

(HTML DOM扩充了更多了DOM对象;每一个对象都有对应的属性和方法能够调用;

3.DOM对象的获取

HTML中的Element对象可以通过Document对象获取,而Document对象是通过window对象获取。

Document对象中提供了获取Element元素对象的函数:

//1.根据id值获取,返回单个Element对象
var h1 = document.getElementById('h1');//2.根据标签名获取,放回Element对象数组
var divs = document.getElementByTagName('div');//3.根据标name属性获取,放回Element对象数组
var courses = document.getElementByName('course');//4.根据标class属性获取,放回Element对象数组
var clss = document.getElementByClassName('cls');

当我们需要得到DOM对象后,设置一个文档的样式的时候,我们可以直接使用标签,能够正确识别

//将所有的div标签的内容后面加上:very good(红色字体)
var divs = document.getElementByTagName('div');
for (let i =0; i < divs.length; i++){const div = divs[i];div.innerHTML += "<font color='red'>very good</font>"
}

5.js事件监听

(1)事件绑定

<!-- 方式1:通过HTML标签中的事件属性进行绑定 -->
<input type="button" onclick="on()" value="按钮1"><script>function on(){alert('触发点击事件');}
</script><!-- 方式2:过DOM元素属性绑定定 -->
<input type="button" id="btn" value="按钮2"><script>document.getElementById('btn').onclick=function(){alert('触发点击事件');}
</script>

(2)常见事件

事件名说明
onclick鼠标单击事件
onblur元素失去焦点
onfocus元素获取焦点
onload某个页面或图形完成被完成加载
onsubmit当表单提交时触发该事件
onkeydown某个键盘的键被按下
onmouseover鼠标被移动到某元素上
onmouseout鼠标从某元素移开

获得焦点是要点击进入,与鼠标移动到某元素还是有区别;

二、Vue

(1)介绍

Vue是一套前端框架,免除原生JS中的DOM操作,简化书写。

基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。

(框架:是一个半成品软件,一套可重用的、通用的、软件基础代码模型。)
在这里插入图片描述

快速入门:

三步:引入Vue.js文件,创建Vue对象并指定接管区域,编写视图时使用v-model进行双向绑定

(1)新建HTML页面,引入Vue.js文件

<script src="js/vue,js"></script>

(2)在JS代码区域,创建Vue核心对象,定义数据模型

<script>new Vue({el:"#app",data:{message:"Hello Vue!"}})
</script>

(3)编写视图

<div if="app"><input type="text" v-mdoel="message">{{message}}                            <!-- 插值表达式 -->
</div>

插值表达式:

  • 形式:{{表达式}}
  • 内容可以是:变量、三元运算符、函数调用、算术运算。

(2)常用指令

1.指令概念:指HTML标签上带有V-前缀的特殊属性,不同指令具有不同含义。如:v-if,v-for…

2.常用指令:

指令作用
v-bind为HTML标签绑定属性值,如设置 href,css样式等
v-model在表单元素上创建双向数据绑定
v-on为HTML标签绑定事件
v-if、v-else-if、v-else条件性的渲染某元素,判定为true时渲染,否则不渲染
v-show根据条件展示某元素,区别在于切换的是display属性的值
v-for列表渲染,遍历容器的元素或者对象的属性

3.指令使用示例:

(1)v-bind,v-model

v-bind:为HTML标签绑定属性值,如设置 href,css样式等

v-model:在表单元素上创建双向数据绑定

<!-- 1.v-bind -->
<a v-bind:herf="url">测试</a>
<a :herf="url">测试</a>		<!-- v-bind用:代替 --><!-- 2.model -->
<input type="text" v-model="url">
<script>new Vue({el:"#app",data:{url:"https://www.aaa.com"}})
</script>

通过v-bind或者v-model绑定的变量,必须在模型中声明

(2)v-on

v-on:为HTML标签绑定事件

<input type="button" value="按钮" v-on:click="handle()"> 
<input type="button" value="按钮" @click="handle()">	<!-- v-on用@代替 -->
<script>new Vue({el:"#app",data:{//....},methonds:{handle:function(){alert('点击事件');}},})
</script>

(3)v-if,v-show

v-if、v-else-if、v-else:条件性的渲染某元素,判定为true时渲染,否则不渲染

v-show:根据条件展示某元素,区别在于切换的是display属性的值,都会渲染一遍

  • v-if
年龄{{age}},经判定为:
<span v-if="age <= 35">年轻人</span>
<span v-else-if="age > 35 && age < 60">中年人</span>
<span v-else>老年人</span>
  • v-show
年龄{{age}},经判定为:
<span v-show="age <= 35">年轻人</span>

(4)v-for

v-for:列表渲染,遍历容器的元素或者对象的属性

<div v-for="addr in addrs">{{addr}}</div>
data:{...addrs:['湖南','江西','黑龙江']
}

(3)生命周期

**生命周期:**指一个对象从创建到销毁的整个过程

八个生命周期阶段如下:

每触发一个生命周期,会自动执行一个生命周期方法(钩子)。

状态阶段周期
beforeCreate创建前
created创建后
beforeMount挂载前
mounted挂载完成
beforeUpdate更新前
updated更新后
beforeDestory销毁前
destroyed销毁后
<script>new Vue({el:"#app",data:{//....},mounted(){console.log("Vue挂载完毕,发送请求获取数据");},methonds:{},})
</script>

vue流程图:

在这里插入图片描述

三、Ajax

(1)介绍:

Asynchronous JavaScript And XML,异步的JavaScript和XML

作用:

1.数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。

2.异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术。如:搜搜联想、用户名是否可用的校验等等

(2)同步与异步

  • 同步(Synchronous)
    客户端向服务端发送请求后,会阻塞当前操作流程,必须等待服务端返回响应(无论成功或失败),才能继续执行后续的代码或操作。
  • 异步(Asynchronous)
    客户端向服务端发送请求后,不会阻塞当前操作流程,可以立即执行后续的其他代码或操作;当服务端返回响应时,会通过回调函数、事件等方式通知客户端处理结果。

(3)原生Ajax

​ 原生Ajax事指不依赖第三方库,直接使用浏览器内置的XMLHttpRequest对象实现的异步网络请求技术;

他的实现一共有三步:

<script>function getData(){//1.创建XMLHttpRequestvar xmlHttpRequest = new XMLHttpRequset();//2.发送异步请求xmlHttpRequest.open('GET','URL');//创建请求xmlHttpRequest.send();		   //发送请求//3.获取服务器响应数据xmlHttpRequest.onreadystatechange = function(){if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){document.getElementById('div1'),innerHTML = xmlHttpRequest.reposeText;//更新div1处的内容为xmlHttpRequest.reposeText;}}}
</script>

我们可以在下面整个链接查看各个状态码对应的状态:

AJAX - XMLHttpRequest 对象

(4)Axios

Axios对原生的Ajax进行了封装,简化书写,快速开发;
image-20250827094828702

使用方式

无论哪种方式使用Axios,都需要引入Axios的js文件

<script src="js/axios-0.18.0.js"></script>

1.方式1

//(1)Get请求
axios({method:"get",url:"URL"
}).then((result)=>{			//成功回调函数console.log(result.data);
})//(2)Post请求(假设是根据id新增数据)
axios({method:"post",url:"URL",data:"id=1"
}).then((result)=>{console.log(result.data);
})

2.方式2(推荐使用方式2)

//格式:
//请求方法别名
axios.get(url,其余参数);
axios.post(url,data,其余参数)......
//示例:
//(1)Get请求
axios.get("URL").then((result)=>{			//成功回调函数console.log(result.data);
})
//(2)Post请求(假设是根据id新增数据)
axios.post("URL","id=1").then((result)=>{console.log(result.data);
})

3.使用案例:获取数据

<script>new Vue({el:"#app",data:{emps:[]},mounted(){//发送异步请求,加载数据axios.get("URL").then((result)=>{this.emps = result.data.data;})}})</script>

获取data中的data数组;

四、Nginx打包部署

(1)Nginx介绍

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,在各大型互联网公司都有非常广泛的使用。

在这里插入图片描述

官网:nginx

(2)打包部署流程

1.打包vue过程

npm run buid

打包完毕之后会生成一个叫dist的文件夹,里面就是HTML静态资源文件

2.部署

(1)Nginx目录结构如图

在这里插入图片描述

(2)部署步骤

1.将打包好的dist目录下面的文件,复制到nginx安装目录的html目录下

2.双击nginx.exe文件即可启动,Nginx服务器默认占用80端口

Nginx默认占用的80端口如果以及被使用,可以在nginx.conf中修改端口号。(netstat-ano | findStr 80)

五、前端工程化

(1)前后端分离:

在这里插入图片描述

我们可以使用API接口管理平台来实现前后端流畅对接。比如APIfox

(2)介绍:

前端工程化:是指在企业级的前端项目开发中,把前端开发所需的工具、技术、流程、经验等进行规范化、标准化。

在这里插入图片描述

http://www.xdnf.cn/news/19448.html

相关文章:

  • 差角函数差角矩阵位置编码
  • 无需服务器也能建网站:Docsify+cpolar让技术文档分享像写笔记一样简单
  • 手机版碰一碰发视频源码搭建,技术实现与实操指南
  • 鸿蒙开发进阶(HarmonyOS)
  • Unity中多线程与高并发下的单例模式
  • MobaXterm介绍
  • Git将多笔patch合并成一笔
  • 苹果 Safari 地址栏可能被超大光标视觉欺骗
  • HarvardX TinyML小笔记2(番外3:数据工程)(TODO)
  • 杰理ac791无法控制io脚原因
  • Coze源码分析-工作空间-项目开发-后端源码
  • 传输层TCP 与 安全层SSL/TLS
  • shell之扩展
  • 接口自动化测试之设置断言思路
  • 什么是MIPS架构?RISC-V架构?有什么区别?【超详细初学者教程】
  • 深入Linux内核:IPC资源管理揭秘
  • 从 “对话” 到 “共创”:生成式 AI 如何重塑内容创作全流程,普通人也能掌握的高效工具指南
  • MongoDB 备份与恢复:mongodump 和 mongorestore 实战
  • Qt 的信号signal的参数是否会在内部被拷贝?
  • duilib中CTextUI控件使用技巧与问题总结(CTextUI控件自适应文字宽度特性)
  • 如何正确使用ChatGPT做数学建模比赛——数学建模AI使用技巧
  • 【macOS】垃圾箱中文件无法清理的“含特殊字符文件名”的方法
  • 开发使用mybatis是用混合模式还是全注解模式
  • 陕西凉拌西瓜皮,变废为宝的陕味美味~
  • JavaScript 性能优化实战技术
  • 【GIS图像处理】有哪些SOTA方法可以用于将1.5米分辨率遥感图像超分辨率至0.8米精度的?
  • mysql实例是什么?
  • Midscenejs自然语言写测试用例
  • 基于uni-app的校园综合服务平台开发实战
  • 大模型落地全流程实践:从技术选型到企业级部署