-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
314 lines (265 loc) · 46.5 KB
/
index.html
File metadata and controls
314 lines (265 loc) · 46.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
<!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, maximum-scale=1.0, user-scalable=no"><title>cofbro的博客 - Hello I'm cofbro</title><meta name="author" content="cofbro"><meta name="copyright" content="cofbro"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="ffffff"><meta property="og:type" content="website">
<meta property="og:title" content="cofbro的博客">
<meta property="og:url" content="https://cofbro.github.io/index.html">
<meta property="og:site_name" content="cofbro的博客">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://cofbro.github.io/img/cofbro.png">
<meta property="article:author" content="cofbro">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://cofbro.github.io/img/cofbro.png"><link rel="shortcut icon" href="/img/cofbroxg.png"><link rel="canonical" href="https://cofbro.github.io/"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="/pluginsSrc/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/pluginsSrc/node-snackbar/dist/snackbar.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/pluginsSrc/@fancyapps/ui/dist/fancybox.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: {"path":"/search.xml","preload":false,"languages":{"hits_empty":"找不到您查询的内容:${query}"}},
translate: undefined,
noticeOutdate: undefined,
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '',
date_suffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: {"chs_to_cht":"你已切换为繁体","cht_to_chs":"你已切换为简体","day_to_night":"你已切换为深色模式","night_to_day":"你已切换为浅色模式","bgLight":"#49b1f5","bgDark":"#1f1f1f","position":"bottom-right"},
source: {
justifiedGallery: {
js: '/pluginsSrc/flickr-justified-gallery/dist/fjGallery.min.js',
css: '/pluginsSrc/flickr-justified-gallery/dist/fjGallery.css'
}
},
isPhotoFigcaption: false,
islazyload: false,
isAnchor: true
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: 'cofbro的博客',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2023-09-24 20:32:25'
}</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.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="/css/background.css"><link rel="stylesheet" href="/css/myFooter.css"><link rel="stylesheet" href="/css/readMode.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" media="defer" onload="this.media='all'"><!-- hexo injector head_end start --><link rel="stylesheet" href="https://cdn.cbd.int/hexo-butterfly-clock-anzhiyu/lib/clock.min.css" /><!-- hexo injector head_end end --><meta name="generator" content="Hexo 6.1.0"></head><body><div id="loading-box"><div class="loading-left-bg"></div><div class="loading-right-bg"></div><div class="wizard-scene"><div class="wizard-objects"><div class="wizard-square"></div><div class="wizard-circle"></div><div class="wizard-triangle"></div></div><div class="wizard"><div class="wizard-body"></div><div class="wizard-right-arm"><div class="wizard-right-hand"></div></div><div class="wizard-left-arm"><div class="wizard-left-hand"></div></div><div class="wizard-head"><div class="wizard-beard"></div><div class="wizard-face"><div class="wizard-adds"></div></div><div class="wizard-hat"><div class="wizard-hat-of-the-hat"></div><div class="wizard-four-point-star --first"></div><div class="wizard-four-point-star --second"></div><div class="wizard-four-point-star --third"></div></div></div></div></div></div><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="/img/cofbro.png" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">20</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">10</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">7</div></a></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> 友链</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></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('/img/banner.jpg')"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">cofbro的博客</a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> 友链</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">cofbro的博客</h1><div id="site-subtitle"><span id="subtitle"></span></div><div id="site_social_icons"><a class="social-icon" href="https://github.com/cofbro" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="mailto:xxx@example.com" target="_blank" title="Email"><i class="fas fa-envelope"></i></a><a class="social-icon" href="http://wpa.qq.com/msgrd?v=3&uin=1808413743&site=qq&menu=yes" target="_blank" title="QQ"><i class="fab fa-qq"></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="/2023/09/21/how-to-publish-your-code-to-maven-central/" title="如何上传自己的工具类到MavenCentral里?"><img class="post_bg" src="/img/1-9.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="如何上传自己的工具类到MavenCentral里?"></a></div><div class="recent-post-info"><a class="article-title" href="/2023/09/21/how-to-publish-your-code-to-maven-central/" title="如何上传自己的工具类到MavenCentral里?">如何上传自己的工具类到MavenCentral里?</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 datetime="2023-09-21T13:11:13.000Z" title="发表于 2023-09-21 21:11:13">2023-09-21</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/%E6%8A%80%E8%83%BD%E6%A0%91/">技能树</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/Android/">Android</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/Maven/">Maven</a></span></div><div class="content">前言最近工作也比较忙,难得有时间闲下来在自己的博客中写篇文章。距离上次发表文章已经有 10个月了,故赶紧水一篇文章出来。
这篇文章将讲述如何将自己写的工具类或者开源框架打包发布到 MavenCentral 中,让自己的朋友或者同事能够远程使用你的代码。
比如,在 build.gradle 中加入依赖:implementation("io.github.cofbro:mvvmutils:1.0.0"),就能够将你的 jar包 下载到本地使用。
☑️ 接下来,我将以成本最小、效率最高的方法带你完成整个过程,那么进入正题。
准备好原材料现在你想把你写的完美无敌精妙的代码发布到 MavenCentral 中,首先需要上传到 github 中。
ps:这一步不会的同学请自行百度⚡
注册一个 sonatype 账号进入官网 sonatype
点击 新建 ,然后 问题类型 选择 New Project,概要 就随便输一个相关的名字就ok。
接下来:
Group Id: io.github.<Your github username>
Project URL: ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/10/24/example/" title="ThreadLocal详解"><img class="post_bg" src="/img/1-9.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="ThreadLocal详解"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/10/24/example/" title="ThreadLocal详解">ThreadLocal详解</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 datetime="2022-10-24T12:00:41.000Z" title="发表于 2022-10-24 20:00:41">2022-10-24</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/Java%E5%A4%9A%E7%BA%BF%E7%A8%8B/">Java多线程</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/Java/">Java</a></span></div><div class="content">ThreadLocal是什么?ThreadLocal是线程之间进行协作和共享的重要工具,可以保证并发中的线程安全。
当我们定义好了ThreadLocal变量后,每个线程就会持有这个变量的副本,各个线程就可以单独操作这些变量而不会互相影响,当然我们也可以使用锁的方式来代替,用ThreadLocal这种方案不过是用了空间来换时间了。
一句话,ThreadLocal可以避免并发场景下的线程安全问题,因为你访问ThreadLocal变量实际操作的是自己线程中保存的副本。
ThreadLocal的使用举个例子,在main线程中开启五个线程,每个线程都去修改 express对象 中的ThreadLocal变量的值,我们来看看是个什么情况。
1234567891011121314151617public class Express { //定义 ThreadLocal 变量,并将它的值初始化成100 ThreadLocal<Integer> tl = new ThreadLocal<Integer>() { //重写 ini ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2022/07/20/android-unlockView/" title="Android九宫格解锁视图"><img class="post_bg" src="/img/ss.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Android九宫格解锁视图"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/07/20/android-unlockView/" title="Android九宫格解锁视图">Android九宫格解锁视图</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 datetime="2022-07-20T03:01:37.000Z" title="发表于 2022-07-20 11:01:37">2022-07-20</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/Android/">Android</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/Kotlin/">Kotlin</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/Demo/">Demo</a></span></div><div class="content">前言今天我们来手写一个关于手机九宫格解锁的一个 view ,我们将各种方法包括向外部传出密码的功能进行封装,写成我们自己的一个 view 。
效果展示
说明:此视图中的子控件全部都是 ImageView ,这里没有用到绘制
分析我们首先来说明一下这个小demo的一些细节。
1.已经点亮的点不能重复点亮
2.已经点亮的点不能与其他任意一点之间形成连线
3.当手指完成九宫格解锁时,要向外部,如 Activity 传递 password ,由外部来判断密码是否正确
界面的布局首先从界面的布局开始说起,九宫格顾名思义有九个点,其次就是6条横线,6条竖线,4条向右下方倾斜的线以及4条向左下方倾斜的线。接下来我们用代码的方式创建这些视图。
很显然我们需要一个容器来容纳下这些子控件,因此我们自己取名的视图 PicUnlockView 需要继承 ViewGruop ,并且它的三个构造方法我们都写出来
123456789101112131415161718192021class PicUnlockView : ViewGroup { /** * 有三个构造方法,其中第三个构 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/07/12/HomemadeCalculator/" title="Android版计算器"><img class="post_bg" src="/img/2-5.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Android版计算器"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/07/12/HomemadeCalculator/" title="Android版计算器">Android版计算器</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 datetime="2022-07-12T10:06:49.000Z" title="发表于 2022-07-12 18:06:49">2022-07-12</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/Android/">Android</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/Java/">Java</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/Demo/">Demo</a></span></div><div class="content">前言计算器是每个手机自带的必备功能,生活中常用来计算比较大型复杂的数据,今天我准备自己写一个计算器APP出来,以巩固Android学习。
分析与设计对于整个计算器软件的编写,我们分为两大部分,第一部分是UI设计,另一部分是逻辑实现。
UI设计通常程序猿不需要懂太多的UI设计,但是简单的UI设计我们还是需要学会。计算器我们见得多了,最常见的就是顶部一个方形的显示屏,接着下面就是10多个按键,这些按键大多是圆形的,有了这些常识,我们倒不妨画个图。
这就是整个计算器大概的样子。
确定布局那么接下来就是真正实现UI界面的时候了。个人觉得现在constraintLayout(约束布局)最好用,因为动动手指就能实时为你展现UI界面,特别直观与方便,因此根标签就是constraintlayout了。
整个布局是这样的
确定视图种类和数目显示屏就是一个TextView,而其余的按键都是Button,总的来说就是需要16个Button和3个icon图标以及一个TextView,为每个Button和icon以及TextView添加监听事件,实现相应的逻辑即可。
实现圆形Button为了能改变Butt ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2022/07/06/FlyingBirds/" title="FlyingBirds"><img class="post_bg" src="/img/start.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="FlyingBirds"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/07/06/FlyingBirds/" title="FlyingBirds">FlyingBirds</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 datetime="2022-07-06T08:54:05.000Z" title="发表于 2022-07-06 16:54:05">2022-07-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/Diary/">Diary</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/Java/">Java</a></span></div><div class="content">一.前言学校安排的学年设计,需要交一份基于Java或c++编写的小游戏,我自然是选择Java了,我准备交一份《飞翔的小鸟》游戏上去。在这里记录一下整个项目的过程。
飞翔的小鸟想必大家小时候都玩过,我记得我当时偷偷玩手机的时候还下载过这个游戏,没想到有一天我会亲手写这个游戏。
二.分析在写代码量较多,结构稍复杂的程序中,我们首先要建立UML类图。首先要明确有哪些对象,从以前我们玩这个游戏的经验来说,第一个必须是要有会飞的小鸟,那么它怎么会飞呢?我们只需要多张小鸟扇动翅膀的图片,然后按顺序在屏幕前闪过,这个小鸟就像实在飞行中的状态了。第二,需要天空类和地面类以及障碍物类。最后根据各自需要实现的功能来编写其类中的方法。
我们来看看具体的UML类图:
我们照着UML类图,一步一步剖析。
1.Column类这个就是障碍物柱子,我们需要考虑其宽度与高度以及钢管空隙,这样才能判定小鸟是否撞在了柱子上,最后还需要一个能让障碍物无限循环的动画。
123456789101112131415161718192021222324252627282930313233class Column { ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/07/05/suibiOne/" title="随便说说"><img class="post_bg" src="/img/s-3.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="随便说说"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/07/05/suibiOne/" 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 datetime="2022-07-05T08:38:37.000Z" title="发表于 2022-07-05 16:38:37">2022-07-05</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/%E6%9D%82%E6%96%87/">杂文</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%9A%8F%E7%AC%94/">随笔</a></span></div><div class="content">随便说说自从期末复习周开始我就已经很久没有写过博客了,全都是为了应付学校里的考试,真的是太多了-_-||,这学期考试大概有10几门,不过终于熬过考试月了,还是不错了。
现在我又有了新任务,第一个是学校安排的学年设计,我打算就模仿一下经典的飞翔的小鸟((^▽^)),还有一个就是互联网+我所负责的网页设计,最后就是还要学习安卓课程,确实挺累的…今年暑假也就没有了。
</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2022/06/17/multithreading/" title="有关Java多线程"><img class="post_bg" src="/img/b-3.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="有关Java多线程"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/06/17/multithreading/" title="有关Java多线程">有关Java多线程</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 datetime="2022-06-17T08:57:34.000Z" title="发表于 2022-06-17 16:57:34">2022-06-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/Java%E5%A4%9A%E7%BA%BF%E7%A8%8B/">Java多线程</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/Java/">Java</a></span></div><div class="content">一.关于多线程如果要处理多个业务时,而这些业务之间没有很强的依赖,如A,B,C,此时不按顺序执行这三个业务。当A出现阻塞时,此时CPU是空闲的,我们可以先让B加载进CPU进行执行,当A没有被阻塞时再将A让CPU执行,这样效率明显要高于顺序执行。多线程解决的是并发的问题,目的是使任务执行效率更高,实现前提是“阻塞”。它们看上去时同时在执行的,但实际上只是分时间片使用CPU而已。
二.进程与线程线程是比进程更小一级的执行单位,一个进程可以包含多个线程。多进程操作系统能同时运行多个进程(程序),由于 CPU 具备分时机制,所以每个进程都能循环获得自己的CPU 时间片。由于 CPU 执行速度非常快,使得所有程序好像是在同时运行一样。我们最常见的就是main方法可以看做一个进程或者是一个主线程,而在main方法里面开启的线程就是其子线程,他们同时存在,也可以同时运行。
三.开启线程的方式1.继承Thread类定义一个类,继承Thread类,并重写Thread类的run()方法。run()方法是线程要完成的功能。创建一个继承了Thread类的对象,产生一个线程。并使用该对象的start方法,启 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/06/03/unique-binary-search-trees/" title="算法练习:不同的二叉搜索树(动态规划)"><img class="post_bg" src="/img/b-2.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="算法练习:不同的二叉搜索树(动态规划)"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/06/03/unique-binary-search-trees/" 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 datetime="2022-06-03T06:43:19.000Z" title="发表于 2022-06-03 14:43:19">2022-06-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/LeetCode/">LeetCode</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/Java/">Java</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/">算法练习</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/">动态规划</a></span></div><div class="content">一.前言LeetCode 题目:96. 不同的二叉搜索树给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3输出:5
示例2:
输入:n = 1输出:1
题目很简洁,但是分析起来却有点复杂,首先搞清楚什么是二叉搜索树。二叉搜索树分为左子树和右子树,左子树还能再分为左子树和右子树,就像这样:
二叉搜索树有三个条件:
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
它的左、右子树也分别为二叉搜索树
二.分析思考我们将 dp 数组定义为 1 到 n 互不相同的二叉搜索树的个数,先来尝试写写 n = 1 和 n = 2的情况
这两个其实还挺简单的,再来看看 n = 3 的时候这个时候不同的二叉搜索树就有 5 个了,我们来看看这五个是怎么根据前面的结果推导出来的。此图片中前两棵树是根据 dp[2]中的第一个二叉搜索树得出来的,他们结构都是一样的,都是没有左子树,右子树有两个结点。而 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2022/06/02/lambda/" title="Kotlin之lambda 表达式与高阶函数"><img class="post_bg" src="/img/b-1.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Kotlin之lambda 表达式与高阶函数"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/06/02/lambda/" title="Kotlin之lambda 表达式与高阶函数">Kotlin之lambda 表达式与高阶函数</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 datetime="2022-06-02T06:39:14.000Z" title="发表于 2022-06-02 14:39:14">2022-06-02</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/Android/">Android</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/Kotlin/">Kotlin</a></span></div><div class="content">一.lambda 表达式lambda 在 Java 里面也有,不过 Kotlin 中的 lambda 使用起来更方便、更灵活。lambda 其实就是匿名函数,能使代码变得更加灵活简洁,其表达式为: {变量定义 -> 代码块} , 如:{ a, b -> a + b }
lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数
1、lambda 函数比较轻便,即用即仍,很适合需要完成一项功能,但是此功能只在此一处使用,连名字都很随意的情况下;2、匿名函数,一般用来给 filter, map 这样的函数式编程服务;3、作为回调函数,传递给某些应用,比如消息处理
完整的 lambda 表达式
123val method: (num1: Int, num2: Int) -> Boolean = { a: Int,b: Int -> a < b }
完整语法形式的参数声明放在圆括号内,其中 num1 和 num2只是变量的声明,可以不写,但是后面的 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/05/30/integer-break/" title="算法练习:整数拆分(动态规划)"><img class="post_bg" src="/img/b-0.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="算法练习:整数拆分(动态规划)"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/05/30/integer-break/" 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 datetime="2022-05-30T13:55:39.000Z" title="发表于 2022-05-30 21:55:39">2022-05-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/LeetCode/">LeetCode</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/Java/">Java</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/">算法练习</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/">动态规划</a></span></div><div class="content">一.前言最近一直在了解动态规划,这是 LeetCode 上面的一道动规的题。
343. 整数拆分
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。
示例1:
输入: n = 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。
示例2:
输入: n = 10输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
二.思路说到动态规划,我认为最重要的就是确定自己的 dp数组 的含义,其次就是 递推公式 了。
确定 dp[i] 的含义
我们重新浏览一遍题,给定一个正整数 n ,需要将它分成若干个整数,返回最大的乘积。因此我们可以定义 dp[i] 表示每个正整数拆分为若干个正整数所对应的最大乘积,若要确定 dp[i] 的值,我们可以根据 dp[i] 以前的元素进行运算从而得到最大的dp[i] 的值。
确定 dp[i] 的值
dp[i] 的值是由两种方式来共同确定的。第一,dp ...</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><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/cofbro.png" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">cofbro</div><div class="author-info__description">海阔天空</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">20</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">10</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">7</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/cofbro"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/cofbro" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="mailto:xxx@example.com" target="_blank" title="Email"><i class="fas fa-envelope"></i></a><a class="social-icon" href="http://wpa.qq.com/msgrd?v=3&uin=1808413743&site=qq&menu=yes" target="_blank" title="QQ"><i class="fab fa-qq"></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><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="/2023/09/21/how-to-publish-your-code-to-maven-central/" title="如何上传自己的工具类到MavenCentral里?"><img src="/img/1-9.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="如何上传自己的工具类到MavenCentral里?"/></a><div class="content"><a class="title" href="/2023/09/21/how-to-publish-your-code-to-maven-central/" title="如何上传自己的工具类到MavenCentral里?">如何上传自己的工具类到MavenCentral里?</a><time datetime="2023-09-21T13:11:13.000Z" title="发表于 2023-09-21 21:11:13">2023-09-21</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2022/10/24/example/" title="ThreadLocal详解"><img src="/img/1-9.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="ThreadLocal详解"/></a><div class="content"><a class="title" href="/2022/10/24/example/" title="ThreadLocal详解">ThreadLocal详解</a><time datetime="2022-10-24T12:00:41.000Z" title="发表于 2022-10-24 20:00:41">2022-10-24</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2022/07/20/android-unlockView/" title="Android九宫格解锁视图"><img src="/img/ss.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Android九宫格解锁视图"/></a><div class="content"><a class="title" href="/2022/07/20/android-unlockView/" title="Android九宫格解锁视图">Android九宫格解锁视图</a><time datetime="2022-07-20T03:01:37.000Z" title="发表于 2022-07-20 11:01:37">2022-07-20</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2022/07/12/HomemadeCalculator/" title="Android版计算器"><img src="/img/2-5.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Android版计算器"/></a><div class="content"><a class="title" href="/2022/07/12/HomemadeCalculator/" title="Android版计算器">Android版计算器</a><time datetime="2022-07-12T10:06:49.000Z" title="发表于 2022-07-12 18:06:49">2022-07-12</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2022/07/06/FlyingBirds/" title="FlyingBirds"><img src="/img/start.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="FlyingBirds"/></a><div class="content"><a class="title" href="/2022/07/06/FlyingBirds/" title="FlyingBirds">FlyingBirds</a><time datetime="2022-07-06T08:54:05.000Z" title="发表于 2022-07-06 16:54:05">2022-07-06</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
<i class="fas fa-folder-open"></i>
<span>分类</span>
</div>
<ul class="card-category-list" id="aside-cat-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Android/"><span class="card-category-list-name">Android</span><span class="card-category-list-count">4</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Diary/"><span class="card-category-list-name">Diary</span><span class="card-category-list-count">4</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Hexo/"><span class="card-category-list-name">Hexo</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Java%E5%A4%9A%E7%BA%BF%E7%A8%8B/"><span class="card-category-list-name">Java多线程</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/LeetCode/"><span class="card-category-list-name">LeetCode</span><span class="card-category-list-count">6</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E6%8A%80%E8%83%BD%E6%A0%91/"><span class="card-category-list-name">技能树</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E6%9D%82%E6%96%87/"><span class="card-category-list-name">杂文</span><span class="card-category-list-count">1</span></a></li>
</ul></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/Android/" style="font-size: 1.2em; color: #999da3">Android</a> <a href="/tags/Demo/" style="font-size: 1.2em; color: #999da3">Demo</a> <a href="/tags/Hexo%E5%AE%89%E8%A3%85/" style="font-size: 1.1em; color: #999">Hexo安装</a> <a href="/tags/Hexo%E6%9B%B4%E6%8D%A2%E4%B8%BB%E9%A2%98/" style="font-size: 1.1em; color: #999">Hexo更换主题</a> <a href="/tags/Java/" style="font-size: 1.5em; color: #99a9bf">Java</a> <a href="/tags/Kotlin/" style="font-size: 1.3em; color: #99a1ac">Kotlin</a> <a href="/tags/Maven/" style="font-size: 1.1em; color: #999">Maven</a> <a href="/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/" style="font-size: 1.3em; color: #99a1ac">动态规划</a> <a href="/tags/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/" style="font-size: 1.4em; color: #99a5b6">算法练习</a> <a href="/tags/%E9%9A%8F%E7%AC%94/" style="font-size: 1.1em; color: #999">随笔</a></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="/archives/2023/09/"><span class="card-archive-list-date">九月 2023</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/2022/10/"><span class="card-archive-list-date">十月 2022</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/2022/07/"><span class="card-archive-list-date">七月 2022</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/2022/06/"><span class="card-archive-list-date">六月 2022</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/2022/05/"><span class="card-archive-list-date">五月 2022</span><span class="card-archive-list-count">11</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">20</div></div><div class="webinfo-item"><div class="item-name">本站总字数 :</div><div class="item-count">26k</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2023-09-24T12:32:25.280Z"></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2020 - 2023 By cofbro</div></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="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><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><hr/><div id="local-search-results"></div></div></div><div id="search-mask"></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="/pluginsSrc/@fancyapps/ui/dist/fancybox.umd.js"></script><script src="/pluginsSrc/node-snackbar/dist/snackbar.min.js"></script><script src="/js/search/local-search.js"></script><script>var preloader = {
endLoading: () => {
document.body.style.overflow = 'auto';
document.getElementById('loading-box').classList.add("loaded")
},
initLoading: () => {
document.body.style.overflow = '';
document.getElementById('loading-box').classList.remove("loaded")
}
}
window.addEventListener('load',preloader.endLoading())</script><div class="js-pjax"><script>function subtitleType () {
if (true) {
window.typed = new Typed("#subtitle", {
strings: ["梦想这东西和经典一样 永远不会因为时间而褪色","何其荣幸 何德何能","落叶知湫意"],
startDelay: 300,
typeSpeed: 150,
loop: true,
backSpeed: 50
})
} else {
document.getElementById("subtitle").innerHTML = '梦想这东西和经典一样 永远不会因为时间而褪色'
}
}
if (true) {
if (typeof Typed === 'function') {
subtitleType()
} else {
getScript('/pluginsSrc/typed.js/lib/typed.min.js').then(subtitleType)
}
} else {
subtitleType()
}</script></div><script type="text/javascript" src="/js/fairyDustCursor.js"></script><script defer src="https://fastly.jsdelivr.net/gh/graingert/wow@1.3.0/dist/wow.min.js"></script><script defer data-pjax src="/js/wow_init.js"></script><canvas class="fireworks" mobile="false"></canvas><script src="/pluginsSrc/butterfly-extsrc/dist/fireworks.min.js"></script><script defer="defer" id="ribbon" src="/pluginsSrc/butterfly-extsrc/dist/canvas-ribbon.min.js" size="150" alpha="0.6" zIndex="-1" mobile="true" data-click="true"></script><script id="canvas_nest" defer="defer" color="0,0,255" opacity="0.7" zIndex="-1" count="99" mobile="false" src="/pluginsSrc/butterfly-extsrc/dist/canvas-nest.min.js"></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_clock_anzhiyu_injector_config(){
var parent_div_git = document.getElementsByClassName('sticky_layout')[0];
var item_html = '<div class="card-widget card-clock"><div class="card-glass"><div class="card-background"><div class="card-content"><div id="hexo_electric_clock"><img class="entered loading" id="card-clock-loading" src="https://cdn.cbd.int/hexo-butterfly-clock-anzhiyu/lib/loading.gif" style="height: 120px; width: 100%;" data-ll-status="loading"/></div></div></div></div></div>';
console.log('已挂载butterfly_clock_anzhiyu')
if(parent_div_git) {
parent_div_git.insertAdjacentHTML("afterbegin",item_html)
}
}
var elist = 'null'.split(',');
var cpage = location.pathname;
var epage = 'all';
var qweather_key = 'c0a1017ee7e64b549fc2715df1dfa8b4';
var gaud_map_key = 'e2b04289e870b005374ee030148d64fd&s=rsv3';
var baidu_ak_key = 'undefined';
var flag = 0;
var clock_rectangle = '112.982279,28.19409';
var clock_default_rectangle_enable = 'false';
for (var i=0;i<elist.length;i++){
if (cpage.includes(elist[i])){
flag++;
}
}
if ((epage ==='all')&&(flag == 0)){
butterfly_clock_anzhiyu_injector_config();
}
else if (epage === cpage){
butterfly_clock_anzhiyu_injector_config();
}
</script><script src="https://widget.qweather.net/simple/static/js/he-simple-common.js?v=2.0"></script><script data-pjax src="https://cdn.cbd.int/hexo-butterfly-clock-anzhiyu/lib/clock.min.js"></script><!-- hexo injector body_end end --><script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"model":{"jsonPath":"/live2dw/assets/tororo.model.json"},"display":{"position":"left","width":200,"height":300},"mobile":{"show":false},"log":false,"pluginJsPath":"lib/","pluginModelPath":"assets/","pluginRootPath":"live2dw/","tagMode":false});</script></body></html>