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

markdown-it基本使用

markdown-it能够将markdown语法的内容转换为html内容,这样我们使用markdown语法写的笔记,就可以转换作为网页使用了

Markdown语法

Markdown语法图文全面详解(10分钟学会)

基础使用

安装markdown-it

npm install markdown-it --save

使用markdown-it

可以看到,使用markdown-it,我们把markdown语法的内容转为了html内容。我们发现,md内容中标记的java语言代码会包裹再pre code标签中,并且再highlight函数中回调。。
在这里插入图片描述

转化的html文档

在这里插入图片描述

<style lang="scss">.container {width: 600px;margin: 10px auto;textarea {outline: none;}}
</style><template><div class="container"><textarea v-model="mdContent" rows="6" style="width: 100%;"></textarea><div v-html="htmlContent"></div></div>
</template><script>
import MarkdownIt from 'markdown-it'
const MarkdownIt2 = require('markdown-it')let md1 = new MarkdownIt()
let md2 = new MarkdownIt2()
console.log(md1);
console.log(md2);console.log(md1.render('# markdown-it rulezz!'));/* h1>markdown-it rulezz!</h1> */
console.log(md2.render('# markdown-it rulezz!'));/* h1>markdown-it rulezz!</h1> */const md = new MarkdownIt({html: true,linkify: true,typographer: true,breaks: true,highlight: function(str, lang) {console.log('str->',str,'lang->',lang);}
})export default {name: 'md2Html',data() {return {mdContent:'',htmlContent:'',}},watch: {mdContent(newVal,oldVal) {this.htmlContent = md.render(newVal)}}
}
</script>

代码简单高亮1

根据我们前面学到的highlight.js的用法,我们可以这么做,在编辑的时候实时高亮,就是在md转完html,并且渲染完成后,在$nextTick中,高亮对应的html就可以了。
在这里插入图片描述

<style lang="scss">.container {width: 600px;margin: 10px auto;textarea {outline: none;}}
</style><template><div class="container"><textarea v-model="mdContent" rows="6" style="width: 100%;"></textarea><div v-html="htmlContent"></div></div>
</template><script>
import MarkdownIt from 'markdown-it'
const MarkdownIt2 = require('markdown-it')import hljs from 'highlight.js'
import 'highlight.js/styles/atom-one-dark.css'let md1 = new MarkdownIt()
let md2 = new MarkdownIt2()
console.log(md1);
console.log(md2);console.log(md1.render('# markdown-it rulezz!'));/* h1>markdown-it rulezz!</h1> */
console.log(md2.render('# markdown-it rulezz!'));/* h1>markdown-it rulezz!</h1> */const md = new MarkdownIt({html: true,linkify: true,typographer: true,breaks: true,highlight: function(str, lang) {console.log('str->',str,'lang->',lang);}
})export default {name: 'md2Html',data() {return {mdContent:'',htmlContent:'',}},watch: {mdContent(newVal,oldVal) {this.htmlContent = md.render(newVal)this.$nextTick(()=>{console.log(333);document.querySelectorAll('pre code').forEach((el) => {hljs.highlightElement(el);});})}}
}
</script>

代码高亮2(学习风宇blog)

添加功能:

  • 代码高亮
  • 行号
  • 一键复制
    在这里插入图片描述
