JasonsGong.github.io/index.html
2024-03-28 16:14:50 +08:00

452 lines
55 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>The Blog</title><meta name="author" content="Jason"><meta name="copyright" content="Jason"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="Debug the World">
<meta property="og:type" content="website">
<meta property="og:title" content="The Blog">
<meta property="og:url" content="https://jasonsgong.gitee.io/index.html">
<meta property="og:site_name" content="The Blog">
<meta property="og:description" content="Debug the World">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://jasonsgong.gitee.io/img/avatar.jpg">
<meta property="article:author" content="Jason">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://jasonsgong.gitee.io/img/avatar.jpg"><link rel="shortcut icon" href="/img/%E5%9B%BE%E6%A0%87.png"><link rel="canonical" href="https://jasonsgong.gitee.io/index.html"><link rel="preconnect" href="//fastly.jsdelivr.net"/><link rel="preconnect" href="//hm.baidu.com"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="/cdn/icon/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/cdn/css/snackbar.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/cdn/css/fancybox.min.css" media="print" onload="this.media='all'"><script>var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?aad83e413776c1cd5d11ed7eeedd98f7";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: {"path":"/search.xml","preload":true,"top_n_per_article":1,"unescape":false,"languages":{"hits_empty":"找不到您查询的内容:${query}","hits_stats":"共找到 ${hits} 篇文章"}},
translate: undefined,
noticeOutdate: undefined,
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":400},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: true,
post: true
},
runtime: '天',
dateSuffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'mediumZoom',
Snackbar: {"chs_to_cht":"你已切换为繁体","cht_to_chs":"你已切换为简体","day_to_night":"你已切换为深色模式","night_to_day":"你已切换为浅色模式","bgLight":"#006650","bgDark":"#006650","position":"top-center"},
source: {
justifiedGallery: {
js: 'https://fastly.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.js',
css: 'https://fastly.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.css'
}
},
isPhotoFigcaption: false,
islazyload: false,
isAnchor: true,
percent: {
toc: true,
rightside: false,
},
autoDarkmode: true
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: 'The Blog',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2024-03-28 16:14:31'
}</script><noscript><style type="text/css">
#nav {
opacity: 1
}
.justified-gallery img {
opacity: 1
}
#recent-posts time,
#post-meta time {
display: inline !important
}
</style></noscript><script>(win=>{
win.saveToLocal = {
set: function setWithExpiry(key, value, ttl) {
if (ttl === 0) return
const now = new Date()
const expiryDay = ttl * 86400000
const item = {
value: value,
expiry: now.getTime() + expiryDay,
}
localStorage.setItem(key, JSON.stringify(item))
},
get: function getWithExpiry(key) {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = new Date()
if (now.getTime() > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = url => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
script.onerror = reject
script.onload = script.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
script.onload = script.onreadystatechange = null
resolve()
}
document.head.appendChild(script)
})
win.getCSS = (url,id = false) => new Promise((resolve, reject) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = url
if (id) link.id = id
link.onerror = reject
link.onload = link.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
link.onload = link.onreadystatechange = null
resolve()
}
document.head.appendChild(link)
})
win.activateDarkMode = function () {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
win.activateLightMode = function () {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
const t = saveToLocal.get('theme')
const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
const isLightMode = window.matchMedia('(prefers-color-scheme: light)').matches
const isNotSpecified = window.matchMedia('(prefers-color-scheme: no-preference)').matches
const hasNoSupport = !isDarkMode && !isLightMode && !isNotSpecified
if (t === undefined) {
if (isLightMode) activateLightMode()
else if (isDarkMode) activateDarkMode()
else if (isNotSpecified || hasNoSupport) {
const now = new Date()
const hour = now.getHours()
const isNight = hour <= 8 || hour >= 22
isNight ? activateDarkMode() : activateLightMode()
}
window.matchMedia('(prefers-color-scheme: dark)').addListener(function (e) {
if (saveToLocal.get('theme') === undefined) {
e.matches ? activateDarkMode() : activateLightMode()
}
})
} else if (t === 'light') activateLightMode()
else activateDarkMode()
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
if (asideStatus === 'hide') {
document.documentElement.classList.add('hide-aside')
} else {
document.documentElement.classList.remove('hide-aside')
}
}
const detectApple = () => {
if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
document.documentElement.classList.add('apple')
}
}
detectApple()
})(window)</script><script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script type="text/javascript" src ="/js/welcome.js" ></script><script src="/js/sweetalert.js"></script><link rel="stylesheet" href="/css/sweetalert.css"><!-- hexo injector head_end start --><link rel="stylesheet" href="https://npm.elemecdn.com/hexo-butterfly-swiper/lib/swiper.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://npm.elemecdn.com/hexo-butterfly-swiper/lib/swiperstyle.css" media="print" onload="this.media='all'"><!-- hexo injector head_end end --><meta name="generator" content="Hexo 6.3.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/avatar.jpg" onerror="onerror=null;src='/img/loading.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">77</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">47</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">10</div></a></div><br/><div class="menus_items"><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://gitee.com/JasonsGong/jasonsgong/pages"><i class="fa-fw fas fa-sync-alt"></i><span> 更新</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://www.tutorialspoint.com/compile_java8_online.php"><i class="fa-fw fas fa-code"></i><span> 代码</span></a></div><div class="menus_item"><a class="site-page" href="/notice/"><i class="fa-fw fas fa-stream"></i><span> 公告</span></a></div><div class="menus_item"><a class="site-page" href="/website/"><i class="fa-fw fas fa-list"></i><span> 网址</span></a></div><div class="menus_item"><a class="site-page" href="/record/"><i class="fa-fw fas fa-bars"></i><span> 记录</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://tongji.baidu.com/main/overview/10000573913/overview/index?siteId=20315864"><i class="fa-fw fas fa-chart-line"></i><span> 统计</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://jasonsgong.github.io"><i class="fa-fw fas fa-wave-square"></i><span> 镜像</span></a></div><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="not-top-img" id="page-header"><nav id="nav"><span id="blog-info"><a href="/" title="The Blog"><img class="site-icon" src="/img/logo.png"/><span class="site-name">The Blog</span></a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search" href="javascript:void(0);"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://gitee.com/JasonsGong/jasonsgong/pages"><i class="fa-fw fas fa-sync-alt"></i><span> 更新</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://www.tutorialspoint.com/compile_java8_online.php"><i class="fa-fw fas fa-code"></i><span> 代码</span></a></div><div class="menus_item"><a class="site-page" href="/notice/"><i class="fa-fw fas fa-stream"></i><span> 公告</span></a></div><div class="menus_item"><a class="site-page" href="/website/"><i class="fa-fw fas fa-list"></i><span> 网址</span></a></div><div class="menus_item"><a class="site-page" href="/record/"><i class="fa-fw fas fa-bars"></i><span> 记录</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://tongji.baidu.com/main/overview/10000573913/overview/index?siteId=20315864"><i class="fa-fw fas fa-chart-line"></i><span> 统计</span></a></div><div class="menus_item"><a class="site-page" target="_blank" rel="noopener" href="https://jasonsgong.github.io"><i class="fa-fw fas fa-wave-square"></i><span> 镜像</span></a></div><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div></div><div id="toggle-menu"><a class="site-page" href="javascript:void(0);"><i class="fas fa-bars fa-fw"></i></a></div></div></nav></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item" style="width:100%;height:auto;"><img src="https://ghchart.rshah.org/008000/JasonsGong" alt style="width:100%;height:100%;padding-left: 2em;padding-right: 2em;padding-top: 1.2em;padding-bottom: 1.5em;"></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/64695.html" title="项目实战-黑马头条"><img class="post-bg" src="/img/4.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="项目实战-黑马头条"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/64695.html" title="项目实战-黑马头条">项目实战-黑马头条</a><div class="article-meta-wrap"><span class="article-meta"><i class="fas fa-thumbtack sticky"></i><span class="sticky">置顶</span><span class="article-meta-separator">|</span></span><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2023-08-07T09:12:08.000Z" title="发表于 2023-08-07 17:12:08">2023-08-07</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2023-12-09T13:49:14.388Z" title="更新于 2023-12-09 21:49:14">2023-12-09</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%90%8E%E7%AB%AF/">后端</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/">项目实战</a></span></div><div class="content">一.项目介绍1.项目概述​ 随着智能手机的普及,人们更加习惯于通过手机来看新闻。由于生活节奏的加快,很多人只能利用碎片时间来获取信息,因此,对于移动资讯客户端的需求也越来越高。黑马头条项目正是在这样背景下开发出来。黑马头条项目采用当下火热的微服务+大数据技术架构实现。本项目主要着手于获取最新最热新闻资讯,通过大数据分析用户喜好精确推送咨询新闻。
2.业务说明功能架构图
3.技术栈
Spring-Cloud-Gateway : 微服务之前架设的网关服务实现服务注册中的API请求路由以及控制流速控制和熔断处理都是常用的架构手段而这些功能Gateway天然支持
运用Spring Boot快速开发框架构建项目工程并结合Spring Cloud全家桶技术实现后端个人中心、自媒体、管理中心等微服务。
运用Spring Cloud Alibaba Nacos作为项目中的注册中心和配置中心
运用mybatis-plus作为持久层提升开发效率
运用Kafka完成内部系统消息通知与客户端系统消息通知以及实时数据计算
运用Redis缓存技术实现热数据的计算提升系统性能指标
使用My ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/5293.html" title="开源项目-若依框架"><img class="post-bg" src="/img/9.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="开源项目-若依框架"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/5293.html" title="开源项目-若依框架">开源项目-若依框架</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2024-02-02T14:26:04.000Z" title="发表于 2024-02-02 22:26:04">2024-02-02</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2024-02-03T14:30:54.022Z" title="更新于 2024-02-03 22:30:54">2024-02-03</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/">开源项目</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/%E8%8B%A5%E4%BE%9D/">若依</a></span></div><div class="content">一.若依简介官网简介
RuoYi 是一个后台管理系统,主要目的让开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。
单体版本技术栈Spring Boot、Apache Shiro、MyBatis、Thymeleaf
前后端分离版本技术栈SpringBoot、Spring Security、Jwt、Vue
微服务版本技术栈Spring Boot、Spring Cloud &amp; Alibaba
相关网站
若依官网http://ruoyi.vip(opens new window)
演示地址http://demo.ruoyi.vip(opens new window)
代码下载https://gitee.com/y_project/RuoYi
文档地址https://doc.ruoyi.vip/ruoyi/
总结
若依就是一个后台管理系统的通用模板,这个模板中包含了后台管理系统的常用功能,比如登录、权限管理、菜单管理、用户管理等,避免我们在开发中重复造轮子,让开发回归到业务本身。
二.下载使用1.前置环境后端:JDK、Maven、My ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/200.html" title="常用bat和shell脚本"><img class="post-bg" src="/img/6.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="常用bat和shell脚本"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/200.html" title="常用bat和shell脚本">常用bat和shell脚本</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2024-01-17T16:12:17.000Z" title="发表于 2024-01-18 00:12:17">2024-01-18</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2024-01-19T11:49:36.772Z" title="更新于 2024-01-19 19:49:36">2024-01-19</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%90%8E%E7%AB%AF/">后端</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/%E8%84%9A%E6%9C%AC/">脚本</a></span></div><div class="content">
BAT脚本即批处理脚本是Microsoft Windows操作系统下一种简单的脚本编程形式。它主要用于自动化一系列命令行操作通过编写一个文本文件并将其扩展名设置为.bat或.cmd用户可以创建一个批处理程序。当双击运行这样一个批处理文件时操作系统会按照文件中逐行定义的顺序依次执行其中包含的命令。
Shell脚本是一种在类Unix操作系统如Linux、macOS中使用的脚本编程形式它是基于特定的Shell解释器如Bash、Zsh、Ksh等来编写的纯文本文件。Shell脚本通常具有.sh扩展名通过在脚本开头声明指定的Shell类型如#!/bin/bash确保系统知道应使用哪种Shell来解释和执行该脚本。
一.博客自动化脚本12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/26357.html" title="WebSocket使用案例"><img class="post-bg" src="/img/3.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="WebSocket使用案例"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/26357.html" title="WebSocket使用案例">WebSocket使用案例</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2024-01-17T05:36:33.000Z" title="发表于 2024-01-17 13:36:33">2024-01-17</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2024-01-17T13:39:10.166Z" title="更新于 2024-01-17 21:39:10">2024-01-17</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%90%8E%E7%AB%AF/">后端</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/WebSocket/">WebSocket</a></span></div><div class="content">一.消息推送常见方式
1.轮询和长轮询
2.SSE
二.WebSocket介绍1.基本介绍
2.原理解析
三.WebSocket API1.客户端API
2.服务端API
四.在线聊天室实现1.实现效果
2.流程分析
</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/40733.html" title="免费好用的PDF工具"><img class="post-bg" src="/img/2.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="免费好用的PDF工具"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/40733.html" title="免费好用的PDF工具">免费好用的PDF工具</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2024-01-13T07:10:44.000Z" title="发表于 2024-01-13 15:10:44">2024-01-13</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2024-01-13T07:29:05.730Z" title="更新于 2024-01-13 15:29:05">2024-01-13</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7/">常用工具</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/PDF/">PDF</a></span></div><div class="content">一.PDFgear
免费、无需登录注册、支持编辑和PDF与格式文件的相互转换
1.下载地址官网地址https://www.pdfgear.com/zh/
2.介绍无需登录无需付费、支持PDF与其他格式的文件的相互转化、拆分合并PDF、压缩PDF、OCR文字识别
二.stiring-pdf
github开源需要自己使用Docker部署!
github仓库地址https://github.com/Stirling-Tools/Stirling-PDF
部署命令
12345678docker run -d \ -p 8080:8080 \ -v /location/of/trainingData:/usr/share/tesseract-ocr/5/tessdata \ -v /location/of/extraConfigs:/configs \ -v /location/of/logs:/logs \ -e DOCKER_ENABLE_SECURITY=false \ --name stirling-pdf \ frooodle/s-pdf:lates ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/56106.html" title="Linux运维管理面板-1Panel"><img class="post-bg" src="/img/10.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Linux运维管理面板-1Panel"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/56106.html" title="Linux运维管理面板-1Panel">Linux运维管理面板-1Panel</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2024-01-01T11:16:11.000Z" title="发表于 2024-01-01 19:16:11">2024-01-01</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2024-01-06T07:38:30.831Z" title="更新于 2024-01-06 15:38:30">2024-01-06</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E8%BF%90%E7%BB%B4/">运维</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/1Panel/">1Panel</a></span></div><div class="content">一.官方文档官网1Panel - 现代化、开源的 Linux 服务器运维管理面板
官方文档1Panel 文档
1Panel是飞致云旗下的一款现代化、开源的 Linux 服务器运维管理面板
二.安装教程详细安装教程见官方文档:在线安装 - 1Panel 文档
12#linux命令一键安装并启动curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &amp;&amp; sh quick_start.sh
安装成功后浏览器访问http://目标服务器 IP 地址:目标端口/安全入口进入运维面板(安装成功后根据命令行返回链接和密码信息访问并登录面板即可)
三.常用工具1.Fail2ban简介
Fail2Ban 是一款入侵防御软件,可以保护服务器免受暴力攻击。 它是用 Python 编程语言编写的。 Fail2Ban 基于auth 日志文件工作,默认情况下它会扫描所有 auth 日志文件,如 &#x2F;var&#x2F;log&#x2F;auth.log、&# ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/58456.html" title="OCR-图片文字识别"><img class="post-bg" src="/img/9.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="OCR-图片文字识别"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/58456.html" title="OCR-图片文字识别">OCR-图片文字识别</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2023-12-08T12:36:43.000Z" title="发表于 2023-12-08 20:36:43">2023-12-08</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2023-12-08T13:23:52.255Z" title="更新于 2023-12-08 21:23:52">2023-12-08</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%90%8E%E7%AB%AF/">后端</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/OCR/">OCR</a></span></div><div class="content">一.什么是OCROCR Optical Character Recognition光学字符识别是指电子设备例如扫描仪或数码相机检查纸上打印的字符通过检测暗、亮的模式确定其形状然后用字符识别方法将形状翻译成计算机文字的过程
方案
说明
百度OCR
收费
Tesseract-OCR
Google维护的开源OCR引擎支持JavaPython等语言调用
Tess4J
封装了Tesseract-OCR 支持Java调用
二.Tesseract-OCR 的特点
Tesseract支持UTF-8编码格式并且可以“开箱即用”地识别100多种语言
Tesseract支持多种输出格式纯文本hOCRHTMLPDF等
官方建议为了获得更好的OCR结果最好提供给高质量的图像
Tesseract进行识别其他语言的训练具体的训练方式请参考官方提供的文档https://tesseract-ocr.github.io/tessdoc/
三.使用案例1.导入相关的依赖12345&lt;dependency&gt; &lt;groupId&g ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/28101.html" title="DFA算法实现敏感词自管理"><img class="post-bg" src="/img/1.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="DFA算法实现敏感词自管理"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/28101.html" title="DFA算法实现敏感词自管理">DFA算法实现敏感词自管理</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2023-12-03T05:28:05.000Z" title="发表于 2023-12-03 13:28:05">2023-12-03</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2023-12-03T08:24:29.365Z" title="更新于 2023-12-03 16:24:29">2023-12-03</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%90%8E%E7%AB%AF/">后端</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/DFA/">DFA</a></span></div><div class="content">一.需求分析​ 在审核文本内容的时候,我们可以调用第三方成熟的服务(例如阿里云的内容安全)来实现,但是基于不同的场景,第三方的服务不可能涉及到方方面面的敏感词,比如在游戏类的场景中,开挂一词算敏感词,但是在其它的场景中,开挂一词是一个正常的词汇。这时候需要我们根据不同场景自己维护一套敏感词,在文本审核的时候,需要验证文本中是否包含这些敏感词。
二.可选方案
方案
说明
数据库模糊查询
效率太低
String.indexOf(“”)查找
数据库量大的话也是比较慢
全文检索
分词再匹配
DFA算法
确定有穷自动机(一种数据结构)
三. DFA算法1.简介DFA全称为Deterministic Finite Automaton,即确定有穷自动机。
存储一次性的把所有的敏感词存储到了多个map中就是下图表示这种结构
敏感词:冰毒、大麻、大坏蛋
2.检索过程
四.工具类1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/12367.html" title="特殊符号大全"><img class="post-bg" src="/img/9.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="特殊符号大全"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/12367.html" title="特殊符号大全">特殊符号大全</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2023-11-30T15:21:10.000Z" title="发表于 2023-11-30 23:21:10">2023-11-30</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2023-12-03T05:47:15.776Z" title="更新于 2023-12-03 13:47:15">2023-12-03</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%85%B6%E5%AE%83/">其它</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/%E7%89%B9%E6%AE%8A%E7%AC%A6%E5%8F%B7/">特殊符号</a></span></div><div class="content">中文字符零壹贰叁肆伍陆柒捌玖拾佰仟万亿吉太拍艾分厘毫微卍卐卄巜弍弎弐朤氺曱甴囍兀々〆のぁ〡〢〣〤〥〦〧〨〩㊎㊍㊌㊋㊏㊚㊛㊐㊊㊣㊤㊥㊦㊧㊨㊒㊫㊑㊓㊔㊕㊖㊗㊘㊜㊝㊞㊟㊠㊡㊢㊩㊪㊬㊭㊮㊯㊰㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉
常用特殊符号❤❥웃유♋☮✌☏☢☠✔☑♚▲♪✈✞÷↑↓◆◇⊙■□△▽¿─│♥❣♂♀☿Ⓐ✍✉☣☤✘☒♛▼♫⌘☪≈←→◈◎☉★☆⊿※¡━┃♡ღツ☼☁❅♒✎©®™Σ✪✯☭➳卐√↖↗●◐Θ◤◥︻〖〗┄┆℃℉°✿ϟ☃☂✄¢€£∞✫★½✡×↙↘○◑⊕◣◢︼【】┅┇☽☾✚〓▂▃▄▅▆▇█▉▊▋▌▍▎▏↔↕☽☾の•▸◂▴▾┈┊①②③④⑤⑥⑦⑧⑨⑩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍿▓♨♛❖♓☪✙┉┋☹☺☻تヅツッシÜϡﭢ™℠℗©®♥❤❥❣❦❧♡۵웃유ღ♋♂♀☿☼☀☁☂☄☾☽❄☃☈⊙☉℃℉❅✺ϟ☇♤♧♡♢♠♣♥♦☜☞☝✍☚☛☟✌✽✾✿❁❃❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴✵✶✷✸✹✺✻✼❄❅❆❇❈❉❊†☨✞✝☥☦☓☩☯☧☬☸✡♁✙♆。,、':∶;?‘’“”〝〞ˆˇ﹕︰﹔﹖﹑•¨….¸;!´?!~—ˉ|‖"〃`@﹫¡¿﹏﹋﹌︴々﹟#﹩$﹠&amp;﹪%*﹡﹢﹦﹤‐ ̄¯―﹨ˆ˜﹍﹎ ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/posts/53769.html" title="Hive中使用UDF函数的简单示例"><img class="post-bg" src="/img/3.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Hive中使用UDF函数的简单示例"></a></div><div class="recent-post-info"><a class="article-title" href="/posts/53769.html" title="Hive中使用UDF函数的简单示例">Hive中使用UDF函数的简单示例</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2023-11-17T14:22:37.000Z" title="发表于 2023-11-17 22:22:37">2023-11-17</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2023-11-30T15:18:39.211Z" title="更新于 2023-11-30 23:18:39">2023-11-30</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/Hive/">Hive</a></span></div><div class="content">一.UDF函数介绍 UDFuser difine function用户自定义函数在Hive的使用中系统内置函数有时无法满足业务需求这时就需要开发者自己编写函数来实现业务需求。
二.简单示例1.创建一个maven工程前置条件: Java环境Maven环境IDEA开发工具
2.在pom.xml文件中引入udf的依赖12345&lt;dependency&gt; &lt;groupId&gt;org.apache.hive&lt;/groupId&gt; &lt;artifactId&gt;hive-exec&lt;/artifactId&gt; &lt;version&gt;0.13.1&lt;/version&gt;&lt;/dependency&gt;
3.编写udf函数创建一个java类继承UDF类实现evaluate()方法evaluate()方法可以重载
1234567891011121314151617181920import org.apache.hadoop.hive.ql.exec.UDF;public class MyUDF ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/#content-inner">2</a><span class="space">&hellip;</span><a class="page-number" href="/page/8/#content-inner">8</a><a class="extend next" rel="next" href="/page/2/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/avatar.jpg" onerror="this.onerror=null;this.src='/img/loading.gif'" alt="avatar"/></div><div class="author-info__name">Jason</div><div class="author-info__description">Debug the World</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">77</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">47</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">10</div></a></div><a id="card-info-btn"><i class="fab fa-microsoft"></i><span>Ctrl + D 收藏</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/JasonsGong" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="tencent://AddContact/?fromId=45&amp;fromSubId=1&amp;subcmd=all&amp;uin=2602183349&amp;website=www.oicqzone.com" target="_blank" title="QQ"><i class="fab fa-qq"></i></a><a class="social-icon" href="mailto:2602183349@qq.com" target="_blank" title="Email"><i class="fas fa-envelope-open-text"></i></a><a class="social-icon" href="https://github.com/JasonsGong?tab=repositories" target="_blank" title="代码仓库"><i class="fas fa-database"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站</div></div><!-- !=partial('includes/widget/card_weather', {}, {cache: true})--><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最近更新</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/posts/24183.html" title="任务进度"><img src="/img/8.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="任务进度"/></a><div class="content"><a class="title" href="/posts/24183.html" title="任务进度">任务进度</a><time datetime="2024-03-28T03:28:02.368Z" title="更新于 2024-03-28 11:28:02">2024-03-28</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/32696.html" title="Blog"><img src="/img/4.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Blog"/></a><div class="content"><a class="title" href="/posts/32696.html" title="Blog">Blog</a><time datetime="2024-03-25T03:14:05.606Z" title="更新于 2024-03-25 11:14:05">2024-03-25</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/5293.html" title="开源项目-若依框架"><img src="/img/9.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="开源项目-若依框架"/></a><div class="content"><a class="title" href="/posts/5293.html" title="开源项目-若依框架">开源项目-若依框架</a><time datetime="2024-02-03T14:30:54.022Z" title="更新于 2024-02-03 22:30:54">2024-02-03</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/200.html" title="常用bat和shell脚本"><img src="/img/6.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="常用bat和shell脚本"/></a><div class="content"><a class="title" href="/posts/200.html" title="常用bat和shell脚本">常用bat和shell脚本</a><time datetime="2024-01-19T11:49:36.772Z" title="更新于 2024-01-19 19:49:36">2024-01-19</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/posts/26357.html" title="WebSocket使用案例"><img src="/img/3.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="WebSocket使用案例"/></a><div class="content"><a class="title" href="/posts/26357.html" title="WebSocket使用案例">WebSocket使用案例</a><time datetime="2024-01-17T13:39:10.166Z" title="更新于 2024-01-17 21:39:10">2024-01-17</time></div></div></div></div><div class="card-widget" id="card-newest-comments"><div class="item-headline"><i class="far fa-comment-alt"></i><span>最新评论</span></div><div class="aside-list"><span>正在加载中...</span></div></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/DFA/" style="font-size: 1.15em; color: rgb(0, 144, 100)">DFA</a><a href="/tags/Blog/" style="font-size: 1.15em; color: rgb(135, 183, 18)">Blog</a><a href="/tags/%E5%89%8D%E7%AB%AF/" style="font-size: 1.21em; color: rgb(132, 23, 181)">前端</a><a href="/tags/Docker/" style="font-size: 1.15em; color: rgb(168, 114, 93)">Docker</a><a href="/tags/FinalShell/" style="font-size: 1.15em; color: rgb(142, 110, 117)">FinalShell</a><a href="/tags/FreeMarker/" style="font-size: 1.15em; color: rgb(159, 25, 165)">FreeMarker</a><a href="/tags/Git/" style="font-size: 1.15em; color: rgb(101, 167, 199)">Git</a><a href="/tags/Hive/" style="font-size: 1.15em; color: rgb(160, 57, 10)">Hive</a><a href="/tags/%E5%BF%AB%E6%8D%B7%E9%94%AE/" style="font-size: 1.15em; color: rgb(37, 63, 159)">快捷键</a><a href="/tags/Java/" style="font-size: 1.45em; color: rgb(65, 122, 82)">Java</a><a href="/tags/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/" style="font-size: 1.15em; color: rgb(147, 179, 89)">学习路线</a><a href="/tags/%E7%88%AC%E8%99%AB/" style="font-size: 1.15em; color: rgb(182, 135, 125)">爬虫</a><a href="/tags/%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/" style="font-size: 1.21em; color: rgb(178, 105, 147)">环境搭建</a><a href="/tags/Linux/" style="font-size: 1.33em; color: rgb(80, 85, 73)">Linux</a><a href="/tags/%E4%BA%8C%E7%BB%B4%E7%A0%81/" style="font-size: 1.15em; color: rgb(140, 5, 160)">二维码</a><a href="/tags/ElasticSearch/" style="font-size: 1.15em; color: rgb(100, 114, 123)">ElasticSearch</a><a href="/tags/1Panel/" style="font-size: 1.15em; color: rgb(161, 164, 55)">1Panel</a><a href="/tags/Mysql/" style="font-size: 1.27em; color: rgb(48, 45, 9)">Mysql</a><a href="/tags/SSM/" style="font-size: 1.27em; color: rgb(191, 31, 186)">SSM</a><a href="/tags/%E6%8F%92%E4%BB%B6/" style="font-size: 1.15em; color: rgb(128, 128, 12)">插件</a><a href="/tags/OCR/" style="font-size: 1.15em; color: rgb(158, 165, 176)">OCR</a><a href="/tags/SpringBoot/" style="font-size: 1.39em; color: rgb(26, 108, 146)">SpringBoot</a><a href="/tags/Thymeleaf/" style="font-size: 1.15em; color: rgb(128, 125, 109)">Thymeleaf</a><a href="/tags/SpringCloud/" style="font-size: 1.15em; color: rgb(130, 195, 152)">SpringCloud</a><a href="/tags/VMWare/" style="font-size: 1.15em; color: rgb(161, 143, 46)">VMWare</a><a href="/tags/WebSocket/" style="font-size: 1.15em; color: rgb(37, 82, 99)">WebSocket</a><a href="/tags/%E6%B3%A8%E9%87%8A%E6%A8%A1%E6%9D%BF/" style="font-size: 1.15em; color: rgb(187, 155, 122)">注释模板</a><a href="/tags/%E4%BB%BB%E5%8A%A1%E8%BF%9B%E5%BA%A6/" style="font-size: 1.15em; color: rgb(127, 174, 151)">任务进度</a><a href="/tags/%E8%84%9A%E6%9C%AC/" style="font-size: 1.21em; color: rgb(150, 56, 44)">脚本</a><a href="/tags/PDF/" style="font-size: 1.15em; color: rgb(73, 50, 30)">PDF</a><a href="/tags/%E5%9F%9F%E5%90%8D%E6%B3%A8%E5%86%8C/" style="font-size: 1.15em; color: rgb(100, 143, 131)">域名注册</a><a href="/tags/%E7%BD%91%E7%BB%9C/" style="font-size: 1.15em; color: rgb(26, 3, 96)">网络</a><a href="/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/" style="font-size: 1.21em; color: rgb(121, 114, 130)">数据结构与算法</a><a href="/tags/MinIo/" style="font-size: 1.15em; color: rgb(71, 157, 79)">MinIo</a><a href="/tags/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/" style="font-size: 1.15em; color: rgb(52, 67, 165)">正则表达式</a><a href="/tags/%E5%A4%A7%E6%95%B0%E6%8D%AE/" style="font-size: 1.15em; color: rgb(104, 27, 76)">大数据</a><a href="/tags/%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/" style="font-size: 1.15em; color: rgb(74, 114, 87)">常用命令</a><a href="/tags/%E6%B5%8B%E8%AF%95/" style="font-size: 1.15em; color: rgb(109, 51, 2)">测试</a><a href="/tags/%E8%8B%A5%E4%BE%9D/" style="font-size: 1.15em; color: rgb(124, 26, 135)">若依</a><a href="/tags/%E6%8A%80%E6%9C%AF%E4%B9%A6%E7%B1%8D/" style="font-size: 1.21em; color: rgb(196, 110, 101)">技术书籍</a></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span><a class="card-more-btn" href="/archives/" title="查看更多">
</a></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/02/"><span class="card-archive-list-date">2024年02月</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/01/"><span class="card-archive-list-date">2024年01月</span><span class="card-archive-list-count">4</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/12/"><span class="card-archive-list-date">2023年12月</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/11/"><span class="card-archive-list-date">2023年11月</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/10/"><span class="card-archive-list-date">2023年10月</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/09/"><span class="card-archive-list-date">2023年09月</span><span class="card-archive-list-count">6</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/08/"><span class="card-archive-list-date">2023年08月</span><span class="card-archive-list-count">6</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/07/"><span class="card-archive-list-date">2023年07月</span><span class="card-archive-list-count">3</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">77</div></div><div class="webinfo-item"><div class="item-name">已运行时间 :</div><div class="item-count" id="runtimeshow" data-publishDate="2023-02-28T16:00:00.000Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总字数 :</div><div class="item-count">348.9k</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2024-03-28T08:14:31.428Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="/cdn/js/medium-zoom.min.js"></script><script src="/cdn/js/instantpage.min.js" type="module"></script><script src="/cdn/js/snackbar.min.js"></script><div class="js-pjax"></div><script>window.addEventListener('load', () => {
const changeContent = (content) => {
if (content === '') return content
content = content.replace(/<img.*?src="(.*?)"?[^\>]+>/ig, '[图片]') // replace image link
content = content.replace(/<a[^>]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi, '[链接]') // replace url
content = content.replace(/<pre><code>.*?<\/pre>/gi, '[代码]') // replace code
content = content.replace(/<[^>]+>/g,"") // remove html tag
if (content.length > 150) {
content = content.substring(0,150) + '...'
}
return content
}
const findTrueUrl = (array) => {
Promise.all(array.map(item =>
fetch(item.url).then(resp => resp.json()).then(data => {
const urlArray = data.body.match(/(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?/ig)
if (data.user.login === 'utterances-bot') {
return urlArray.pop()
} else {
return urlArray.shift()
}
})
)).then(res => {
array = array.map((i,index)=> {
return {
...i,
url: res[index]
}
})
saveToLocal.set('github-newest-comments', JSON.stringify(array), 10/(60*24))
generateHtml(array)
});
}
const getComment = () => {
fetch('https://api.github.com/repos/JasonsGong/BlogComment/issues/comments?sort=updated&direction=desc&per_page=5&page=1',{
"headers": {
Accept: 'application/vnd.github.v3.html+json'
}
})
.then(response => response.json())
.then(data => {
const githubArray = data.map(item => {
return {
'avatar': item.user.avatar_url,
'content': changeContent(item.body_html),
'nick': item.user.login,
'url': item.issue_url,
'date': item.updated_at,
'githubUrl': item.html_url
}
})
findTrueUrl(githubArray)
}).catch(e => {
const $dom = document.querySelector('#card-newest-comments .aside-list')
$dom.textContent= "无法获取评论,请确认相关配置是否正确"
})
}
const generateHtml = array => {
let result = ''
if (array.length) {
for (let i = 0; i < array.length; i++) {
result += '<div class=\'aside-list-item\'>'
if (true) {
const name = 'src'
result += `<a href='${array[i].url}' class='thumbnail'><img ${name}='${array[i].avatar}' alt='${array[i].nick}'></a>`
}
result += `<div class='content'>
<a class='comment' href='${array[i].url}' title='${array[i].content}'>${array[i].content}</a>
<div class='name'><span>${array[i].nick} / </span><time datetime="${array[i].date}">${btf.diffDate(array[i].date, true)}</time></div>
</div></div>`
}
} else {
result += '没有评论'
}
let $dom = document.querySelector('#card-newest-comments .aside-list')
$dom.innerHTML= result
window.lazyLoadInstance && window.lazyLoadInstance.update()
window.pjax && window.pjax.refresh($dom)
}
const newestCommentInit = () => {
if (document.querySelector('#card-newest-comments .aside-list')) {
const data = saveToLocal.get('github-newest-comments')
if (data) {
generateHtml(JSON.parse(data))
} else {
getComment()
}
}
}
newestCommentInit()
document.addEventListener('pjax:complete', newestCommentInit)
})</script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><div id="local-search"><div class="search-dialog"><nav class="search-nav"><span class="search-dialog-title">搜索</span><span id="loading-status"></span><button class="search-close-button"><i class="fas fa-times"></i></button></nav><div class="is-center" id="loading-database"><i class="fas fa-spinner fa-pulse"></i><span> 数据库加载中</span></div><div class="search-wrap"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"/></div></div><br/><div class="no-result" id="local-search-results"></div><div id="local-search-stats-wrap"></div></div></div><div id="search-mask"></div><script src="/js/search/local-search.js"></script></div></div><!-- hexo injector body_end start --><script data-pjax>
function butterfly_swiper_injector_config(){
var parent_div_git = document.getElementById('recent-posts');
var item_html = '<div class="recent-post-item" style="height: auto;width: 100%"><div class="blog-slider swiper-container-fade swiper-container-horizontal" id="swiper_container"><div class="blog-slider__wrp swiper-wrapper" style="transition-duration: 0ms;"><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" href="posts/19306.html" alt=""><img width="48" height="48" src="/img/1.png" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-04-21</span><a class="blog-slider__title" href="posts/19306.html" alt="">Docker容器化技术</a><div class="blog-slider__text">Docker</div><a class="blog-slider__button" href="posts/19306.html" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" href="posts/47003.html" alt=""><img width="48" height="48" src="/img/1.png" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-03-10</span><a class="blog-slider__title" href="posts/47003.html" alt="">常用正则表达式大全</a><div class="blog-slider__text">正则表达式</div><a class="blog-slider__button" href="posts/47003.html" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" href="posts/20683.html" alt=""><img width="48" height="48" src="/img/6.png" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-06-05</span><a class="blog-slider__title" href="posts/20683.html" alt="">Linux中开发环境的搭建</a><div class="blog-slider__text">环境搭建</div><a class="blog-slider__button" href="posts/20683.html" alt="">详情 </a></div></div><div class="blog-slider__item swiper-slide" style="width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;"><a class="blog-slider__img" href="posts/63333.html" alt=""><img width="48" height="48" src="/img/3.png" alt="" onerror="this.src=https://unpkg.zhimg.com/akilar-candyassets/image/loading.gif; this.onerror = null;"/></a><div class="blog-slider__content"><span class="blog-slider__code">2023-06-03</span><a class="blog-slider__title" href="posts/63333.html" alt="">开发环境的搭建</a><div class="blog-slider__text">环境搭建</div><a class="blog-slider__button" href="posts/63333.html" alt="">详情 </a></div></div></div><div class="blog-slider__pagination swiper-pagination-clickable swiper-pagination-bullets"></div></div></div>';
if (parent_div_git !== null && typeof parent_div_git !== 'undefined') {
parent_div_git.insertAdjacentHTML("afterbegin",item_html)
}
}
var elist = 'undefined'.split(',');
var cpage = location.pathname;
var epage = 'all';
var flag = 0;
for (var i=0;i<elist.length;i++){
if (cpage.includes(elist[i])){
flag++;
}
}
if ((epage ==='all')&&(flag == 0)){
butterfly_swiper_injector_config();
}
else if (epage === cpage){
butterfly_swiper_injector_config();
}
</script><script defer src="https://npm.elemecdn.com/hexo-butterfly-swiper/lib/swiper.min.js"></script><script defer data-pjax src="https://npm.elemecdn.com/hexo-butterfly-swiper/lib/swiper_init.js"></script><!-- hexo injector body_end end --></body></html>