《前端面试题:HTML5、CSS3、ES6新特性》
现代前端开发中,HTML5、CSS3和JavaScript ES6共同构成了三大核心技术支柱。这些技术不仅显著提升了用户体验和性能表现,更大幅提高了开发效率。本文将从技术演进、核心特性到最佳实践,系统性地介绍这三大技术的应用之道。
我们将首先探讨HTML5的创新特性,接着深入解析CSS3的重要功能,最后详细讲解ES6的核心语法特性。
为了帮助开发者将理论知识转化为实操能力,本文还将通过三个典型场景案例进行说明:PWA应用开发流程、数据可视化项目实现方案,以及跨平台Hybrid App构建方法。这些案例将完整展现现代Web应用的构建技巧。
关于各个知识点的详细解析,我们将在后续文章中逐一展开。
一、HTML5 全面革新
1. 语义化标签(Semantic Tags)
用途:创建自解释的文档结构,提升SEO、可访问性和代码可维护性
方法:使用语义标签替代通用div容器
核心标签:
<header>页面头部(标题/导航)</header>
<nav>导航链接集合</nav>
<main>页面主要内容区域</main>
<article>独立内容块(博客/新闻)</article>
<section>内容分组(章节)</section>
<aside>侧边内容(广告/引用)</aside>
<footer>页面底部(版权/联系)</footer>
<figure>媒体内容容器</figure>
<figcaption>媒体内容说明</figcaption>
<mark>高亮文本</mark>
<time datetime="2023-08-15">日期时间</time>
2. 多媒体支持
用途:原生音视频播放,替代Flash插件
方法:
<!-- 视频播放 -->
<video controls width="600" poster="preview.jpg"><source src="movie.mp4" type="video/mp4"><source src="movie.webm" type="video/webm"><track src="subs_en.vtt" kind="subtitles" srclang="en">浏览器不支持视频
</video><!-- 音频播放 -->
<audio controls loop><source src="audio.mp3" type="audio/mpeg"><source src="audio.ogg" type="audio/ogg">
</audio>
3. Canvas绘图
用途:实时生成图形、可视化图表及互动游戏
方法:
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');// 绘制路径
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(150, 100);
ctx.strokeStyle = 'blue';
ctx.stroke();// 渐变填充
const gradient = ctx.createLinearGradient(0,0,200,0);
gradient.addColorStop(0, 'red');
gradient.addColorStop(1, 'yellow');
ctx.fillStyle = gradient;
ctx.fillRect(50, 150, 200, 100);// 图像处理
const img = new Image();
img.onload = () => ctx.drawImage(img, 50, 300, 100, 100);
img.src = 'photo.jpg';
4. 表单增强
用途:更丰富的输入类型和验证
新类型:
<input type="email" required placeholder="电子邮箱">
<input type="url" placeholder="网站地址">
<input type="number" min="1" max="10" step="1">
<input type="range" min="0" max="100" value="50">
<input type="date" min="2020-01-01">
<input type="color" value="#ff0000">
<input type="search" autocomplete="on">
<input type="tel" pattern="[0-9]{3}-[0-9]{4}">
<datalist id="browsers"><option value="Chrome"><option value="Firefox">
</datalist>
<input list="browsers">
<output name="result">0</output>
5. Web存储
用途:客户端数据持久化存储
方法:
// localStorage (永久存储)
localStorage.setItem('theme', 'dark');
console.log(localStorage.getItem('theme'));// sessionStorage (会话存储)
sessionStorage.setItem('sessionID', 'ABC123');// IndexedDB (结构化数据)
const request = indexedDB.open('myDB', 1);
request.onupgradeneeded = (e) => {const db = e.target.result;const store = db.createObjectStore('users', { keyPath: 'id' });store.createIndex('nameIdx', 'name', { unique: false });
};// Web SQL (已废弃,但需了解)
const db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
db.transaction(tx => {tx.executeSql('CREATE TABLE IF NOT EXISTS users (id unique, name)');
});
6. 地理定位
用途:获取用户地理位置
方法:
navigator.geolocation.getCurrentPosition(position => {console.log(`纬度: ${position.coords.latitude}`);console.log(`经度: ${position.coords.longitude}`);console.log(`精度: ${position.coords.accuracy}米`);},error => console.error(`错误代码: ${error.code}`),{enableHighAccuracy: true,timeout: 5000,maximumAge: 0}
);
7. Web Workers
用途:后台线程执行CPU密集型任务
方法:
// 主线程
const worker = new Worker('task.js');
worker.postMessage({ data: 'start' });
worker.onmessage = e => console.log(e.data);// task.js
self.onmessage = e => {const result = heavyCalculation(e.data);self.postMessage(result);
};
8. WebSocket
用途:全双工实时通信
方法:
const socket = new WebSocket('wss://example.com/socket');socket.onopen = () => socket.send('Hello Server!');
socket.onmessage = e => console.log(`收到: ${e.data}`);
socket.onclose = () => console.log('连接关闭');
9. 拖放API
用途:实现元素拖放功能
方法:
// 可拖动元素
document.getElementById('dragItem').draggable = true;
dragItem.addEventListener('dragstart', e => {e.dataTransfer.setData('text/plain', e.target.id);
});// 放置区域
dropZone.addEventListener('dragover', e => e.preventDefault());
dropZone.addEventListener('drop', e => {e.preventDefault();const id = e.dataTransfer.getData('text/plain');e.target.appendChild(document.getElementById(id));
});
10. History API
用途:操作浏览器历史记录
方法:
// 添加历史记录
history.pushState({ page: 1 }, "Page 1", "/page1");// 替换当前记录
history.replaceState({ page: 2 }, "Page 2", "/page2");// 监听popstate事件
window.addEventListener('popstate', e => {console.log(`导航到: ${location.pathname}`, e.state);
});
二、CSS3 全面增强
1. 选择器系统
用途:精确选择DOM元素
新选择器:
/* 属性选择器 */
input[type="text"] { border: 1px solid #ccc; }
a[href^="https"]::after { content: " (安全)"; }/* 伪类选择器 */
li:nth-child(odd) { background: #f9f9f9; }
tr:nth-of-type(3n) { color: red; }
input:focus { outline: 2px solid blue; }
button:disabled { opacity: 0.5; }/* 伪元素 */
p::first-letter { font-size: 150%; }
p::selection { background: yellow; }
2. 盒模型
用途:控制元素尺寸和布局
特性:
.box {box-sizing: border-box; /* 包含padding和border */width: 300px;padding: 20px;border: 5px solid black; /* 实际内容宽度250px *//* 阴影效果 */box-shadow: 0 4px 8px rgba(0,0,0,0.1), inset 0 0 10px #ccc;/* 圆角 */border-radius: 15px 5px 15px 5px;/* 透明度 */opacity: 0.95;
}
3. 背景与渐变
用途:创建复杂背景效果
方法:
.element {/* 多重背景 */background: url('pattern.png') top left repeat,linear-gradient(to bottom, transparent, rgba(0,0,0,0.5));/* 背景裁剪 */background-clip: content-box;/* 背景定位 */background-position: center;/* 渐变 */background: radial-gradient(circle at top right, #ff9a9e, #fad0c4, #a1c4fd);/* 渐变动画 */background-size: 200% 200%;animation: gradientBG 5s ease infinite;
}@keyframes gradientBG {0% { background-position: 0% 50%; }50% { background-position: 100% 50%; }100% { background-position: 0% 50%; }
}
4. 过渡与变换
用途:创建平滑动画效果
方法:
.card {transition: transform 0.3s cubic-bezier(0.25, 0.1, 0.25, 1),opacity 0.4s ease-in-out;transform: rotate(0deg) scale(1);
}.card:hover {transform: rotate(3deg) scale(1.05);opacity: 0.9;/* 3D变换 */transform: perspective(800px) rotateY(15deg);
}
5. 动画系统
用途:创建复杂关键帧动画
方法:
@keyframes bounce {0%, 100% { transform: translateY(0); }50% { transform: translateY(-30px); }
}.element {animation: bounce 2s ease-in-out infinite,fadeIn 1s forwards;animation-delay: 0.5s;animation-fill-mode: both;
}
6. 弹性布局(Flexbox)
用途:一维响应式布局
方法:
.container {display: flex;flex-flow: row wrap; /* direction + wrap */justify-content: space-between; /* 主轴对齐 */align-items: center; /* 交叉轴对齐 */gap: 20px; /* 项目间距 */
}.item {flex: 1 0 200px; /* grow | shrink | basis */order: 2; /* 显示顺序 */align-self: flex-start; /* 单独对齐 */
}
7. 网格布局(Grid)
用途:二维响应式布局
方法:
.container {display: grid;grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));grid-auto-rows: minmax(100px, auto);gap: 20px;grid-template-areas:"header header header""sidebar main main""footer footer footer";
}.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main;display: subgrid; /* 嵌套网格 */
}
8. 媒体查询
用途:响应式设计核心
方法:
/* 基本媒体查询 */
@media (max-width: 768px) {.container { flex-direction: column; }
}/* 多条件查询 */
@media (min-width: 768px) and (max-width: 1024px) and (orientation: landscape) {/* 平板横屏样式 */
}/* 特性查询 */
@supports (display: grid) {.container { display: grid; }
}
9. 滤镜效果
用途:视觉特效处理
方法:
.image {filter: blur(2px) grayscale(50%) contrast(120%) drop-shadow(5px 5px 10px rgba(0,0,0,0.5));transition: filter 0.5s ease;
}.image:hover {filter: none;
}
10. 其他重要特性
/* 变量 */
:root {--primary-color: #3498db;--spacing: 20px;
}
.element {color: var(--primary-color);margin: var(--spacing);
}/* 多列布局 */
.multi-col {column-count: 3;column-gap: 30px;column-rule: 1px solid #ddd;
}/* 形状环绕 */
.shape {shape-outside: circle(50%);float: left;width: 200px;height: 200px;
}/* 滚动捕捉 */
.container {scroll-snap-type: y mandatory;overflow-y: scroll;
}
.section {scroll-snap-align: start;
}
三、ES6+ 全面升级
1. 变量声明
用途:更安全的变量作用域
方法:
let count = 0; // 块级作用域
const PI = 3.14159; // 常量声明
2. 箭头函数
用途:简化函数语法,自动绑定this
方法:
// 基本语法
const sum = (a, b) => a + b;// 返回对象
const createUser = (name, age) => ({ name, age });// this绑定
const obj = {values: [1, 2, 3],double: function() {return this.values.map(n => n * 2); // 正确绑定this}
};
3. 模板字符串
用途:字符串插值和多行字符串
方法:
const user = { name: 'Alice', age: 28 };// 基本插值
console.log(`Hello ${user.name}, next year you'll be ${user.age + 1}`);// 多行字符串
const html = `<div class="user-card"><h2>${user.name}</h2><p>Age: ${user.age}</p></div>
`;// 标签模板
function highlight(strings, ...values) {return strings.reduce((result, str, i) => `${result}${str}<span class="highlight">${values[i] || ''}</span>`, '');
}highlight`User ${user.name} is ${user.age} years old`;
4. 解构赋值
用途:从对象/数组中提取数据
方法:
// 对象解构
const { name, age: userAge, ...rest } = user;// 数组解构
const [first, second, , fourth] = [1, 2, 3, 4];// 函数参数解构
function printUser({ name, age = 18 }) {console.log(`${name}, ${age}`);
}// 默认值
const { settings = { theme: 'light' } } = options;
5. 扩展运算符
用途:合并/复制对象和数组
方法:
// 数组扩展
const arr1 = [1, 2];
const arr2 = [...arr1, 3, 4]; // [1,2,3,4]// 对象扩展
const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 }; // {a:1, b:2, c:3}// 函数参数
const numbers = [5, 10, 15];
Math.max(...numbers); // 15// 浅拷贝
const arrCopy = [...originalArray];
const objCopy = { ...originalObject };
6. 类与继承
用途:面向对象编程语法糖
方法:
class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a noise.`);}static info() {return "Animal class";}
}class Dog extends Animal {constructor(name, breed) {super(name);this.breed = breed;}speak() {super.speak();console.log(`${this.name} barks!`);}get description() {return `${this.name} (${this.breed})`;}set nickname(value) {this._nickname = value;}
}const rex = new Dog('Rex', 'Labrador');
rex.speak();
7. 模块系统
用途:代码组织和复用
方法:
// math.js
export const PI = 3.14159;export function circleArea(r) {return PI * r ** 2;
}export default class Calculator {add(a, b) { return a + b; }
}// app.js
import { PI, circleArea } from './math.js';
import Calc from './math.js'; // 默认导入const calc = new Calc();
console.log(calc.add(2, PI));
8. Promise与异步
用途:处理异步操作
方法:
// Promise基础
new Promise((resolve, reject) => {setTimeout(() => resolve('成功!'), 1000);
})
.then(result => console.log(result))
.catch(error => console.error(error));// Promise链
fetch('/api/data').then(response => response.json()).then(data => processData(data)).catch(handleError);// Promise.all
Promise.all([fetch(url1), fetch(url2)]).then(([res1, res2]) => [res1.json(), res2.json()])).then(([data1, data2]) => console.log(data1, data2));
9. Async/Await
用途:同步方式写异步代码
方法:
async function loadData() {try {const user = await fetch('/api/user');const posts = await fetch(`/api/posts?userId=${user.id}`);return { user, posts };} catch (error) {console.error('加载失败:', error);throw error;}
}// 并行请求
async function loadAll() {const [user, settings] = await Promise.all([fetch('/api/user'),fetch('/api/settings')]);return { user, settings };
}
10. 迭代器与生成器
用途:自定义迭代行为
方法:
// 迭代器
const myIterable = {[Symbol.iterator]: function* () {yield 1;yield 2;yield 3;}
};// 生成器
function* idGenerator() {let id = 1;while (true) {yield id++;}
}const gen = idGenerator();
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
11. 其他重要特性
// 增强的对象字面量
const name = 'Alice';
const obj = {name, // 属性简写greet() { // 方法简写console.log(`Hello ${this.name}`);},[computedKey]: 'value' // 计算属性名
};// 新的数据结构
const set = new Set([1, 2, 3, 3]); // 集合 [1,2,3]
const map = new Map(); // 键值对
map.set('name', 'Alice');
map.get('name');// 可选链操作符
const street = user?.address?.street;// 空值合并
const name = inputName ?? 'Anonymous';// Promise.allSettled
Promise.allSettled([promise1, promise2]).then(results => {results.forEach(result => {if (result.status === 'fulfilled') {console.log(result.value);} else {console.error(result.reason);}});});
四、综合应用:现代用户面板
<section class="user-dashboard"><header><h1>用户控制面板</h1><nav><button class="active">概览</button><button>设置</button><button>分析</button></nav></header><div class="grid-container"><article class="user-card"><canvas id="avatarCanvas" width="150" height="150"></canvas><h2 data-name="user-name">张三</h2><p>注册时间: <time datetime="2022-03-15">2022年3月15日</time></p></article><section class="stats"><h3>活动统计</h3><div class="chart-container"></div></section></div><footer><button id="notifyBtn">发送通知</button></footer>
</section>
.user-dashboard {display: grid;grid-template-rows: auto 1fr auto;min-height: 100vh;background: linear-gradient(135deg, #f5f7fa, #c3cfe2);
}.grid-container {display: grid;grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));gap: 25px;padding: 20px;
}.user-card {background: white;border-radius: 16px;box-shadow: 0 10px 30px rgba(0,0,0,0.08);padding: 25px;transition: transform 0.3s ease;&:hover {transform: translateY(-5px) rotate(1deg);}h2 {color: var(--primary-color, #3498db);}
}#notifyBtn {background: linear-gradient(to right, #3498db, #2ecc71);border: none;padding: 12px 30px;border-radius: 50px;color: white;font-size: 1rem;cursor: pointer;transition: all 0.3s ease;&:hover {transform: scale(1.05);box-shadow: 0 5px 15px rgba(52, 152, 219, 0.4);}&:active {transform: scale(0.98);}
}
class UserDashboard {constructor() {this.canvas = document.getElementById('avatarCanvas');this.notifyBtn = document.getElementById('notifyBtn');this.userName = document.querySelector('[data-name="user-name"]');this.init();}async init() {this.renderAvatar();this.loadUserData();this.notifyBtn.addEventListener('click', this.sendNotification);}renderAvatar() {const ctx = this.canvas.getContext('2d');const gradient = ctx.createRadialGradient(75,75,5,75,75,75);gradient.addColorStop(0, '#3498db');gradient.addColorStop(1, '#1a5276');ctx.beginPath();ctx.arc(75, 75, 70, 0, Math.PI * 2);ctx.fillStyle = gradient;ctx.fill();ctx.font = 'bold 40px Arial';ctx.fillStyle = 'white';ctx.textAlign = 'center';ctx.fillText(this.userName.textContent.charAt(0), 75, 95);}async loadUserData() {try {const response = await fetch('/api/user');const data = await response.json();localStorage.setItem('userData', JSON.stringify(data));this.renderUserInfo(data);} catch (error) {console.error('加载用户数据失败:', error);this.showFallbackData();}}renderUserInfo(data) {this.userName.textContent = data.name;// 使用解构和默认值const { joined = new Date(), role = 'Member' } = data;document.querySelector('time').textContent = new Date(joined).toLocaleDateString();// 更新图表this.renderChart(data.stats);}sendNotification = async () => {try {const permission = await Notification.requestPermission();if (permission === 'granted') {new Notification('系统通知', {body: '您有新的消息',icon: 'notification-icon.png'});}} catch (error) {console.error('通知发送失败:', error);}}
}// 初始化
document.addEventListener('DOMContentLoaded', () => {const dashboard = new UserDashboard();
});
五、浏览器支持与最佳实践
1. 渐进增强策略
-
使用特性检测而非浏览器检测
// 检测WebP支持
async function checkWebPSupport() {const webpData = 'data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAwA0JaQAA3AA/vuUAAA=';const img = new Image();return new Promise(resolve => {img.onload = () => resolve(true);img.onerror = () => resolve(false);img.src = webpData;});
}
2. 现代化构建流程
# 使用Babel转换ES6+语法
npm install @babel/core @babel/preset-env# 使用PostCSS处理CSS3
npm install postcss autoprefixer cssnano# 典型构建脚本
"scripts": {"build": "babel src -d dist && postcss src/styles.css -o dist/styles.css"
}
3. 性能优化策略
-
使用CSS will-change属性
.animated-element {will-change: transform, opacity;
}
-
代码分割与懒加载
const module = await import('./module.js');
-
Web Workers处理复杂计算
-
虚拟滚动处理长列表
4. 安全最佳实践
-
内容安全策略(CSP)
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://apis.example.com">
-
使用Subresource Integrity
<script src="https://example.com/library.js"integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"crossorigin="anonymous"></script>
结语
HTML5、CSS3和ES6共同构成了现代Web开发的三大支柱:
-
HTML5 提供了丰富的语义化标签和强大的API(Canvas、Web存储、WebSocket等)
-
CSS3 带来了革命性的布局系统(Flexbox/Grid)、动画和视觉效果
-
ES6 引入了现代化编程范式(类、模块、异步处理等)
这些技术的综合应用使开发者能够构建高性能、可维护且用户体验卓越的Web应用。随着Web标准的持续演进,掌握这些核心技术将为前端开发者奠定坚实的基础,迎接WebAssembly、Web Components和Progressive Web Apps等新一代Web技术的挑战。
相关文章:
《前端面试题:HTML5、CSS3、ES6新特性》
现代前端开发中,HTML5、CSS3和JavaScript ES6共同构成了三大核心技术支柱。这些技术不仅显著提升了用户体验和性能表现,更大幅提高了开发效率。本文将从技术演进、核心特性到最佳实践,系统性地介绍这三大技术的应用之道。 我们将首先探讨HTM…...

MaxCompute开发UDF和UDTF案例
文章目录 一、Java开发UDF1、创建Maven项目2、创建UDF类3、打包上传资源4、创建函数MyUDF5、SQL验证 二、Java开发UDTF1、创建Maven项目2、创建UDTF类3、打包上传更新资源4、创建函数MyUDTF5、SQL验证 三、常见问题1、发布函数报错 一、Java开发UDF 1、创建Maven项目 创建Mav…...

49套夏日小清新计划总结日系卡通ppt模板
绿色小清新PPT模版,日系小清新PPT模版,粉红色PPT模版,蓝色PPT模版,草青色PPT模版,日系卡通PPT模版 49套夏日小清新计划总结日系卡通ppt模板:夏日小清新日系卡通PPT模版https://pan.quark.cn/s/9e4270d390fa…...

告别硬编码!用工厂模式优雅构建可扩展的 Spring Boot 应用 [特殊字符]
嗨,各位技术伙伴们!👋 在日常的软件开发中,我们经常面临需求变更的挑战。如何构建一个既能满足当前需求,又能轻松应对未来变化的系统呢?答案往往藏在那些经典的设计模式中。 今天,我们就来聊聊…...

Express教程【006】:使用Express写接口
文章目录 8、使用Express写接口8.1 创建API路由模块8.2 编写GET接口8.3 编写POST接口 8、使用Express写接口 8.1 创建API路由模块 1️⃣新建routes/apiRouter.js路由模块: /*** 路由模块*/ // 1-导入express const express require(express); // 2-创建路由对象…...

mongodb集群之分片集群
目录 1. 适用场景2. 集群搭建如何搭建搭建实例Linux搭建实例(待定)Windows搭建实例1.资源规划2. 配置conf文件3. 按顺序启动不同角色的mongodb实例4. 初始化config、shard集群信息5. 通过router进行分片配置 1. 适用场景 数据量大影响性能 数据量大概达到千万级或亿级的时候&…...

Starrocks Full GC日志分析
GC日志样例: [2025-06-03T07:36:06.1770800] GC(227) Pause Full (G1 Evacuation Pause) [2025-06-03T07:36:06.1960800] GC(227) Phase 1: Mark live objects [2025-06-03T07:36:06.9480800] GC(227) Cleaned string and symbol table, strings: 47009 processed,…...

飞算 JavaAI 赋能老项目重构:破旧立新的高效利器
许多企业的 Java 老项目面临着代码陈旧、架构落后、维护困难等问题。老项目重构势在必行,却又因庞大的代码量、复杂的业务逻辑让开发团队望而却步。 老项目重构困境重重 传统的 Java 老项目往往在长期的迭代和维护中积累了诸多问题。一方面,代码质量堪…...
RockyLinux9安装Docker
如何在RockyLinux9下安装Docker RockyLinux采用了全新的dnf来进行包管理,dnf支持yum别名,还没习惯的可以将dnf替换为yum 确保dnf最新 sudo dnf update -y安装dnf-plugins-core包 sudo dnf install -y dnf-plugins-core yum-utils添加Docker的官方仓库…...
RequestRateLimiterGatewayFilterFactory
一、功能说明 RequestRateLimiterGatewayFilterFactory 是 Spring Cloud Gateway 的流量控制组件,用于实现 API 请求速率限制,核心功能包括: 限制单位时间内的请求数量(如每秒10次)防止服务被突发流量击垮࿰…...
解决 xmlsec.InternalError: (-1, ‘lxml xmlsec libxml2 library version mismatch‘)
解决 xmlsec.InternalError: (-1, ‘lxml & xmlsec libxml2 library version mismatch’) 错误信息如下: Traceback (most recent call last):File "/home/mobsf/Mobile-Security-Framework-MobSF/manage.py", line 18, in <module>execute_f…...
【Linux基础知识系列】第九篇-Shell脚本入门
在Linux世界中,Shell脚本是自动化任务和简化操作的重要工具。它可以帮助用户编写一系列命令,自动执行重复的任务,从而提高工作效率。在本篇文章中,我们将介绍Shell脚本的基本概念、编写方法、常用命令和结构。通过这些内容&#x…...

typescript的Interface和Type
类型别名和接口非常相似,在大多数情况下你可以在它们之间自由选择。 几乎所有的 interface 功能都可以在 type 中使用,关键区别在于不能重新开放类型以添加新的属性,而接口始终是可扩展的。 // window.ts.transpileModule(src, {}); 这是调…...

java后端生成心电图-jfreechart
用jfreechart生成心电图 先上成功的图片 上代码 1.导入包 implementation org.jfree:jfreechart:1.5.4implementation org.jfree:jcommon:1.0.242.实现代码 对数据进行滤波 转换单位 package com.shinrun.infrastructure.util;import java.util.ArrayList; import java.ut…...

算法/机理模型演示平台搭建(二)——算法接口部署(FastApi)
算法/机理模型演示平台搭建(二)—— 算法接口部署(FastApi) 1. 项目结构2. 构建 Docker 镜像3. 运行 Docker 容器4. 访问 API 文档5. 调用 API1. 项目结构 app app/algorithms app/models Dockerfile FROM python:3.9-slimWORKDIR /codeCOPY ./requirements.txt /code…...

动态规划-647.回文子串-力扣(LeetCode)
一、题目解析 这里的子字符串是连续的,与之前的子序列不同,这里需要我们统计回文子串的数目。 二、算法原理 这里也有其他算法可以解决该问题,如中心扩展算法 时间复杂度O(N^2)/空间复杂度O(1),马拉车算法(具有局限性) 时间复杂…...
es 的字段类型(text和keyword)
Text 当一个字段是要被全文检索时,比如 Email 内容、产品描述,这些字段应该使用 text 类型。设置 text 类型以后,字段内容会被分析,在生成倒排索引之前,字符串会被分析器分词。text类型的字段不用于排序,很…...
Kotlin 中companion object {} 什么时候触发
在 Kotlin 中,companion object 的初始化触发时机是一个重要但容易被忽视的细节。以下是详细的解释: 1. 基本触发时机 companion object 的初始化发生在: 首次访问该类时(无论是访问伴生对象成员、创建类实例,还是通过…...

仿真每日一练 | Workbench中接触种类及选择方法简介
Workbench中给我们提供的接触类型主要包括以下几种👇 ◆ 1、摩擦 ◆ 2、无摩擦 ◆ 3、绑定 ◆ 4、不分离 ◆ 5、粗糙 ◆ 6、强制滑移 下面通过最常用的摩擦和绑定给大家展示两者的区别,同时文末也给大家介绍了几种接触的选择方法。首先先给大家介绍一下…...

Go语言中的rune和byte类型详解
1. rune类型 1.1. 基本概念 1. rune是Go语言的内建类型,它是int32的别名,即32位有符号整数; 2. 用于表示一个Unicode码点,全拼Unicode code point; 3. 可以表示任何UTF-8编码的字符; 1.2. 特点 1. 每…...
superior哥AI系列第6期:Transformer注意力机制:AI界的“注意力革命“
🎭 superior哥AI系列第6期:Transformer注意力机制:AI界的"注意力革命" 嘿!小伙伴们!👋 今天superior哥要带你们探索AI界最火的技术——Transformer!这个家伙可了不得,它不…...

【java面试】redis篇
redis篇 一、适用场景(一)缓存1、缓存穿透1.1 解决方案1:缓存空数据,查询返回的数据为空,将空结果缓存1.2 解决方案2:布隆过滤器 2、缓存击穿1.1 解决方案1:互斥锁1.2 解决方案2:逻辑…...

高效易用的 MAC 版 SVN 客户端:macSvn 使用体验
高效易用的 MAC 版 SVN 客户端:macSvn 使用体验 下载安装使用总结 最近有个项目要使用svn, 但是mac缺乏一款像 Windows 平台 TortoiseSVN 那样全面、高效且便捷的 SVN 客户端工具, 直到博主找到了该工具本文将结合实际使用体验,详细介绍 macSvn工具的核心…...
【搭建 Transformer】
搭建 Transformer 的基本步骤 Transformer 是一种基于自注意力机制的深度学习模型,广泛应用于自然语言处理任务。以下为搭建 Transformer 的关键步骤和代码示例。 自注意力机制 自注意力机制是 Transformer 的核心,计算输入序列中每个元素与其他元素的…...
自然图像数据集
目录 CIFAR-10 数据集CIFAR-100 数据集AFHQ 数据集FFHQ 数据集 CIFAR-10 数据集 简介: CIFAR-10 是一个经典的图像分类数据集,广泛用于机器学习领域的计算机视觉算法基准测试。它包含60000幅32x32的彩色图像,分为10个类,每类6000…...
Linux下使用nmcli连接网络
Linux下使用nmcli连接网络 介绍 在使用ubuntu系统的时候,有时候不方便使用桌面,使用ssh远程连接,可能需要使用nmcli命令来连接网络。本文将介绍如何使用nmcli命令连接网络。nmcli 是 NetworkManager 的命令行工具,用于管理网络连…...

HCIP(BGP综合实验)
一、实验拓扑 AS 划分: AS1:R1(环回 L0:172.16.0.1/32,L1:192.168.1.0/24)AS2:R2、R3、R4、R5、R6、R7(内部运行 OSPF,AS 号为 64512 和 64513 的联盟)AS3:R…...

Attention Is All You Need (Transformer) 以及Transformer pytorch实现
参考https://zhuanlan.zhihu.com/p/569527564 Attention Is All You Need (Transformer) 是当今深度学习初学者必读的一篇论文。 一. Attention Is All You Need (Transformer) 论文精读 1. 知识准备 机器翻译,就是将某种语言的一段文字翻译成另一段文字。 由…...

uniapp+vue2+uView项目学习知识点记录
持续更新中... 1、发送给朋友,分享到朋友圈功能开启 利用onShareAppMessage和onShareTimeline生命周期函数,在script中与data同级去写 // 发送给朋友 onShareAppMessage() {return {title: 清清前端, // 分享标题path: /pages/index/index, // 分享路…...

精美的软件下载页面HTML源码:现代UI与动画效果的完美结合
精美的软件下载页面HTML源码:现代UI与动画效果的完美结合 在数字化产品推广中,一个设计精良的下载页面不仅能提升品牌专业度,还能显著提高用户转化率。本文介绍的精美软件下载页面HTML源码,通过现代化UI设计与丰富的动画效果&…...