<style lang="scss">
@import url('https://fonts.font.im/css?family=Roboto');* {font-family: 'Roboto';
}.container {width: 600px;margin: 10px auto;textarea {outline: none;}
}/* 行号样式 */
.line-numbers-rows {position: absolute;pointer-events: none;top: 18px;font-size: 100%;left: 0.5em;width: 2.1em;letter-spacing: -1px;border-right: 1px solid #0e0f12;-webkit-user-select: none;-moz-user-select: none;user-select: none;background-color: #282c34;
}pre {position: relative;padding-left: 2.6em;line-height: 1.3em;
}.line-numbers-rows>span {display: block;counter-increment: linenumber;
}pre {background-color: #282c34;border-radius: 8px;
}pre code {border-radius: 8px;
}.line-numbers-rows>span:before {content: counter(linenumber);color: #999;display: block;padding-right: 0.8em;text-align: right;
}.language-name {position: absolute;top: 9px;color: #999999;right: 43px;font-size: 0.8em;-webkit-user-select: none;-moz-user-select: none;user-select: none;
}.copy-btn {position: absolute;right: 8px;top: 8px;background-color: #525252;border: none;padding: 3px 6px;border-radius: 3px;color: #cccccc;cursor: pointer;display: none;
}pre:hover .copy-btn {display: block;
}.copy-textarea {position: absolute;left: -9999px;top: -9999px;
}
</style><template><div class="container"><textarea v-model="mdContent" rows="6" style="width: 100%;"></textarea><div v-html="htmlContent"></div></div>
</template><script>
import { getArticle } from '@/api/articleApi'import ClipboardJS from 'clipboard'
console.log(ClipboardJS);import MarkdownIt from 'markdown-it'
const MarkdownIt2 = require('markdown-it')import hljs from 'highlight.js'
import 'highlight.js/styles/atom-one-dark.css'let md1 = new MarkdownIt()
let md2 = new MarkdownIt2()
console.log(md1);
console.log(md2);console.log(md1.render('# markdown-it rulezz!'));/* h1>markdown-it rulezz!</h1> */
console.log(md2.render('# markdown-it rulezz!'));/* h1>markdown-it rulezz!</h1> */const md = new MarkdownIt({html: true,linkify: true,typographer: true,breaks: true,highlight: function (str, lang) {/* str-> @Configuration@EnableWebMvc@EnableGlobalMethodSecurity(prePostEnabled = true) // 因为要控制controller中的方法访问,所以此注解要加到子容器中@ComponentScan(basePackages = "com.zzhua.controller",excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Service.class)})public class MyWebConfig implements WebMvcConfigurer {@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {// 开启静态资源访问configurer.enable();}}lang-> java {name: 'Java', aliases: Array(1), keywords: {…}, illegal: /<\/|#/, contains: Array(23), …}*/console.log('str->', str, 'lang->', lang, hljs.getLanguage('java'));/* <span class="hljs-meta">@Configuration</span><span class="hljs-meta">@EnableWebMvc</span><span class="hljs-meta">@EnableGlobalMethodSecurity(prePostEnabled = true)</span> <span class="hljs-comment">// 因为要控制controller中的方法访问,所以此注解要加到子容器中</span><span class="hljs-meta">@ComponentScan(basePackages = &quot;com.zzhua.controller&quot;,excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Service.class)})</span><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">MyWebConfig</span> <span class="hljs-keyword">implements</span> <span class="hljs-title class_">WebMvcConfigurer</span> {<span class="hljs-meta">@Override</span><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">configureDefaultServletHandling</span><span class="hljs-params">(DefaultServletHandlerConfigurer configurer)</span> {<span class="hljs-comment">// 开启静态资源访问</span>configurer.enable();}}*/console.log(hljs.highlight(str, { language: lang }).value);if (lang && hljs.getLanguage(lang)) {try {let highlightedHtml = hljs.highlight(str, { language: lang }).value// 生成行号let lineNum = highlightedHtml.split('\n').length - 1let lineNumbersRowsStart = `<span aria-hidden="true" class="line-numbers-rows">`let lineNumbersRowsEnd = `</span>`for (let i = 0; i < lineNum; i++) {lineNumbersRowsStart += `<span></span>`}const lineNumbersRows = lineNumbersRowsStart + lineNumbersRowsEndlet languageName = `<b class="language-name">${lang}</b>`// 当前时间加随机数生成唯一的id标识var d = new Date().getTime();if (window.performance && typeof window.performance.now === "function") {d += performance.now();}const codeIndex = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function (c) {var r = (d + Math.random() * 16) % 16 | 0;d = Math.floor(d / 16);return (c == "x" ? r : (r & 0x3) | 0x8).toString(16);});// 复制功能需要一个textarea(这个id需要前面加个字母啥的,不能以数字开头)let textAreaHtml = `<textarea class="copy-textarea" id="copy${codeIndex}">${str}</textarea>`let copyButton = `<button class="copy-btn iconfont icon-fuzhi"  data-clipboard-action="copy" data-clipboard-target="#copy${codeIndex}" type="button"></button>`/* 如果返回的不含pre code标签,它会自己加上;如果返回的含有pre code标签,它就不加了 */return `<pre><code class="language-${lang} hljs">${highlightedHtml}</code>${lineNumbersRows}${languageName}${copyButton}${textAreaHtml}</pre>`;} catch (__) { }}return ""}
})export default {name: 'md2Html',data() {return {mdContent: '',htmlContent: '',}},mounted() {getArticle(29).then(data => {this.mdContent = data.mdContent})},watch: {mdContent(newVal, oldVal) {let _this = thisthis.htmlContent = md.render(newVal)this.$nextTick(() => {var clipboard = new ClipboardJS('.copy-btn');clipboard.on('success', function (e) {console.info('Action:', e.action);console.info('Text:', e.text);console.info('Trigger:', e.trigger);_this.$toast('success','复制成功了哦');e.clearSelection();});clipboard.on('error', function (e) {console.error('Action:', e.action);console.error('Trigger:', e.trigger);});})}}
}
</script>

markdown-it 扩展插件

有些markdown语法,在没有装插件之前不能正常显示,需要安装插件后,才能正确显示。

使用示例

需要安装插件,安装命令在后面

import MarkdownIt from 'markdown-it'
let md1 = new MarkdownIt()
console.log('未用markdown-it-sub时: ', md1.render('H~2~0')); /* 未用markdown-it-sub时: <p>H~2~0</p> */const md3 = new MarkdownIt().use(require('markdown-it-sub'))
console.log('使用markdown-it-sub时: ', md3.render('H~2~0')); /* 使用markdown-it-sub时: <p>H<sub>2</sub>0</p> */console.log(md3.render('Hello from mars :satellite:'));md3.use(require('markdown-it-emoji')) /* <p>Hello from mars :satellite:</p> */console.log(md3.render('Hello from mars :satellite:'));/* <p>Hello from mars 📡</p> */

代码

在这里插入图片描述
安装插件

npm i markdown-it-sub markdown-it-sup markdown-it-mark markdown-it-abbr markdown-it-container markdown-it-deflist markdown-it-emoji markdown-it-footnote markdown-it-ins markdown-it-katex-external markdown-it-task-lists --save
<style lang="scss">
@import url('https://fonts.font.im/css?family=Roboto');* {font-family: 'Roboto';
}.container {width: 600px;margin: 10px auto;textarea {outline: none;}
}/* 行号样式 */
.line-numbers-rows {position: absolute;pointer-events: none;top: 18px;font-size: 100%;left: 0.5em;width: 2.1em;letter-spacing: -1px;border-right: 1px solid #0e0f12;-webkit-user-select: none;-moz-user-select: none;user-select: none;background-color: #282c34;
}pre {position: relative;padding-left: 2.6em;line-height: 1.3em;
}.line-numbers-rows>span {display: block;counter-increment: linenumber;
}pre {background-color: #282c34;border-radius: 8px;
}pre code {border-radius: 8px;
}.line-numbers-rows>span:before {content: counter(linenumber);color: #999;display: block;padding-right: 0.8em;text-align: right;
}.language-name {position: absolute;top: 9px;color: #999999;right: 43px;font-size: 0.8em;-webkit-user-select: none;-moz-user-select: none;user-select: none;
}.copy-btn {position: absolute;right: 8px;top: 8px;background-color: #525252;border: none;padding: 3px 6px;border-radius: 3px;color: #cccccc;cursor: pointer;display: none;
}pre:hover .copy-btn {display: block;
}.copy-textarea {position: absolute;left: -9999px;top: -9999px;
}
</style><template><div class="container"><textarea v-model="mdContent" rows="6" style="width: 100%;"></textarea><div v-html="htmlContent"></div></div>
</template><script>
import { getArticle } from '@/api/articleApi'import ClipboardJS from 'clipboard'
console.log(ClipboardJS);import MarkdownIt from 'markdown-it'
const MarkdownIt2 = require('markdown-it')import hljs from 'highlight.js'
import 'highlight.js/styles/atom-one-dark.css'let md1 = new MarkdownIt()
let md2 = new MarkdownIt2()
console.log(md1);
console.log(md2);console.log(md1.render('# markdown-it rulezz!'));/* h1>markdown-it rulezz!</h1> */
console.log(md2.render('# markdown-it rulezz!'));/* h1>markdown-it rulezz!</h1> */const md = new MarkdownIt({html: true,linkify: true,typographer: true,breaks: true,highlight: function (str, lang) {/* str-> @Configuration@EnableWebMvc@EnableGlobalMethodSecurity(prePostEnabled = true) // 因为要控制controller中的方法访问,所以此注解要加到子容器中@ComponentScan(basePackages = "com.zzhua.controller",excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Service.class)})public class MyWebConfig implements WebMvcConfigurer {@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {// 开启静态资源访问configurer.enable();}}lang-> java {name: 'Java', aliases: Array(1), keywords: {…}, illegal: /<\/|#/, contains: Array(23), …}*/console.log('str->', str, 'lang->', lang, hljs.getLanguage('java'));/* <span class="hljs-meta">@Configuration</span><span class="hljs-meta">@EnableWebMvc</span><span class="hljs-meta">@EnableGlobalMethodSecurity(prePostEnabled = true)</span> <span class="hljs-comment">// 因为要控制controller中的方法访问,所以此注解要加到子容器中</span><span class="hljs-meta">@ComponentScan(basePackages = &quot;com.zzhua.controller&quot;,excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Service.class)})</span><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">MyWebConfig</span> <span class="hljs-keyword">implements</span> <span class="hljs-title class_">WebMvcConfigurer</span> {<span class="hljs-meta">@Override</span><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">configureDefaultServletHandling</span><span class="hljs-params">(DefaultServletHandlerConfigurer configurer)</span> {<span class="hljs-comment">// 开启静态资源访问</span>configurer.enable();}}*/console.log(hljs.highlight(str, { language: lang }).value);if (lang && hljs.getLanguage(lang)) {try {let highlightedHtml = hljs.highlight(str, { language: lang }).value// 生成行号let lineNum = highlightedHtml.split('\n').length - 1let lineNumbersRowsStart = `<span aria-hidden="true" class="line-numbers-rows">`let lineNumbersRowsEnd = `</span>`for (let i = 0; i < lineNum; i++) {lineNumbersRowsStart += `<span></span>`}const lineNumbersRows = lineNumbersRowsStart + lineNumbersRowsEndlet languageName = `<b class="language-name">${lang}</b>`// 当前时间加随机数生成唯一的id标识var d = new Date().getTime();if (window.performance && typeof window.performance.now === "function") {d += performance.now();}const codeIndex = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function (c) {var r = (d + Math.random() * 16) % 16 | 0;d = Math.floor(d / 16);return (c == "x" ? r : (r & 0x3) | 0x8).toString(16);});// 复制功能需要一个textarea(这个id需要前面加个字母啥的,不能以数字开头)let textAreaHtml = `<textarea class="copy-textarea" id="copy${codeIndex}">${str}</textarea>`let copyButton = `<button class="copy-btn iconfont icon-fuzhi"  data-clipboard-action="copy" data-clipboard-target="#copy${codeIndex}" type="button"></button>`/* 如果返回的不含pre code标签,它会自己加上;如果返回的含有pre code标签,它就不加了 */return `<pre><code class="language-${lang} hljs">${highlightedHtml}</code>${lineNumbersRows}${languageName}${copyButton}${textAreaHtml}</pre>`;} catch (__) { }}return ""}
})  .use(require("markdown-it-sub")).use(require("markdown-it-sup")).use(require("markdown-it-mark")).use(require("markdown-it-abbr")).use(require("markdown-it-container")).use(require("markdown-it-deflist")).use(require("markdown-it-emoji")).use(require("markdown-it-footnote")).use(require("markdown-it-ins")).use(require("markdown-it-katex-external")).use(require("markdown-it-task-lists"));console.log('未用markdown-it-sub时: ', md1.render('H~2~0')); /* 未用markdown-it-sub时: <p>H~2~0</p> */
const md3 = new MarkdownIt().use(require('markdown-it-sub'))
console.log('使用markdown-it-sub时: ', md3.render('H~2~0')); /* 使用markdown-it-sub时: <p>H<sub>2</sub>0</p> */console.log(md3.render('Hello from mars :satellite:'));
md3.use(require('markdown-it-emoji')) /* <p>Hello from mars :satellite:</p> */
console.log(md3.render('Hello from mars :satellite:'));/* <p>Hello from mars 📡</p> */export default {name: 'md2Html',data() {return {mdContent: '',htmlContent: '',}},mounted() {getArticle(29).then(data => {this.mdContent = data.mdContent})},watch: {mdContent(newVal, oldVal) {let _this = thisthis.htmlContent = md.render(newVal)this.$nextTick(() => {var clipboard = new ClipboardJS('.copy-btn');clipboard.on('success', function (e) {console.info('Action:', e.action);console.info('Text:', e.text);console.info('Trigger:', e.trigger);_this.$toast('success','复制成功了哦');e.clearSelection();});clipboard.on('error', function (e) {console.error('Action:', e.action);console.error('Trigger:', e.trigger);});})}}
}
</script>

相关文章:

markdown-it基本使用

markdown-it能够将markdown语法的内容转换为html内容&#xff0c;这样我们使用markdown语法写的笔记&#xff0c;就可以转换作为网页使用了 Markdown语法 Markdown语法图文全面详解(10分钟学会) 基础使用 安装markdown-it npm install markdown-it --save使用markdown-it …...

CMake入门教程【核心篇】8.3对象库

文章目录 知识点实例代码目录代码实现知识点 add_library(libhello OBJECT src/hello.cpp)使用OBJECT 参数可以把对象传入到libhello 中,且不会生成.lib文件 使用变量$<TARGET_OBJECTS:libhello>即可获取,比较实用 实例 代码目录 |-📁prj10   |-- 🎴CMakeLists…...

单片机_CT107D训练平台电路原理图\蓝桥杯训练板\IO扩展模块\74HC138译码器

74HC138译码器&#xff08;实现3个IO口控制8个引脚实现IO口的扩展&#xff09; 配置信号放大模块&#xff0c;可以对输入的低电压模拟信号进行放大&#xff1b; 配置 138 译码器&#xff0c;可以做译码实验&#xff1b; 外设可以用存储器映射方式访问&#xff0c;也可以直接控…...

Rabbitmq消息确认机制

1.生产者确认机制 确认消息发送到交换机--Confirm方式 1.1普通Confirm方式 private static void sendMsg(Channel channel) throws IOException, InterruptedException { //开启确认机制 channel.confirmSelect(); //发送消息到exchange St…...

FinClip 云开发实践(附小程序demo)

在开发一个小程序时&#xff0c;除了考虑界面功能逻辑外&#xff0c;还需要后端的数据支持&#xff0c;开发者需要提前考虑服务器、存储和数据库等相关需求的支持能力&#xff0c;此外还可能需要花费时间精力在部署应用、和依赖服务的建设上。 ​ 因此&#xff0c;腾讯小程序为…...

真正好用的工业品ERP系统应该是什么样的?

一个好用的进销存ERP系统应该有以下特点&#xff1a; 1. 全面覆盖企业经营流程&#xff0c;包括采购、销售、库存、财务等模块&#xff0c;能够实现全方位的管理和控制。 2. 自定义配置&#xff0c;灵活地适应大多数用户的需求。 3. 数据精准、实时化&#xff0c;支持统计分…...

Shiro重定向

使用了统一认证&#xff0c;然后每次登录&#xff0c;不能定向到用户指定的界面&#xff0c;非得回到首页&#xff0c;所以做了如下改动 1、在FormAuthenticationFilter中在issueSuccessRedirect中加上五句话。 Overrideprotected void issueSuccessRedirect(ServletRequest …...

Greenplum数据库执行器——PartitionSelector执行节点

为了能够对分区表有优异的处理能力&#xff0c;对于查询优化系统来说一个最基本的能力就是做分区裁剪partition pruning&#xff0c;将query中并不涉及的分区提前排除掉。如下执行计划所示&#xff0c;由于单表谓词在parititon key上&#xff0c;在优化期间即可确定哪些可以分区…...

POJ 2311 Cutting Game

POJ 2311 Cutting Game 题目大意 有一张有whw\times hwh个格子的长方形纸张&#xff0c;两个人轮流将当前的纸张中选一张&#xff0c;并沿着格子的边界将这张纸剪成两部分。最先切出只有一个格子的纸张&#xff08;111\times 111的纸张&#xff09;的玩家获胜。当双方都采用最…...

CTF-PHP反序列化漏洞1-基础知识

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。我的…...

【面试】记一次安恒面试及总结

文章目录SQL 注入sql注入的原理&#xff1f;如何通过SQL注入判断对方数据库类型&#xff1f;补充一下其他方法判断数据库类型时间盲注的函数XPath注入抓不到http/https包&#xff0c;怎么办&#xff1f;app无自己的ssl证书app有自己的ssl证书-证书绑定(SSL pinning)逻辑漏洞有哪…...

刹车制动(卡钳)TOP3供应商份额超50%,哪些本土供应商突围

作为中国本土底盘系统供应商最早切入的细分市场之一&#xff0c;乘用车&#xff08;液压&#xff09;刹车制动器&#xff08;含卡钳&#xff09;由连接到车轮的制动盘和位于制动盘边缘的卡钳组成。制动时&#xff0c;高压刹车油推动刹车片夹紧刹车盘&#xff0c;从而产生制动效…...

Go分布式爬虫笔记(二十二)

文章目录22 辅助任务管理&#xff1a;任务优先级、去重与失败处理设置爬虫最大深度避免请求重复设置优先队列设置随机User-Agent失败处理22 辅助任务管理&#xff1a;任务优先级、去重与失败处理 设置爬虫最大深度 目的: 防止访问陷入到死循环控制爬取的有效链接的数量 最大…...

跨线程修改主界面

winform 方式&#xff1a; public delegate void MyInvoke(string str1); private void check_Click(object sender, RoutedEventArgs e) { //跨现场调度1 delete委托 WIMFORM Task.Run(() > { …...

国内ChatGPt研发-中国chatGPT

人工智能软件chatGPT Chat GPT是一种自然语言处理算法&#xff0c;采用了深度学习技术&#xff0c;用于实现文本生成和自然语言处理任务。它可以实现自然而然的人机交互&#xff0c;在自然语言生成和问答领域应用广泛。 值得注意的是&#xff0c;Chat GPT本身并不是一款具体的…...

springboot的rest服务配置服务的根路径

如果不配置默认为空&#xff0c;如下是application.yml文件只配置了端口号 server:port: 6868 那么访问时直接访问服务即可 如果配置了rest服务 RestController RequestMapping("/netLicense") public class NetLicenseController {RequestMapping("/getLice…...

MySQL B+Tree 索引优化技巧

文章目录前言一、BTree索引的基本原理二、BTree索引的性能优化技巧1.索引列的选择2.索引列的顺序3.索引长度4.索引的覆盖性5. 索引的唯一性总结前言 MySQL是一种开源关系型数据库管理系统&#xff0c;被广泛应用于各种应用程序中。作为一种关系型数据库&#xff0c;MySQL使用B…...

100种思维模型之逆向思维模型-46

芒格思考问题总是从逆向开始&#xff01;正如他经常提到的一句谚语&#xff1a;如果我能够知道我将死在哪里&#xff0c;那么我将永远不去那个地方。 马云有句口头禅&#xff1a;倒立看世界&#xff0c;一切皆有可能&#xff01; 遇到难题时&#xff0c;不妨回头看看&#xff0…...

C/C++每日一练(20230413)

目录 1. 与浮点数A最接近的分数B/C &#x1f31f; 2. 比较版本号 &#x1f31f;&#x1f31f; 3. 无重复字符的最长子串 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…...

volatile和synchronized的区别

volatile和synchronized的区别并发编程三个特性&#xff1a;原子性有序性可见性ViolatedSynchronized区别对比并发编程三个特性&#xff1a; 原子性、有序性、可见性 原子性 volatile无法保证原子性。 synchronized是排它锁&#xff0c;被synchronzied修饰的代码不能被打断…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...