1 Star 0 Fork 0

boluo/BLOG

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
index.html 42.33 KB
一键复制 编辑 原始数据 按行查看 历史
boluo 提交于 2023-09-21 21:32 . Site updated: 2023-09-21 21:32:48
<!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>🍍Blog</title><meta name="author" content="🍍"><meta name="copyright" content="🍍"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta property="og:type" content="website">
<meta property="og:title" content="🍍Blog">
<meta property="og:url" content="https://boluokk.gitee.io/blog/index.html">
<meta property="og:site_name" content="🍍Blog">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://boluokk.gitee.io/blog/assets/img/avatar.jpg">
<meta property="article:author" content="🍍">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://boluokk.gitee.io/blog/assets/img/avatar.jpg"><link rel="shortcut icon" href="/blog/img/favicon.png"><link rel="canonical" href="https://boluokk.gitee.io/blog/index.html"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/blog/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
root: '/blog/',
algolia: undefined,
localSearch: undefined,
translate: {"defaultEncoding":2,"translateDelay":0,"msgToTraditionalChinese":"","msgToSimplifiedChinese":""},
noticeOutdate: undefined,
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":230},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '',
dateSuffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: undefined,
source: {
justifiedGallery: {
js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.js',
css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.css'
}
},
isPhotoFigcaption: false,
islazyload: true,
isAnchor: false,
percent: {
toc: true,
rightside: true,
},
autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: '🍍Blog',
isPost: false,
isHome: true,
isHighlightShrink: true,
isToc: false,
postUpdate: '2023-09-21 21:32:47'
}</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')
if (t === 'dark') activateDarkMode()
else if (t === 'light') activateLightMode()
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><link rel="stylesheet" href="https://boluokk.gitee.io/blog/css/custom.css" media="defer" onload="this.media='all'"><script async src="https://boluokk.gitee.io/blog/js/fps.js"></script><script async src="https://boluokk.gitee.io/blog/js/title.js"></script><span id="fps"></span><div id="myscoll"></div><!-- hexo injector head_end start --><link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Zfour/Butterfly-double-row-display@1.00/cardlistpost.min.css"/>
<style>#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap > .tags:before {content:"\A";
white-space: pre;}#recent-posts > .recent-post-item >.recent-post-info > .article-meta-wrap > .tags > .article-meta__separator{display:none}</style>
<link rel="stylesheet" href="https://npm.elemecdn.com/anzhiyu-blog@2.0.4/css/runtime/runtime.min.css" media="print" onload="this.media='all'"><!-- hexo injector head_end end --><meta name="generator" content="Hexo 6.3.0"></head><body><script>window.paceOptions = {
restartOnPushState: false
}
document.addEventListener('pjax:send', () => {
Pace.restart()
})
</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/pace-js/themes/blue/pace-theme-minimal.min.css"/><script src="https://cdn.jsdelivr.net/npm/pace-js/pace.min.js"></script><div id="web_bg"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="/blog/assets/img/avatar.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/blog/archives/"><div class="headline">文章</div><div class="length-num">18</div></a><a href="/blog/tags/"><div class="headline">标签</div><div class="length-num">0</div></a><a href="/blog/categories/"><div class="headline">分类</div><div class="length-num">0</div></a></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/blog/"><i class="fa-fw icon-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/blog/archives/"><i class="fa-fw icon-guidang1"></i><span> 归档</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('/blog/assets/img/bg.jpg')"><nav id="nav"><span id="blog-info"><a href="/blog/" title="🍍Blog"><span class="site-name">🍍Blog</span></a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/blog/"><i class="fa-fw icon-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/blog/archives/"><i class="fa-fw icon-guidang1"></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><div id="site-info"><h1 id="site-title">🍍Blog</h1><div id="site-subtitle"><span id="subtitle"></span></div><div id="site_social_icons"><a class="social-icon" href="https://gitee.com/boluokk" target="_blank" title="Gitee"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:1352955539@qq.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #4a7dbe;"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left"><a href="/blog/2023/09/21/JVM/" title="JVM"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_25.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="JVM"></a></div><div class="recent-post-info"><a class="article-title" href="/blog/2023/09/21/JVM/" title="JVM">JVM</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-09-21T10:09:32.000Z" title="发表于 2023-09-21 18:09:32">2023-09-21</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-09-21T10:59:32.160Z" title="更新于 2023-09-21 18:59:32">2023-09-21</time></span></div><div class="content">JVM内存结构
程序计数器
用于记住下一条执行指令的地址, 线程之间切换,获取到了时间片,将获取程序计数器中的指令进行执行。
并且线程私有
不会有内存溢出问题
虚拟机栈(栈)
先进后出, 存储非native的Java方法(栈帧),执行新方法时会将方法放入栈中,并且执行完reutrn或者抛出异常,将会弹栈
设置大小 -Xss2024k
本地方法栈
与虚拟机栈最大区别是存入的是native方法
内存溢出
栈内存溢出: 递归调用方法,栈帧过大(栈帧容量大于栈内存)
堆内存溢出:
线程运行诊断
用top定位那个进程对cpu的占用过高或死锁
ps H -eo pid,tid,%cpu | grep 进程id (来定位那个线程导致的)
jstack 进程id (其中的线程id是16进制的,ps出来的是10进制)
最终可定位到代码行数
通过new关键字,创建的对象
线程共享,存在线程安全问题
存在垃圾回收机制
设置大小 -Xmx 1024k
堆内存溢出
大量新建对象存在堆中无法得到回收
123456List list = new ArrayList&lt;&gt;( ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/blog/2023/09/17/node%E5%A4%9A%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86/" title="node多版本管理"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_47.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="node多版本管理"></a></div><div class="recent-post-info"><a class="article-title" href="/blog/2023/09/17/node%E5%A4%9A%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86/" title="node多版本管理">node多版本管理</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-09-17T06:09:30.000Z" title="发表于 2023-09-17 14:09:30">2023-09-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-09-17T06:20:30.978Z" title="更新于 2023-09-17 14:20:30">2023-09-17</time></span></div><div class="content">nvm是什么
nvm全英文也叫node.js version management,是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具,为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。
下载
github下载地址
安装
直接next
换源
将下面两个粘贴到 settings.txt 中
阿里:
npm_mirror https://npmmirror.com/mirrors/npm/ node_mirror https://npmmirror.com/mirrors/node/
腾讯:
nvm npm_mirror http://mirrors.cloud.tencent.com/npm/nvm node_mirror http://mirrors.cloud.tencent.com/nodejs-release/
常用指令
nvm arch:显示node是运行在32位还是64位。
nvm install &lt;version&gt; [arch] :安装node, version是特定版本也可以 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/blog/2023/09/16/Spring%E6%98%AF%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E5%BE%AA%E7%8E%AF%E4%BE%9D%E8%B5%96%E7%9A%84/" title="Spring是如何解决循环依赖的"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_46.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="Spring是如何解决循环依赖的"></a></div><div class="recent-post-info"><a class="article-title" href="/blog/2023/09/16/Spring%E6%98%AF%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E5%BE%AA%E7%8E%AF%E4%BE%9D%E8%B5%96%E7%9A%84/" title="Spring是如何解决循环依赖的">Spring是如何解决循环依赖的</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-09-16T12:09:34.000Z" title="发表于 2023-09-16 20:09:34">2023-09-16</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-09-16T12:06:34.542Z" title="更新于 2023-09-16 20:06:34">2023-09-16</time></span></div><div class="content">什么是循环依赖?
有两个类,一个是A、一个是B。并且A和B互相引用了对象
A class123456public class A &#123; @Autowired B b; String name; int age;&#125;
B class1234567public class B &#123; @Autowired A a; String name; int age;&#125;
Spring解决循环依赖步骤
1、创建A
2、将lambda放入三级缓存中
3、填充属性
4、缓存中找
5、没找到6、创建B
7、将lambda放入三级缓存中
8、填充属性
9、缓存中找A再次去doGetBean,从三级缓存中拿
10、找到了填充到B
11、将B填充到一级缓存中
12、将一级缓冲中B填充到A
13、初始化A
14、将A放入到一级缓存中
</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/blog/2023/09/07/Mybatis%E6%B3%A8%E5%86%8C%E6%8F%92%E4%BB%B6/" title="Mybatis注册插件"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_42.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="Mybatis注册插件"></a></div><div class="recent-post-info"><a class="article-title" href="/blog/2023/09/07/Mybatis%E6%B3%A8%E5%86%8C%E6%8F%92%E4%BB%B6/" title="Mybatis注册插件">Mybatis注册插件</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-09-07T03:09:38.000Z" title="发表于 2023-09-07 11:09:38">2023-09-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-09-07T03:01:38.685Z" title="更新于 2023-09-07 11:01:38">2023-09-07</time></span></div><div class="content">Configuration
可以对下面四个地方进行插件注册,它们都是通过 interceptorChain.pluginAll(…); 来注册插件
InterceptorChain12345678910111213public class InterceptorChain &#123; private final List&lt;Interceptor&gt; interceptors = new ArrayList&lt;&gt;(); // 会去遍历我们在mybatis中配置的插件 public Object pluginAll(Object target) &#123; for (Interceptor interceptor : interceptors) &#123; target = interceptor.plugin(target); &#125; return target; &#125; .....&#125;
Interceptor1234567891011121314151617public interface Inte ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/blog/2023/09/04/HaSee%E7%AC%94%E8%AE%B0%E6%9C%AC%E8%9C%82%E9%B8%A3%E6%8A%A5%E8%AD%A6%E5%A4%84%E7%90%86/" title="HaSee笔记本蜂鸣报警处理"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_20.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="HaSee笔记本蜂鸣报警处理"></a></div><div class="recent-post-info"><a class="article-title" href="/blog/2023/09/04/HaSee%E7%AC%94%E8%AE%B0%E6%9C%AC%E8%9C%82%E9%B8%A3%E6%8A%A5%E8%AD%A6%E5%A4%84%E7%90%86/" title="HaSee笔记本蜂鸣报警处理">HaSee笔记本蜂鸣报警处理</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-09-04T04:09:05.000Z" title="发表于 2023-09-04 12:09:05">2023-09-04</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-09-04T04:03:05.756Z" title="更新于 2023-09-04 12:03:05">2023-09-04</time></span></div><div class="content">神舟笔记本异常处理下方解决问题都是有特定原因, 并不是万能解决方法。
出现花屏(很早之前问题)
开机高温会出现蜂鸣然后关机
花屏解决已知造成原因及结果
期间我添加过一根内存(那根内存是以前坏了的笔记本上拆下来的)
花屏问题是随机的, 并不是运行某个软件或者某个时间段会造成
问题是我装了内存之后才产生的
尝试解决
可能内存松了, 重新插一次(失败)
显卡是矿机?(原因2可以说明大概率并不是这个问题, 再尝试其他解决方法)
更换同品牌出厂内存(完美解决)
解析
可能是上一根内存与出厂内存不兼容
可能是上一根内存本身损坏了已经
高温蜂鸣解决已知造成原因及结果
高温后就会蜂鸣
开机有几率会造成风扇狂转
疑似降不了温度
当前发生问题的一个月前就发生过一次
尝试解决
主板问题??(有问题为什么每次都是高温才蜂鸣,并且风扇是正常转动的,只是莫名的快,像是降不了温度, 有可能但是不大。先尝试其他解决)
给风扇去灰(未解决)
拆开CPU、显卡挡板,发现硅脂已经干了(更换硅脂,完美解决)
解析
高温降不了温度,并且风扇转动的很勤
使用率较高,出厂硅脂并不是很好,长时 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/blog/2023/09/04/JUC%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7%E7%B1%BB%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/" title="JUC常用工具类源码分析"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_50.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="JUC常用工具类源码分析"></a></div><div class="recent-post-info"><a class="article-title" href="/blog/2023/09/04/JUC%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7%E7%B1%BB%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/" title="JUC常用工具类源码分析">JUC常用工具类源码分析</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-09-04T02:09:17.000Z" title="发表于 2023-09-04 10:09:17">2023-09-04</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-09-04T02:58:17.219Z" title="更新于 2023-09-04 10:58:17">2023-09-04</time></span></div><div class="content">ReentrantLock
一个可重入,可多条件变量,可超时的锁
new12345678// 无参非公平public ReentrantLock() &#123; sync = new NonfairSync();&#125;// 公平或者非公平public ReentrantLock(boolean fair) &#123; sync = fair ? new FairSync() : new NonfairSync();&#125;
Node1234567891011121314151617181920212223242526272829303132333435363738394041424344 static final class Node &#123; static final Node SHARED = new Node(); static final Node EXCLUSIVE = null; // 状态码 static final int CANCELLED = 1; static final ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/blog/2023/08/28/HashMap%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/" title="HashMap源码分析"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_45.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="HashMap源码分析"></a></div><div class="recent-post-info"><a class="article-title" href="/blog/2023/08/28/HashMap%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/" title="HashMap源码分析">HashMap源码分析</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-08-28T09:08:30.000Z" title="发表于 2023-08-28 17:08:30">2023-08-28</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-08-28T09:04:30.790Z" title="更新于 2023-08-28 17:04:30">2023-08-28</time></span></div><div class="content">HashMap
key、value形式存储数据
JDK8:数组 + 链表&#x2F;红黑树
hash12345static final int hash(Object key) &#123; int h; // hashCode ^ hashCode &gt;&gt;&gt; 16,可防止一些特殊的hashCode例如Double、Float,因为它们的低16位基本全是0 return (key == null) ? 0 : (h = key.hashCode()) ^ (h &gt;&gt;&gt; 16);&#125;
get123456789101112131415161718192021222324252627282930public V get(Object key) &#123; Node&lt;K,V&gt; e; return (e = getNode(hash(key), key)) == null ? null : e.value;&#125;final Node&lt;K,V&gt; getNode(int hash, Objec ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/blog/2023/08/27/Mybatis%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/" title="Mybatis源码分析"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_38.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="Mybatis源码分析"></a></div><div class="recent-post-info"><a class="article-title" href="/blog/2023/08/27/Mybatis%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/" title="Mybatis源码分析">Mybatis源码分析</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-08-26T16:08:14.000Z" title="发表于 2023-08-27 00:08:14">2023-08-27</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-08-26T16:26:14.802Z" title="更新于 2023-08-27 00:26:14">2023-08-27</time></span></div><div class="content">类加载器
Java自带有三个类加载器
版本号12345&lt;dependency&gt; &lt;groupId&gt;org.mybatis&lt;/groupId&gt; &lt;artifactId&gt;mybatis&lt;/artifactId&gt; &lt;version&gt;3.5.4&lt;/version&gt;&lt;/dependency&gt;
1
12345678910111213141516171819202122public static void main(String[] args) &#123; //classpath下的 System.out.println(BindingException.class.getClassLoader()); // rt.jar包中的 System.out.println(String.class.getClassLoader());&#125;sun.misc.Launcher$AppClassLoader@18b4aac2 // App ClassLoad ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/blog/2023/08/27/ArrayList%E6%BA%90%E7%A0%81/" title="ArrayList源码"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_13.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="ArrayList源码"></a></div><div class="recent-post-info"><a class="article-title" href="/blog/2023/08/27/ArrayList%E6%BA%90%E7%A0%81/" title="ArrayList源码">ArrayList源码</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-08-26T16:08:13.000Z" title="发表于 2023-08-27 00:08:13">2023-08-27</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-08-26T16:26:13.763Z" title="更新于 2023-08-27 00:26:13">2023-08-27</time></span></div><div class="content">ArrayList
一个可自动扩容的对象数组
new默认情况下数组为一个空数组,你通过无参构造新建
12345private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = &#123;&#125;;public ArrayList() &#123; this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;&#125;
当然也可以指定数组初始化大小,你传入的容量大小,如果为0则用ArrayList自带的,否则new 一个Object[你传入的容量大小]的对象数组
123456789101112private static final Object[] EMPTY_ELEMENTDATA = &#123;&#125;;public ArrayList(int initialCapacity) &#123; if (initialCapacity &gt; 0) &#123; // 传入的的大小 &gt; 0,则用你传入的大小 this.ele ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/blog/2023/08/27/JUC%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/" title="JUC并发编程"><img class="post-bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_50.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="JUC并发编程"></a></div><div class="recent-post-info"><a class="article-title" href="/blog/2023/08/27/JUC%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/" title="JUC并发编程">JUC并发编程</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-08-26T16:08:13.000Z" title="发表于 2023-08-27 00:08:13">2023-08-27</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-08-26T16:26:13.881Z" title="更新于 2023-08-27 00:26:13">2023-08-27</time></span></div><div class="content">进程与线程
进程:当一个程序被开启,即开启了一个进程
线程:一个进程之内可以分为多个线程、一个线程就是一个指令流、Java中线程是最小的调度单位,进程是作为资源分配的最小单位
对比:
进程基本上是互相独立的,二线程存在于进程内,是进程的一个子集
进程拥有共享的资源,如内存空间等,使其内部的线程共享
进程间通信更复杂
线程通信相对简单(因为它们共享一个进程的内存),并且更加轻量
线程的上下文切换比进程的上下文切换成本低
并发&amp;并行
并发:同一时间应对多件事情的能力
并行:同一时间做多件事情的能力
异步同步
需要等级结果返回,才能继续运行就是同步
不需要等待结果返回,就能继续运行就是异步
同步12345678910111213public static void main(String[] args) &#123; FileReader fileReader = new FileReader(&quot;E:\\todo_files\\login.bat&quot;); String s = fileReader.readString(); ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/blog/page/2/#content-inner">2</a><a class="extend next" rel="next" href="/blog/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= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="/blog/assets/img/avatar.jpg" onerror="this.onerror=null;this.src='/blog/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">🍍</div><div class="author-info__description"></div></div><div class="card-info-data site-data is-center"><a href="/blog/archives/"><div class="headline">文章</div><div class="length-num">18</div></a><a href="/blog/tags/"><div class="headline">标签</div><div class="length-num">0</div></a><a href="/blog/categories/"><div class="headline">分类</div><div class="length-num">0</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://gitee.com/boluokk"><i class="fab fa-github"></i><span>Follow Me</span><!--i.faa-passing.animated(style="padding-left:20px;display:inline-block;vertical-align:middle;")--><!-- svg.icon(style="height:28px;width:28px;fill:currentColor;position:relative;top:5px")--><!-- use(xlink:href='#icon-xiaoqiche')--></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://gitee.com/boluokk" target="_blank" title="Gitee"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:1352955539@qq.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #4a7dbe;"></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"></div><div id="welcome-info"></div></div><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="/blog/2023/09/21/JVM/" title="JVM"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_25.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="JVM"/></a><div class="content"><a class="title" href="/blog/2023/09/21/JVM/" title="JVM">JVM</a><time datetime="2023-09-21T10:09:32.000Z" title="发表于 2023-09-21 18:09:32">2023-09-21</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/blog/2023/09/17/node%E5%A4%9A%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86/" title="node多版本管理"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_47.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="node多版本管理"/></a><div class="content"><a class="title" href="/blog/2023/09/17/node%E5%A4%9A%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86/" title="node多版本管理">node多版本管理</a><time datetime="2023-09-17T06:09:30.000Z" title="发表于 2023-09-17 14:09:30">2023-09-17</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/blog/2023/09/16/Spring%E6%98%AF%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E5%BE%AA%E7%8E%AF%E4%BE%9D%E8%B5%96%E7%9A%84/" title="Spring是如何解决循环依赖的"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_46.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="Spring是如何解决循环依赖的"/></a><div class="content"><a class="title" href="/blog/2023/09/16/Spring%E6%98%AF%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E5%BE%AA%E7%8E%AF%E4%BE%9D%E8%B5%96%E7%9A%84/" title="Spring是如何解决循环依赖的">Spring是如何解决循环依赖的</a><time datetime="2023-09-16T12:09:34.000Z" title="发表于 2023-09-16 20:09:34">2023-09-16</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/blog/2023/09/07/Mybatis%E6%B3%A8%E5%86%8C%E6%8F%92%E4%BB%B6/" title="Mybatis注册插件"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_42.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="Mybatis注册插件"/></a><div class="content"><a class="title" href="/blog/2023/09/07/Mybatis%E6%B3%A8%E5%86%8C%E6%8F%92%E4%BB%B6/" title="Mybatis注册插件">Mybatis注册插件</a><time datetime="2023-09-07T03:09:38.000Z" title="发表于 2023-09-07 11:09:38">2023-09-07</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/blog/2023/09/04/HaSee%E7%AC%94%E8%AE%B0%E6%9C%AC%E8%9C%82%E9%B8%A3%E6%8A%A5%E8%AD%A6%E5%A4%84%E7%90%86/" title="HaSee笔记本蜂鸣报警处理"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://source.fomal.cc/img/default_cover_20.webp" onerror="this.onerror=null;this.src='/blog/img/404.jpg'" alt="HaSee笔记本蜂鸣报警处理"/></a><div class="content"><a class="title" href="/blog/2023/09/04/HaSee%E7%AC%94%E8%AE%B0%E6%9C%AC%E8%9C%82%E9%B8%A3%E6%8A%A5%E8%AD%A6%E5%A4%84%E7%90%86/" title="HaSee笔记本蜂鸣报警处理">HaSee笔记本蜂鸣报警处理</a><time datetime="2023-09-04T04:09:05.000Z" title="发表于 2023-09-04 12:09:05">2023-09-04</time></div></div></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/blog/archives/2023/09/"><span class="card-archive-list-date">九月 2023</span><span class="card-archive-list-count">6</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/blog/archives/2023/08/"><span class="card-archive-list-date">八月 2023</span><span class="card-archive-list-count">4</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/blog/archives/2023/06/"><span class="card-archive-list-date">六月 2023</span><span class="card-archive-list-count">4</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/blog/archives/2023/05/"><span class="card-archive-list-date">五月 2023</span><span class="card-archive-list-count">4</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">18</div></div><div class="webinfo-item"><div class="item-name">本站总字数 :</div><div class="item-count">70.8k</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="2023-09-21T13:32:47.628Z"><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="translateLink" type="button" title="简繁转换"></button><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="/blog/js/utils.js"></script><script src="/blog/js/main.js"></script><script src="/blog/js/tw_cn.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.umd.min.js"></script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload/dist/lazyload.iife.min.js"></script><script>function panguFn () {
if (typeof pangu === 'object') pangu.autoSpacingPage()
else {
getScript('https://cdn.jsdelivr.net/npm/pangu/dist/browser/pangu.min.js')
.then(() => {
pangu.autoSpacingPage()
})
}
}
function panguInit () {
if (false){
GLOBAL_CONFIG_SITE.isPost && panguFn()
} else {
panguFn()
}
}
document.addEventListener('DOMContentLoaded', panguInit)</script><div class="js-pjax"><script>window.typedJSFn = {
init: (str) => {
window.typed = new Typed('#subtitle', Object.assign({
strings: str,
startDelay: 300,
typeSpeed: 150,
loop: true,
backSpeed: 50,
}, null))
},
run: (subtitleType) => {
if (true) {
if (typeof Typed === 'function') {
subtitleType()
} else {
getScript('https://cdn.jsdelivr.net/npm/typed.js/dist/typed.umd.min.js').then(subtitleType)
}
} else {
subtitleType()
}
}
}
</script><script>function subtitleType () {
getScript('https://sdk.jinrishici.com/v2/browser/jinrishici.js').then(() => {
jinrishici.load(result =>{
if (true) {
const sub = ["Welcome😀😁😂🤣😃"]
const content = result.data.content
sub.unshift(content)
typedJSFn.init(sub)
} else {
document.getElementById('subtitle').textContent = result.data.content
}
})
})
}
typedJSFn.run(subtitleType)
</script></div><script src="https://cdn.staticfile.org/jquery/3.6.3/jquery.min.js"></script><script defer data-pjax src="https://boluokk.gitee.io/blog/js/cat.js"></script><script defer src="https://boluokk.gitee.io/blog/js/cursor.js"></script><script async data-pjax src="https://boluokk.gitee.io/blog/js/txmap.js"></script><canvas id="universe"></canvas><script defer src="https://boluokk.gitee.io/blog/js/universe.js"></script><script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc/dist/activate-power-mode.min.js"></script><script>POWERMODE.colorful = true;
POWERMODE.shake = true;
POWERMODE.mobile = false;
document.body.addEventListener('input', POWERMODE);
</script><script id="click-show-text" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc/dist/click-show-text.min.js" data-mobile="false" data-text="🍍,🍉🍈,🍇🥥,🥝,🍊🍋,🥝🍊🍋🍌" data-fontsize="15px" data-random="false" async="async"></script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div><!-- hexo injector body_end start --><script data-pjax>
function butterfly_footer_beautify_injector_config(){
var parent_div_git = document.getElementById('footer-wrap');
var item_html = '<div id="workboard"></div><p id="ghbdages"><a class="github-badge" target="_blank" href="https://hexo.io/" style="margin-inline:5px" data-title="博客框架为Hexo_v5.4.0" title=""><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://img.shields.io/badge/Frame-Hexo-blue?style=flat&amp;logo=hexo" alt=""/></a><a class="github-badge" target="_blank" href="https://butterfly.js.org/" style="margin-inline:5px" data-title="主题版本Butterfly_v4.2.2" title=""><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://img.shields.io/badge/Theme-Butterfly-6513df?style=flat&amp;logo=bitdefender" alt=""/></a><a class="github-badge" target="_blank" href="https://www.jsdelivr.com/" style="margin-inline:5px" data-title="本站使用JsDelivr为静态资源提供CDN加速" title=""><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://img.shields.io/badge/CDN-jsDelivr-orange?style=flat&amp;logo=jsDelivr" alt=""/></a><a class="github-badge" target="_blank" href="https://github.com/" style="margin-inline:5px" data-title="本站项目由Github托管" title=""><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://img.shields.io/badge/Source-Github-d021d6?style=flat&amp;logo=GitHub" alt=""/></a><a class="github-badge" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/4.0/" style="margin-inline:5px" data-title="本站采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可" title=""><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://img.shields.io/badge/Copyright-BY--NC--SA%204.0-d42328?style=flat&amp;logo=Claris" alt=""/></a></p>';
console.log('已挂载butterfly_footer_beautify')
parent_div_git.insertAdjacentHTML("beforeend",item_html)
}
var elist = 'null'.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_footer_beautify_injector_config();
}
else if (epage === cpage){
butterfly_footer_beautify_injector_config();
}
</script><script async src="/blog/js/footer-username.js"></script><!-- hexo injector body_end end --></body></html>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/boluokk/blog.git
git@gitee.com:boluokk/blog.git
boluokk
blog
BLOG
master

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385