-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
372 lines (175 loc) · 183 KB
/
search.xml
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
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>八股</title>
<link href="/post/1bb262db.html"/>
<url>/post/1bb262db.html</url>
<content type="html"><![CDATA[<h3 id="MQ怎么保证消费者顺序的?"><a href="#MQ怎么保证消费者顺序的?" class="headerlink" title="MQ怎么保证消费者顺序的?"></a>MQ怎么保证消费者顺序的?</h3><h3 id="Redis为什么这么快"><a href="#Redis为什么这么快" class="headerlink" title="Redis为什么这么快"></a>Redis为什么这么快</h3><ul><li>内存数据库</li><li>c语言实现</li><li>优化过的数据结构</li><li>单线程,避免多线切换的开销</li><li><strong>I/O多路复用</strong> 一个线程处理多个I/O</li></ul><h3 id="Redis大key问题"><a href="#Redis大key问题" class="headerlink" title="Redis大key问题"></a>Redis大key问题</h3><p>大key是value过大</p><p>造成的问题:会造成堵塞</p><p>解决方案:拆分大key,删除大key(不能用del,在redis6.0之后可以用unlock)</p><h3 id="Redis基本数据结构"><a href="#Redis基本数据结构" class="headerlink" title="Redis基本数据结构"></a>Redis基本数据结构</h3><p>string</p><p>list</p><p>hash</p><p>set</p><p>zset</p><p>Bitmaps</p><p>HyperLogLog</p><p>Geospatial</p><h3 id="跳表"><a href="#跳表" class="headerlink" title="跳表"></a>跳表</h3><p>删除、插入、查找都是logN</p><p>相比平衡树、红黑树效率差不多,但是红黑树实现更复杂。跳表不稳定。</p><h3 id="项目中Redis如何更新的?怎么保证缓存一致性"><a href="#项目中Redis如何更新的?怎么保证缓存一致性" class="headerlink" title="项目中Redis如何更新的?怎么保证缓存一致性"></a>项目中Redis如何更新的?怎么保证缓存一致性</h3><h3 id="雪崩、击穿、穿透"><a href="#雪崩、击穿、穿透" class="headerlink" title="雪崩、击穿、穿透"></a>雪崩、击穿、穿透</h3><p>给缓存业务添加降级限流策略。</p><p>缓存雪崩意思是设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB 瞬时压力过重雪崩。与缓存击穿的区别:雪崩是很多 key ,击穿是某一个 key 缓存。</p><p>解决方案主要是可以将缓存失效时间分散开,比如可以在原有的失效时间基础上增加一个随机值,比如 1-5 分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。</p><p>雪崩:大量的key同时过期或者redis宕机。</p><p>穿透无中生有 key ,布隆过滤 null 隔离</p><p>缓存击穿过期 key ,锁与非期解难题。</p><p>雪崩大量过期 key ,过期时间要随机。</p><p>面试必考三兄弟,可用限流来保底。</p><h2 id="Mysql"><a href="#Mysql" class="headerlink" title="Mysql"></a>Mysql</h2><h3 id="索引失效场景"><a href="#索引失效场景" class="headerlink" title="索引失效场景"></a>索引失效场景</h3><p>使用like 左模糊匹配 左右模糊匹配</p><p>条件查询中,对索引列进行表达式计算</p><p>条件查询中,对索引列使用函数 length(name)</p><p>对索引列进行字符串=数字比较</p><p>联合索引,遵循最左原则</p><p>where子句中,or前是索引列,or后不是索引列</p><h3 id="储存引擎"><a href="#储存引擎" class="headerlink" title="储存引擎"></a>储存引擎</h3><p>InnoDB,会默认为主键建立索引,称为聚簇索引,其他的索引叫做二级索引。</p><p>都是B+树。</p><p>聚簇索引:叶子节点 实际数字</p><p>二级索引:叶子节点 主键</p><p>MyISAM:不支持事务,也不支持行级锁和外键约束。</p><p>Memery:就是将数据放在内存中,数据处理速度很快,但是安全性不高。</p><h3 id="日志文件:"><a href="#日志文件:" class="headerlink" title="日志文件:"></a>日志文件:</h3><h4 id="binlog:"><a href="#binlog:" class="headerlink" title="binlog:"></a>binlog:</h4><h4 id="redolog:"><a href="#redolog:" class="headerlink" title="redolog:"></a>redolog:</h4><h4 id="undolog"><a href="#undolog" class="headerlink" title="undolog"></a>undolog</h4><h4 id="relaylog"><a href="#relaylog" class="headerlink" title="relaylog"></a>relaylog</h4><h3 id="事务隔离级别"><a href="#事务隔离级别" class="headerlink" title="事务隔离级别"></a>事务隔离级别</h3><p>脏读</p><p>不可重复度</p><p>幻读</p><p>隔离级别:</p><p>读未提交:指一个事务还没提交时,它做的变更就能被其他事务看到</p><p>读提交:指一个事务提交之后,它做的变更才能被其他事务看到</p><p>可重复读:指一个事务执行级别过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,Mysql InnoDB引擎的默认隔离级别</p><p>串行化:会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。</p><h2 id="JAVA"><a href="#JAVA" class="headerlink" title="JAVA"></a>JAVA</h2><h3 id="HashMap的结构"><a href="#HashMap的结构" class="headerlink" title="HashMap的结构"></a>HashMap的结构</h3><p>HashMap数据结构是数组和链表,HashMap通过哈希算法将元素的键(key)映射到数组中的槽位(Bucket)。如果多个键映射到同一个槽位,他们会以链表的形式存储在同一个槽位上。</p><p>当一个链表长度超过8的时候,就转成红黑树。因为链表查询是O(n)。</p><h3 id="ArrayList-LinkeList:"><a href="#ArrayList-LinkeList:" class="headerlink" title="ArrayList LinkeList:"></a>ArrayList LinkeList:</h3><p>ArrayList 适用于频繁访问集合元素的场景,基于数组实现。</p><p>LinkedList适用于频繁插入删除和删除的场景,大小经常改变。</p><p>ArrayList扩容 1.5倍</p><p>计算新的容量、创建新的数组、复制、更新引用、完成扩容。</p><h3 id="Linux-常用命令"><a href="#Linux-常用命令" class="headerlink" title="Linux 常用命令"></a>Linux 常用命令</h3><ul><li><p>文件和目录操作</p><ul><li><p>ls</p><p>:列出目录内容。</p><ul><li><code>ls -l</code>:以长格式显示文件详细信息,包括文件权限、所有者、大小、修改时间等。例如<code>ls -l /home/user/Documents</code>会详细列出<code>/home/user/Documents</code>目录下的文件信息。</li><li><code>ls -a</code>:显示所有文件,包括隐藏文件(以 “.” 开头的文件)。</li></ul></li><li><p><strong>cd</strong>:切换目录。例如<code>cd /home/user/Downloads</code>会将当前工作目录切换到<code>/home/user/Downloads</code>。</p></li><li><p><strong>pwd</strong>:显示当前工作目录的绝对路径。</p></li><li><p><strong>mkdir</strong>:创建目录。如<code>mkdir new_folder</code>会在当前目录下创建一个名为<code>new_folder</code>的新目录。</p></li><li><p><strong>rmdir</strong>:删除空目录。若目录非空,需要先删除目录中的文件。</p></li><li><p><strong>rm</strong>:删除文件或目录。<code>rm -r</code>用于递归删除目录及其内容。例如<code>rm -r old_folder</code>会删除<code>old_folder</code>目录及其内部的所有文件和子目录。</p></li></ul></li><li><p>文件查看和编辑</p><ul><li><strong>cat</strong>:查看文件内容。如<code>cat file.txt</code>会将<code>file.txt</code>的内容输出到终端。</li><li><strong>less</strong>:分页查看文件内容,按空格键翻页,按 “q” 键退出。适合查看大型文件。例如<code>less big_file.log</code>。</li><li><strong>vim</strong>或<strong>nano</strong>:文本编辑器。在<code>vim</code>中,按 “i” 键进入插入模式进行编辑,按 “Esc” 键退出插入模式,然后输入 “:wq” 保存并退出,“:q!” 强制退出不保存。<code>nano</code>相对更简单,编辑后按 “Ctrl + O” 保存,按 “Ctrl + X” 退出。</li></ul></li><li><p>系统信息查看</p><ul><li><strong>uname</strong>:显示系统信息。<code>uname -a</code>会输出内核名称、主机名、内核版本等详细信息。</li><li><strong>top</strong>:实时查看系统资源使用情况,包括 CPU、内存、进程等的使用信息。按 “q” 键退出。</li><li><strong>df</strong>:查看磁盘空间使用情况。<code>df -h</code>以人类可读的方式(如 KB、MB、GB)显示磁盘使用量。</li></ul></li><li><p>进程管理</p><ul><li><strong>ps</strong>:查看进程状态。<code>ps -ef</code>显示所有进程的详细信息,包括 UID、PID、PPID 等。</li><li><strong>kill</strong>:终止进程。例如<code>kill PID</code>(将 “PID” 替换为要终止的进程 ID)可以终止指定的进程,<code>kill -9 PID</code>是强制终止进程。</li></ul></li><li><p>文件权限管理</p><ul><li><strong>chmod</strong>:改变文件或目录的权限模式。例如<code>chmod 755 file.txt</code>会将<code>file.txt</code>的权限设置为所有者有读、写、执行权限,所属组和其他用户有读、执行权限。</li><li><strong>chown</strong>:改变文件或目录的所有者。如<code>chown user:group file.txt</code>将<code>file.txt</code>的所有者设置为 “user”,所属组设置为 “group”。</li></ul></li></ul><h3 id="Git-常用命令"><a href="#Git-常用命令" class="headerlink" title="Git 常用命令"></a>Git 常用命令</h3><ul><li>仓库初始化和克隆<ul><li><strong>git init</strong>:在当前目录初始化一个新的 Git 仓库。例如在一个新的项目文件夹中执行<code>git init</code>,就可以开始使用 Git 管理该项目的版本。</li><li><strong>git clone [repository URL]</strong>:克隆远程仓库到本地。比如<code>git clone https://github.com/user/repository.git</code>会将远程仓库<code>https://github.com/user/repository.git</code>克隆到本地。</li></ul></li><li>文件操作<ul><li><strong>git add [file or directory]</strong>:将文件或目录添加到暂存区。例如<code>git add file.txt</code>将<code>file.txt</code>添加到暂存区,准备提交;<code>git add.</code>会将当前目录下的所有文件(除了被忽略的文件)添加到暂存区。</li><li><strong>git commit -m “[commit message]”</strong>:提交暂存区的文件到本地仓库,并附上提交信息。如<code>git commit -m "Initial commit"</code>是进行初次提交并附上提交说明 “Initial commit”。</li></ul></li><li>分支操作<ul><li><strong>git branch</strong>:查看本地分支。带参数<code>git branch [branch - name]</code>可以创建新分支。例如<code>git branch new - branch</code>创建一个名为<code>new - branch</code>的新分支。</li><li><strong>git checkout [branch - name]</strong>:切换分支。比如<code>git checkout master</code>会切换到<code>master</code>分支。</li><li><strong>git merge [branch - name]</strong>:合并分支。假设在<code>feature - branch</code>上完成了功能开发,在<code>master</code>分支执行<code>git merge feature - branch</code>可以将<code>feature - branch</code>的内容合并到<code>master</code>分支。</li></ul></li><li>远程仓库操作<ul><li><strong>git remote add [remote - name] [remote - repository - URL]</strong>:添加远程仓库。例如<code>git remote add origin https://github.com/user/repository.git</code>添加一个名为<code>origin</code>的远程仓库。</li><li><strong>git push [remote - name] [branch - name]</strong>:将本地分支推送到远程仓库。如<code>git push origin master</code>将本地<code>master</code>分支推送到名为<code>origin</code>的远程仓库。</li><li><strong>git pull [remote - name] [branch - name]</strong>:从远程仓库拉取更新并合并到本地分支。例如<code>git pull origin master</code>从<code>origin</code>远程仓库的<code>master</code>分支拉取更新。</li></ul></li></ul><h3 id="Docker-常用命令"><a href="#Docker-常用命令" class="headerlink" title="Docker 常用命令"></a>Docker 常用命令</h3><ul><li>镜像操作<ul><li><strong>docker pull [image - name]</strong>:从镜像仓库拉取镜像。例如<code>docker pull ubuntu:latest</code>会拉取最新版本的 Ubuntu 镜像。</li><li><strong>docker images</strong>:列出本地所有的 Docker 镜像,显示镜像的仓库名、标签、镜像 ID、创建时间和大小等信息。</li><li><strong>docker rmi [image - ID or image - name]</strong>:删除本地镜像。例如<code>docker rmi ubuntu:latest</code>删除本地的<code>ubuntu:latest</code>镜像;也可以通过镜像 ID 来删除。</li></ul></li><li>容器操作<ul><li><strong>docker run -it [image - name] [command]</strong>:创建并运行一个容器。<code>-i</code>表示保持标准输入打开,<code>-t</code>分配一个伪终端。例如<code>docker run -it ubuntu:latest /bin/bash</code>会创建一个基于<code>ubuntu:latest</code>镜像的容器,并在容器中运行<code>/bin/bash</code>命令,让用户可以在容器内进行交互操作。</li><li><strong>docker ps</strong>:查看正在运行的容器,<code>docker ps -a</code>查看所有容器(包括已停止的)。显示容器的 ID、名称、创建时间、状态等信息。</li><li><strong>docker stop [container - ID or container - name]</strong>:停止运行中的容器。例如<code>docker stop my_container</code>停止名为<code>my_container</code>的容器。</li><li><strong>docker start [container - ID or container - name]</strong>:启动已停止的容器。</li><li><strong>docker exec -it [container - ID or container - name] [command]</strong>:在运行的容器中执行命令。如<code>docker exec -it my_container /bin/bash</code>可以进入名为<code>my_container</code>的容器并打开一个新的<code>bash</code>终端。</li><li><strong>docker rm [container - ID or container - name]</strong>:删除容器。注意,只能删除已停止的容器,除非使用<code>docker rm -f</code>强制删除正在运行的容器。</li></ul></li></ul><h3 id="Tmux-常用命令"><a href="#Tmux-常用命令" class="headerlink" title="Tmux 常用命令"></a>Tmux 常用命令</h3><ul><li><p>会话管理</p><ul><li><strong>tmux</strong>:启动<code>Tmux</code>并创建一个新的会话。</li><li><strong>tmux new-session - s [session - name]</strong>:创建一个名为<code>[session - name]</code>的新会话。例如<code>tmux new - session - s my_session</code>。</li><li><strong>tmux ls</strong>:列出所有的<code>Tmux</code>会话。</li><li><strong>tmux attach-session - t [session - name]</strong>:连接到指定名称的会话。如<code>tmux attach - session - t my_session</code>连接到<code>my_session</code>会话。</li><li><strong>tmux kill - session - t [session - name]</strong>:杀死指定名称的会话。例如<code>tmux kill - session - t unused_session</code>删除<code>unused_session</code>会话。</li></ul></li><li><p>窗口和窗格操作</p><ul><li><strong>Ctrl + b c</strong>:在当前会话中创建一个新窗口。</li><li><strong>Ctrl + b n</strong>:切换到下一个窗口。</li><li><strong>Ctrl + b p</strong>:切换到上一个窗口。</li><li><strong>Ctrl + b &</strong>:关闭当前窗口。</li><li><strong>Ctrl + b “</strong>:垂直分割窗格。</li><li><strong>Ctrl + b %</strong>:水平分割窗格。</li><li><strong>Ctrl + b o</strong>:在窗格之间切换。</li><li><strong>Ctrl + b x</strong>:关闭当前窗格。</li></ul><p>设置鼠标上下滚动:</p></li></ul><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">tmux set -g mouse on</code></pre></div></figure><ul><li>粘贴:</li></ul><blockquote><p>左键选中,然后ctrl+shift+c</p></blockquote><p>HashMap的数据结构,线程安全么,有没有什么并发安全的HashMap。</p><p>volatitle关键字原理。</p><p>volatitle 是 Java 提供的一种轻量级的同步机制。 Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于 synchronized (synchronized*称为重量级锁), volatile 更轻量级,因为它不会引起线程上下文的切换和调度。但是 volatile 变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容易出错。</p><h3 id="并发安全"><a href="#并发安全" class="headerlink" title="并发安全"></a>并发安全</h3><h4 id="创建线程的方式"><a href="#创建线程的方式" class="headerlink" title="创建线程的方式"></a>创建线程的方式</h4><p>继承Thread类</p><p>实现runnable接口</p><p>实现callable接口</p><p>线程池创建线程</p><h4 id="Runable和Callable有什么区别"><a href="#Runable和Callable有什么区别" class="headerlink" title="Runable和Callable有什么区别"></a>Runable和Callable有什么区别</h4><p><img src="C:\Users\19160\AppData\Roaming\Typora\typora-user-images\image-20241205020203296.png" alt="image-20241205020203296"></p><p><code>Runnable</code>接口的<code>run</code>方法无返回值且不能抛出受检异常</p><p><code>Callable</code>接口的<code>call</code>方法有返回值且能抛出异常</p><h4 id="使用Runable实现Callable功能"><a href="#使用Runable实现Callable功能" class="headerlink" title="使用Runable实现Callable功能"></a>使用Runable实现Callable功能</h4><h5 id="使用-FutureTask-包装-Runnable"><a href="#使用-FutureTask-包装-Runnable" class="headerlink" title="使用 FutureTask 包装 Runnable"></a>使用 FutureTask 包装 Runnable</h5><ul><li><strong>原理</strong>:<code>FutureTask</code>类实现了<code>RunnableFuture</code>接口,而<code>RunnableFuture</code>接口继承了<code>Runnable</code>和<code>Future</code>接口。通过将<code>Runnable</code>任务包装在<code>FutureTask</code>中,可以获得一个具有返回值的<code>Future</code>对象,从而模拟<code>Callable</code>的功能</li></ul><h5 id="自定义实现类"><a href="#自定义实现类" class="headerlink" title="自定义实现类"></a>自定义实现类</h5><ul><li><strong>原理</strong>:创建一个自定义类实现<code>Runnable</code>接口,并在类中定义一个成员变量来存储任务的结果,通过在<code>run</code>方法中执行任务逻辑并将结果存储到成员变量中,然后提供一个方法来获取该结果,以此实现类似<code>Callable</code>的功能。</li></ul><h4 id="常见的阻塞队列"><a href="#常见的阻塞队列" class="headerlink" title="常见的阻塞队列"></a>常见的阻塞队列</h4><p>ArrayBlockingQueue:基于数组的有界阻塞队列。 </p><p>LinkedBlockingQueue:基于链表的可选有界阻塞队列。 </p><p>PriorityBlockingQueue:支持优先级排序的无界阻塞队列。</p><p>DelayQueue:一个使用优先级队列实现的无界阻塞队列</p><p>SynchronousQueue:一个不存储元素的阻塞队列</p><p><img src="C:\Users\19160\AppData\Roaming\Typora\typora-user-images\image-20241205020707270.png" alt="image-20241205020707270"></p><p><img src="C:\Users\19160\AppData\Roaming\Typora\typora-user-images\image-20241205020714918.png" alt="image-20241205020714918"></p><h4 id="保证线程原子性:"><a href="#保证线程原子性:" class="headerlink" title="保证线程原子性:"></a>保证线程原子性:</h4><p>使用 synchronized 关键字</p><h4 id="保证可见性的方法"><a href="#保证可见性的方法" class="headerlink" title="保证可见性的方法"></a>保证可见性的方法</h4><p>使用 volatile 关键字</p><h4 id="Synchronize和Volatile关键字原理"><a href="#Synchronize和Volatile关键字原理" class="headerlink" title="Synchronize和Volatile关键字原理"></a>Synchronize和Volatile关键字原理</h4><p><img src="C:\Users\19160\AppData\Roaming\Typora\typora-user-images\image-20241205021141105.png" alt="image-20241205021141105"></p><p><img src="C:\Users\19160\AppData\Roaming\Typora\typora-user-images\image-20241205022724854.png" alt="image-20241205022724854"><img src="C:\Users\19160\AppData\Roaming\Typora\typora-user-images\image-20241205022900603.png" alt="image-20241205022900603"></p><p><img src="C:\Users\19160\AppData\Roaming\Typora\typora-user-images\image-20241205023115444.png" alt="image-20241205023115444"></p><h4 id="线程池"><a href="#线程池" class="headerlink" title="线程池"></a>线程池</h4><p><img src="C:\Users\19160\AppData\Roaming\Typora\typora-user-images\image-20241205023630853.png" alt="image-20241205023630853"></p><h4 id="核心线程数"><a href="#核心线程数" class="headerlink" title="核心线程数"></a>核心线程数</h4><h4 id="线程池种类"><a href="#线程池种类" class="headerlink" title="线程池种类"></a><img src="C:\Users\19160\AppData\Roaming\Typora\typora-user-images\image-20241205023811682.png" alt="image-20241205023811682">线程池种类</h4><p><img src="C:\Users\19160\AppData\Roaming\Typora\typora-user-images\image-20241205023844726.png" alt="image-20241205023844726"></p><h4 id="ThreadLocal"><a href="#ThreadLocal" class="headerlink" title="ThreadLocal"></a>ThreadLocal</h4><p><img src="C:\Users\19160\AppData\Roaming\Typora\typora-user-images\image-20241205025333416.png" alt="image-20241205025333416"></p><h3 id="单例模式"><a href="#单例模式" class="headerlink" title="单例模式"></a>单例模式</h3><figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">package com.wyj.singleton;class SingleObject { //创建一个SingleObject对象 // 用static 关键字修饰 表示该变量为静态变量 该类所有对象所共享的一个变量 //下方static方法中 不能调用非Static属性 private static SingleObject getInstance = new SingleObject(); private String name; //让其构造函数为private,那么他不会被实例化 private SingleObject (){ } //获取唯一可用的对象 // 这里用static关键字修饰的话, 当该静态方法被调用时该类就会被类加载 public static SingleObject getSingleObject() { return getInstance; } void say() { System.out.println("hello"); } public String getName() { return name; } public void setName(String name) { this.name = name; }}public class singleDemo { public static void main(String[] args) { // 我们并没有去new一个实例,而是调用了该实例的 自己建造实例的方法 SingleObject object = SingleObject.getSingleObject(); SingleObject object2 = SingleObject.getSingleObject(); object.setName("wyj"); object2.setName("www"); System.out.println(object.getName()); }}</code></pre></div></figure>]]></content>
</entry>
<entry>
<title>mac</title>
<link href="/post/1713eb65.html"/>
<url>/post/1713eb65.html</url>
<content type="html"><![CDATA[<h3 id="安装gcc"><a href="#安装gcc" class="headerlink" title="安装gcc"></a>安装gcc</h3><h2 id="安装home-brew"><a href="#安装home-brew" class="headerlink" title="安装home brew"></a>安装home brew</h2><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"</code></pre></div></figure><h2 id="gcc"><a href="#gcc" class="headerlink" title="gcc"></a>gcc</h2><h3 id="安装gcc-1"><a href="#安装gcc-1" class="headerlink" title="安装gcc"></a>安装gcc</h3><p>brew install gcc</p><h3 id="地址"><a href="#地址" class="headerlink" title="地址"></a>地址</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">wz@MBP-2D11ATMD6P-0038 c++ % which gcc-14which g++-14/usr/local/bin/gcc-14/usr/local/bin/g++-14</code></pre></div></figure><h2 id="sublime"><a href="#sublime" class="headerlink" title="sublime"></a>sublime</h2><h3 id="packages"><a href="#packages" class="headerlink" title="packages"></a>packages</h3><p>command + shift + p 安装<br>安装cppfastolympic<br><code>control + b</code>运行</p><h3 id="修改cppfastplympic的cpp编译选择"><a href="#修改cppfastplympic的cpp编译选择" class="headerlink" title="修改cppfastplympic的cpp编译选择"></a>修改cppfastplympic的cpp编译选择</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">{ "name": "C++", "extensions": ["cpp"], "compile_cmd": "/usr/local/bin/g++-14 '{source_file}' -Wall -Wextra -g -std=c++17 -pedantic -o '{file_name}'", "run_cmd": "./'{file_name%.*}' {args} -debug && rm -f '{file_name}'", //删除mac生成的同名二进制文件 "lint_compile_cmd": "/usr/local/bin/g++-14 -std=c++17 -Wall -Wextra -g -pedantic '{source_file}' -I '{source_file_dir}'"},</code></pre></div></figure><h3 id="改变生成tests的位置"><a href="#改变生成tests的位置" class="headerlink" title="改变生成tests的位置"></a>改变生成tests的位置</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">// closing sidebar when executing"close_sidebar": false, // tests files dir"tests_relative_dir": "tests"</code></pre></div></figure><h2 id="vscode"><a href="#vscode" class="headerlink" title="vscode"></a>vscode</h2><p>tasks.json</p><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">{ "version": "2.0.0", "tasks": [ { "label": "single file build", "type": "shell", "command": "/usr/local/bin/g++-14", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.out", "-std=c++17", "-pedantic" ], "group": "build", "problemMatcher": [ "$gcc" ], "presentation": { "echo": true, "reveal": "silent", "focus": false, "panel": "shared", "showReuseMessage": false, "clear": true } }, { "label": "run and pause", "type": "shell", "command": "${fileDirname}/${fileBasenameNoExtension}.out", "dependsOn": "single file build", "group": { "kind": "test", "isDefault": true }, "presentation": { "echo": true, "reveal": "always", "focus": true, "panel": "shared", "showReuseMessage": false, "clear": true }, "problemMatcher": [] }, { "type": "cppbuild", "label": "C/C++: g++-14 生成活动文件", "command": "/usr/local/bin/g++-14", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "调试器生成的任务。" } ]}</code></pre></div></figure><p>launch.json</p><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">{ "version": "0.2.0", "configurations": [ { "name": "single file debug", "type": "lldb", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}.out", "args": [], "cwd": "${fileDirname}", "environment": [], "externalConsole": true, "MIMode": "lldb", "miDebuggerPath": "/usr/bin/lldb", "stopAtEntry": false, "preLaunchTask": "single file build", "internalConsoleOptions": "neverOpen" } ]}</code></pre></div></figure><p>c_cpp_properties.json</p><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">{ "configurations": [ { "name": "Mac", "includePath": [ "${workspaceFolder}/**" ], "defines": [], "macFrameworkPath": [ "/System/Library/Frameworks", "/Library/Frameworks" ], "compilerPath": "/usr/local/bin/g++-14", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "macos-gcc-x64" } ], "version": 4}</code></pre></div></figure><h2 id="快速到达文件夹"><a href="#快速到达文件夹" class="headerlink" title="快速到达文件夹"></a>快速到达文件夹</h2><p>点击访达右键 选择 前往文件夹 输入即可<br><img src="image.png" alt="alt text"></p><p>如果python不好的话就改为 python3<br>python安装包 pip3</p><p>vscode一键配置<code>vcch</code><br>cph 快捷键 control + option + b</p><p>截图 command + shift + 4<br>截图到粘贴板 command + control + shift + 4<br>锁屏 command + control + q<br>聚焦搜索 command + space<br>强制退出 command + option + esc</p><h2 id="ssh连接linux主机"><a href="#ssh连接linux主机" class="headerlink" title="ssh连接linux主机"></a>ssh连接linux主机</h2><p>首先在mac上下载vscode 然后下载ssh-romote<br>linux主机上:查看ip 终端输入 <code>ifconfig</code><br>ssh 用户名@ip<br>ssh [email protected]</p><h3 id="生成ssh"><a href="#生成ssh" class="headerlink" title="生成ssh"></a>生成ssh</h3><h3 id="本地复制"><a href="#本地复制" class="headerlink" title="本地复制"></a>本地复制</h3><h3 id="传入服务器端authentications"><a href="#传入服务器端authentications" class="headerlink" title="传入服务器端authentications"></a>传入服务器端authentications</h3><p>下载gitblame / gitlens插件可以看代码谁写的</p><h2 id="vgn:"><a href="#vgn:" class="headerlink" title="vgn:"></a>vgn:</h2><h3 id="切换mac和windows"><a href="#切换mac和windows" class="headerlink" title="切换mac和windows"></a>切换mac和windows</h3><p>fn + a windows<br>fn + s mac</p><h2 id="Linux"><a href="#Linux" class="headerlink" title="Linux"></a>Linux</h2><h3 id="更改终端"><a href="#更改终端" class="headerlink" title="更改终端"></a>更改终端</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">gedit ~/.bashrcPS1='${debian_chroot:+($debian_chroot)}\[\033[00;35;01m\]\u\[\033[00;00;01m\]@\[\033[01;35;01m\]\h\[\033[00;31;01m\]:\[\033[00;33;01m\]\w \[\033[01;32;01m\]\$ \[\033[01;36;01m\]'</code></pre></div></figure><h3 id="显示隐藏文件夹"><a href="#显示隐藏文件夹" class="headerlink" title="显示隐藏文件夹"></a>显示隐藏文件夹</h3><p><code>ctrl+H</code></p><h3 id="搜索之前用过的命令行"><a href="#搜索之前用过的命令行" class="headerlink" title="搜索之前用过的命令行"></a>搜索之前用过的命令行</h3><p><code>ctrl+R</code></p><h2 id="git"><a href="#git" class="headerlink" title="git"></a>git</h2><h3 id="切换分支"><a href="#切换分支" class="headerlink" title="切换分支"></a>切换分支</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">git checkout -b new_branch</code></pre></div></figure><h3 id="合并commit"><a href="#合并commit" class="headerlink" title="合并commit"></a>合并commit</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">git log --oneline</code></pre></div></figure><p>比如要合并四个分支<br>就找到第五个的<code>commit_id_5</code></p><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">git rebase -i commit_id_5</code></pre></div></figure><p>按回车进入修改<br>把下面的<code>pick</code>改成<code>s</code><br>保存退出</p><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">ls -a </code></pre></div></figure><p><code>pmp_object_pb.h</code> : Class MapObejct </p><p>mac:快捷键<br>command + shift + /<br>command + space<br>command “+” 命令行变大</p><h2 id="阿里云服务器"><a href="#阿里云服务器" class="headerlink" title="阿里云服务器"></a>阿里云服务器</h2><h3 id="更改主机名字"><a href="#更改主机名字" class="headerlink" title="更改主机名字"></a>更改主机名字</h3><p>hostnamectl set-hostname 主机名<br>然后重启实例就可以</p><p>题目 3:最小换序代价<br>思路:<br>先记录 nums1 和 nums2 中相同的元素下标,将需要交换的元素索引存入优先队列。<br>优先从低代价开始交换,使用贪心策略选择交换代价最小的下标对。<br>如果所有下标都相同或无法进行足够多的交换,则返回 -1。<br>数据结构:<br>优先队列(Priority Queue):用于按交换代价顺序存储需要交换的下标,以便逐对选取代价最低的交换。<br>时间复杂度:<br>O(n log n),由于需要将 sameIndexes 中的下标对进行最小堆排序,插入优先队列的复杂度为 O(log n)。<br>空间复杂度:<br>O(n),优先队列最多存储 n 个元素的下标。</p><p>题目 2:求一组算子的最短执行时间<br>思路:<br>使用滑动窗口方法,在不同的连续子序列中,找到一个满足条件的最优分配,使得总执行时间最小。<br>将一部分算子分配到向量计算单元,另一部分算子留给矩阵计算单元,以平衡两者的执行时间。<br>理想的执行时间是target = res / 7,然后滑动窗口遍历不同的分配,尝试最小化 max(res - s, 6 * s)。<br>数据结构:<br>数组:用于存储算子的执行时间。<br>滑动窗口:通过双指针方式遍历不同的子序列。<br>时间复杂度:<br>O(n),滑动窗口仅需线性遍历整个数组。<br>空间复杂度:<br>O(1),除了输入数组,无需额外空间。</p>]]></content>
</entry>
<entry>
<title>docker</title>
<link href="/post/f255ffad.html"/>
<url>/post/f255ffad.html</url>
<content type="html"><![CDATA[<p>sswc31689</p><h1 id="进入容器"><a href="#进入容器" class="headerlink" title="进入容器"></a>进入容器</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">docker exec -it wsy /bin/bash</code></pre></div></figure><h1 id="退出容器,回到服务器宿主机"><a href="#退出容器,回到服务器宿主机" class="headerlink" title="退出容器,回到服务器宿主机"></a>退出容器,回到服务器宿主机</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">exit</code></pre></div></figure><h1 id="查看所有容器"><a href="#查看所有容器" class="headerlink" title="查看所有容器"></a>查看所有容器</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">docker ps -a</code></pre></div></figure><h1 id="安装python和pip"><a href="#安装python和pip" class="headerlink" title="安装python和pip"></a>安装python和pip</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">apt-get install -y python3 python3-pip</code></pre></div></figure><h1 id="改名"><a href="#改名" class="headerlink" title="改名"></a>改名</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">ln -s /usr/bin/python3 /usr/bin/pythonln -s /usr/bin/pip3 /usr/bin/pip</code></pre></div></figure><h1 id="验证python"><a href="#验证python" class="headerlink" title="验证python"></a>验证python</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">python --versionpip --version</code></pre></div></figure><h1 id="安装pytorch"><a href="#安装pytorch" class="headerlink" title="安装pytorch"></a>安装pytorch</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu116</code></pre></div></figure><h1 id="验证安装和gpu可用性"><a href="#验证安装和gpu可用性" class="headerlink" title="验证安装和gpu可用性"></a>验证安装和gpu可用性</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">python -c "import torch; print(torch.__version__); print('CUDA Available:', torch.cuda.is_available()); print('GPU Count:', torch.cuda.device_count()); print('Current GPU:', torch.cuda.get_device_name(0))"</code></pre></div></figure><h1 id="在-Bash-终端中,输入-python-或-python3-进入-Python-解释器环境,然后输入-Python-代码:"><a href="#在-Bash-终端中,输入-python-或-python3-进入-Python-解释器环境,然后输入-Python-代码:" class="headerlink" title="在 Bash 终端中,输入 python 或 python3 进入 Python 解释器环境,然后输入 Python 代码:"></a>在 Bash 终端中,输入 python 或 python3 进入 Python 解释器环境,然后输入 Python 代码:</h1><p>python</p><h1 id="当前是否可以使用-CUDA(即-GPU-资源)"><a href="#当前是否可以使用-CUDA(即-GPU-资源)" class="headerlink" title="当前是否可以使用 CUDA(即 GPU 资源)"></a>当前是否可以使用 CUDA(即 GPU 资源)</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">import torchprint(torch.cuda.is_available())</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">docker run -it -v /mnt/lustre/GPU4/home/sushuang/siyi:/app -p 8822:22 --name wsy --gpus all --restart=always iris-main /bin/bash注意几个参数-itd-p-v--gpus</code></pre></div></figure><h1 id="汉语"><a href="#汉语" class="headerlink" title="汉语"></a>汉语</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">apt-get updateapt-get install -y locales fonts-noto-cjklocale-gen zh_CN.UTF-8echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrcecho 'export LC_ALL=zh_CN.UTF-8' >> ~/.bashrcsource ~/.bashrc</code></pre></div></figure><h1 id="docker-ssh"><a href="#docker-ssh" class="headerlink" title="docker ssh"></a>docker ssh</h1><p>如果在容器中运行 <code>service ssh status</code> 时显示“ssh: unrecognized service”,可能是因为容器中没有安装 SSH 服务。通常,Docker 容器默认不安装 SSH 服务,特别是精简镜像或者仅用于运行特定应用的容器。</p><h3 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h3><ol><li><p><strong>安装 SSH 服务</strong></p><p>如果你需要在 Docker 容器中运行 SSH 服务,你可以尝试安装并配置它。以下是在基于 Debian/Ubuntu 镜像的容器中安装和配置 SSH 服务的步骤:</p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">apt-get updateapt-get install -y openssh-server</code></pre></div></figure><p>安装完成后,创建 SSH 服务的运行目录,并启动 SSH 服务:</p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">mkdir /var/run/sshdservice ssh start</code></pre></div></figure></li><li><strong>配置 SSH</strong><br>确保 SSH 配置文件正确,特别是 <code>sshd_config</code> 文件中的设置。例如,确保 <code>PermitRootLogin</code> 被设置为 <code>yes</code>,如果你要以 root 用户登录:<figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">sed -i 's/PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config</code></pre></div></figure></li><li><strong>暴露 SSH 端口</strong><br>确保 Docker 容器正确暴露了 SSH 端口(通常是端口 22)。你在启动容器时已经进行了端口映射,所以确保端口映射正确并且容器内部的服务配置无误。</li><li><strong>重新启动容器</strong><br>重新启动容器以确保所有配置生效:<figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">docker restart wsy</code></pre></div></figure></li><li><strong>检查 SSH 服务</strong><br>再次检查 SSH 服务是否正在运行:<figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">service ssh status</code></pre></div></figure></li><li><strong>连接到容器</strong><br>使用 SSH 客户端连接到容器:<figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">ssh -p 8822 [email protected]</code></pre></div></figure><h3 id="如果不需要-SSH"><a href="#如果不需要-SSH" class="headerlink" title="如果不需要 SSH"></a>如果不需要 SSH</h3></li></ol><p>如果你只是需要在容器内执行一些命令,而不需要通过 SSH 访问容器,可以直接使用 <code>docker exec</code> 进入容器:</p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">docker exec -it wsy /bin/bash</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">sudo docker port [新的容器ID] 22sudo docker port d92fd3e9f4a0 22service ssh restart</code></pre></div></figure><h1 id="设置docker-root-密码"><a href="#设置docker-root-密码" class="headerlink" title="设置docker root 密码"></a>设置docker root 密码</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">passwd</code></pre></div></figure><h1 id="用docker的root链接"><a href="#用docker的root链接" class="headerlink" title="用docker的root链接"></a>用docker的root链接</h1><p>Host docker-container<br> HostName 172.10.60.143<br> User root<br> Port 8822<br>csdn:<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">https://blog.csdn.net/weixin_43268590/article/details/129244984</code></pre></div></figure><br>rr notion<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">https://rylynn.notion.site/dockerfile-51925f5a19344df6a7d720485468fc19?pvs=4</code></pre></div></figure></p><h1 id="ssh免密登录"><a href="#ssh免密登录" class="headerlink" title="ssh免密登录"></a>ssh免密登录</h1><p>现在本地和服务器输入<br><figure><div class="code-wrapper"><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">ssh-keygen</code></pre></div></figure><br>连续三个回车之后生成密钥。搜索本地的公钥复制到服务器的authorized_keys文件<br><figure><div class="code-wrapper"><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">touch ~/.ssh/authorized_keys</code></pre></div></figure><br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">ssh-copy-id username@ip</code></pre></div></figure></p><h1 id="git-push报错-443"><a href="#git-push报错-443" class="headerlink" title="git push报错 443"></a>git push报错 443</h1><p>先看本地代理的端口号是什么<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240904204851.png" alt="20240904204851"><br>比我我的是7890,所以就改为7890<br><figure><div class="code-wrapper"><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">git config --global https.proxy 127.0.0.1:7890git config --global http.proxy 127.0.0.1:7890#查看正确么git config --listuser.name=wawzysysuser.email=[email protected]=mainhttp.proxy=127.0.0.1:7890</code></pre></div></figure></p><h1 id="连接服务器上传本地文件"><a href="#连接服务器上传本地文件" class="headerlink" title="连接服务器上传本地文件"></a>连接服务器上传本地文件</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">sftp username@ip输入密码#查看remote路径pwd #查看本地路径lpwd#上传put 文件 romte_pathput data.txt /home/username/</code></pre></div></figure><h1 id="查看显卡"><a href="#查看显卡" class="headerlink" title="查看显卡"></a>查看显卡</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">nvidia-smi#安装sudo apt install nvtop#输入nvtop查看nvitop</code></pre></div></figure><p><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240912232146.png" alt="20240912232146"></p><h2 id="vsocde打开远程太慢"><a href="#vsocde打开远程太慢" class="headerlink" title="vsocde打开远程太慢"></a>vsocde打开远程太慢</h2><p>先用ssh命令连接 然后删除 <code>rm -rf ~/.vscode-server</code></p><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">$ ssh -p 29974 -i "C:\Users\19160\wangsiyi_2024-11-03_20-11-00-494.txt" [email protected]</code></pre></div></figure>]]></content>
</entry>
<entry>
<title>java_yi</title>
<link href="/post/2979e7ed.html"/>
<url>/post/2979e7ed.html</url>
<content type="html"><![CDATA[<figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none"><!-- 字符串变量赋值 -->String name=sc.next();</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">Math.pow(a,2);Math.sqrt(a);Math.abs(x-y);</code></pre></div></figure><p> </p><p><strong>求最大值</strong></p><p> $\text{max}(a, b) = \frac{a + b + \text{abs}(a - b)}{2} $ </p><p> $ \text{max}(a, b, c) = \frac{\left(\frac{a + b + \text{abs}(a - b)}{2} + c + \text{abs}\left(\frac{a + b + \text{abs}(a - b)}{2} - c\right)\right)}{2}$</p><p> </p><p><strong>t+=1e-8;</strong><br>java 里面浮点数的不精确性,最后得到的是 0.9999996 ,int 强制转换后变为 0<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); double t=sc.nextDouble(); t+=1e-8; // java 里面浮点数的不精确性,最后得到的是 0.9999996 ,int 强制转换后变为 0 // 处理:给t加一个很小的值1e-8 System.out.println("NOTAS:"); System.out.printf("%d nota(s) de R$ 100.00\n",(int)t/100); System.out.printf("%d nota(s) de R$ 50.00\n",(int)t%100/50); System.out.printf("%d nota(s) de R$ 20.00\n",(int)t%100%50/20); System.out.printf("%d nota(s) de R$ 10.00\n",(int)t%100%50%20/10); System.out.printf("%d nota(s) de R$ 5.00\n",(int)t%100%50%20%10/5); System.out.printf("%d nota(s) de R$ 2.00\n",(int)t%100%50%20%10%5/2); System.out.println("MOEDAS:"); System.out.printf("%d moeda(s) de R$ 1.00\n",(int)t%100%50%20%10%5%2/1); System.out.printf("%d moeda(s) de R$ 0.50\n",(int)(t%1/0.5)); System.out.printf("%d moeda(s) de R$ 0.25\n",(int)(t%1%0.5/0.25)); System.out.printf("%d moeda(s) de R$ 0.10\n",(int)(t%1%0.5%0.25/0.1)); System.out.printf("%d moeda(s) de R$ 0.05\n",(int)(t%1%0.5%0.25%0.1/0.05)); System.out.printf("%d moeda(s) de R$ 0.01\n",(int)(t%1%0.5%0.25%0.1%0.05/0.01)); }}</code></pre></div></figure></p><p> <br>java里 <strong>判断字符串相等不能用 a==”wsy”</strong><br>只能用 <strong>a.equals(wsy)</strong>,使用前提a不为空,否则报错<br>处理:<strong>“wsy”.equals(a)</strong><br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">if("onivoro".equals(z)){ System.out.printf("homem");}else System.out.printf("vaca");</code></pre></div></figure><br> <br>数据集<br><img src="image.png" alt="alt text"><br>这段代码的作用是将指定目录下的所有以”.jpg”结尾的图片文件的标签写入同名的”.txt”文件中。假设有一个名叫”antsimage”的目录,里面存放了一些以”ants”开头的蚂蚁图片,我们需要将其标签写入同名的”.txt”文件中,以便后续使用。<br>代码核心部分使用了Python的os模块来定位文件位置和创建文件,主要分为以下步骤:</p><p>定义根目录rootdir、目标目录targetdir和标签label。在该段代码中,rootdir指的是存放所有图片的目录;targetdir指的是存放待处理图片的目录名称,本例中为”ants_image”;而label则是标签,这里为”ants”。<br>获取目标文件夹下所有图片文件的名称,并去掉文件扩展名”.jpg”,只保留文件名。<br>遍历所有文件,使用with open()语句创建同名”.txt”文件,并向其中写入标签label。<br>循环结束后,所有的图片的标签都写入了同名”.txt”文件中,存放在指定的目录out_dir下。</p><p>总之,这段代码的作用是将一些图片的标签写入同名文件中,方便后续使用。<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">import osroot_dir = '练手数据集/train'target_dir = 'ants_image'img_path = os.listdir(os.path.join(root_dir, target_dir))label = target_dir.split('_')【0】out_dir = 'ants_label'for i in img_path:file_name = i.split('.jpg')【0】with open(os.path.join(root_dir, out_dir,"{}.txt".format(file_name)),'w') as f:f.write(label)</code></pre></div></figure><br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">1</code></pre></div></figure></p>]]></content>
<categories>
<category> java </category>
</categories>
<tags>
<tag> java </tag>
</tags>
</entry>
<entry>
<title>picture</title>
<link href="/post/16db4f89.html"/>
<url>/post/16db4f89.html</url>
<content type="html"><![CDATA[<p><img src="E:/0Code/blog/blog-demo/source/_posts/screenshot/2024-05-28_17-00-06.png" alt="Screenshot"></p><h3 id="Screenshot-taken-on-2024-05-28-17-04-24"><a href="#Screenshot-taken-on-2024-05-28-17-04-24" class="headerlink" title="Screenshot taken on 2024-05-28_17-04-24"></a>Screenshot taken on 2024-05-28_17-04-24</h3><p><img src="E:/0Code/blog/blog-demo/source/_posts/screenshot/2024-05-28_17-04-23.png" alt="Screenshot"></p><h3 id="Screenshot-taken-on-2024-05-28-17-22-24"><a href="#Screenshot-taken-on-2024-05-28-17-22-24" class="headerlink" title="Screenshot taken on 2024-05-28_17-22-24"></a>Screenshot taken on 2024-05-28_17-22-24</h3><p><img src="E:/0Code/blog/blog-demo/source/_posts/screenshot/2024-05-28_17-22-23.png" alt="Screenshot"></p><h3 id="Screenshot-taken-on-2024-05-28-17-28-16"><a href="#Screenshot-taken-on-2024-05-28-17-28-16" class="headerlink" title="Screenshot taken on 2024-05-28_17-28-16"></a>Screenshot taken on 2024-05-28_17-28-16</h3><p><img src="E:/0Code/blog/blog-demo/source/_posts/screenshot/2024-05-28_17-28-15.png" alt="Screenshot"></p><h3 id="Screenshot-taken-on-2024-05-28-17-28-45"><a href="#Screenshot-taken-on-2024-05-28-17-28-45" class="headerlink" title="Screenshot taken on 2024-05-28_17-28-45"></a>Screenshot taken on 2024-05-28_17-28-45</h3><p><img src="E:/0Code/blog/blog-demo/source/_posts/screenshot/2024-05-28_17-28-44.png" alt="Screenshot"></p><h3 id="Screenshot-taken-on-2024-05-28-17-29-38"><a href="#Screenshot-taken-on-2024-05-28-17-29-38" class="headerlink" title="Screenshot taken on 2024-05-28_17-29-38"></a>Screenshot taken on 2024-05-28_17-29-38</h3><p><img src="E:/0Code/blog/blog-demo/source/_posts/screenshot/2024-05-28_17-29-37.png" alt="Screenshot"></p><h3 id="Screenshot-taken-on-2024-05-28-17-30-32"><a href="#Screenshot-taken-on-2024-05-28-17-30-32" class="headerlink" title="Screenshot taken on 2024-05-28_17-30-32"></a>Screenshot taken on 2024-05-28_17-30-32</h3><p><img src="E:/0Code/blog/blog-demo/source/_posts/screenshot/2024-05-28_17-30-31.png" alt="Screenshot"></p><h3 id="Screenshot-taken-on-2024-05-28-17-31-12"><a href="#Screenshot-taken-on-2024-05-28-17-31-12" class="headerlink" title="Screenshot taken on 2024-05-28_17-31-12"></a>Screenshot taken on 2024-05-28_17-31-12</h3><p><img src="E:/0Code/blog/blog-demo/source/_posts/screenshot/2024-05-28_17-31-11.png" alt="Screenshot"></p>]]></content>
</entry>
<entry>
<title>model</title>
<link href="/post/d79572d9.html"/>
<url>/post/d79572d9.html</url>
<content type="html"><![CDATA[<h3 id="pymodel"><a href="#pymodel" class="headerlink" title="pymodel"></a>pymodel</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">import syssys.setrecursionlimit(100000)input=lambda:sys.stdin.readline().strip()# write=lambda x:sys.stdout.write(str(x)+'\n')# from decimal import Decimal# from datetime import datetime,timedelta# from random import randint# from copy import deepcopyfrom collections import *# from heapq import heapify,heappush,heappop# from bisect import bisect_left,bisect,insort# from math import inf,sqrt,gcd,pow,ceil,floor,log,log2,log10,pi,sin,cos,tan,asin,acos,atan# from functools import cmp_to_key,reduce# from operator import or_,xor,add,mul# from itertools import permutations,combinations,accumulatesint = lambda: int(input())mint = lambda: map(int, input().split())lint = lambda: list(map(int, input().split()))def solve(): if __name__ == '__main__': #t=int(input()) #for _ in range(t): # solve() solve()</code></pre></div></figure><h3 id="并查集"><a href="#并查集" class="headerlink" title="并查集"></a>并查集</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">class DSU: def __init__(self, n): self.parent = list(range(n)) self.size = [1] * n self.n = n self.setCount = n def find(self, x): if self.parent[x] != x: self.parent[x] = self.find(self.parent[x]) return self.parent[x] def union(self, x, y): x, y = self.find(x), self.find(y) if x == y: return False if self.size[x] < self.size[y]: x, y = y, x self.parent[y] = x self.size[x] += self.size[y] self.setCount -= 1 return True def connected(self, x, y): x, y = self.find(x), self.find(y) return x == y</code></pre></div></figure><h3 id="组合数"><a href="#组合数" class="headerlink" title="组合数"></a>组合数</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">class Factorial: def __init__(self, N, mod) -> None: N += 1 self.mod = mod self.f = [1 for _ in range(N)] self.g = [1 for _ in range(N)] for i in range(1, N): self.f[i] = self.f[i - 1] * i % self.mod self.g[-1] = pow(self.f[-1], mod - 2, mod) for i in range(N - 2, -1, -1): self.g[i] = self.g[i + 1] * (i + 1) % self.mod def fac(self, n): return self.f[n] def fac_inv(self, n): return self.g[n] def comb(self, n, m): if n < m or m < 0 or n < 0: return 0 return self.f[n] * self.g[m] % self.mod * self.g[n - m] % self.mod def permu(self, n, m): if n < m or m < 0 or n < 0: return 0 return self.f[n] * self.g[n - m] % self.mod def catalan(self, n): return (self.comb(2 * n, n) - self.comb(2 * n, n - 1)) % self.mod def inv(self, n): return self.f[n - 1] * self.g[n] % self.mod</code></pre></div></figure><h3 id="质数筛"><a href="#质数筛" class="headerlink" title="质数筛"></a>质数筛</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">pri = []not_prime = [False] * Ndef pre(n): for i in range(2, n + 1): if not not_prime[i]: pri.append(i) for pri_j in pri: if i * pri_j > n: break not_prime[i * pri_j] = True if i % pri_j == 0: break</code></pre></div></figure><h3 id="质因数个数"><a href="#质因数个数" class="headerlink" title="质因数个数"></a>质因数个数</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">def divide(n): ans = [] i = 2 while i <= n // i: if n % i == 0: cnt = 0 while n % i == 0: cnt += 1 n //= i ans.append((i, cnt)) i += 1 if n > 1: ans.append((n, 1)) return ans</code></pre></div></figure><h3 id="约数之和"><a href="#约数之和" class="headerlink" title="约数之和"></a>约数之和</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">mod = int(1e9 + 7)primes = {}a = int(input())while a: a -= 1 n = int(input()) i = 2 while i <= n // i: while n % i == 0: n //= i if i in primes: primes[i] += 1 else: primes[i] = 1 i += 1 if n > 1: if n in primes: primes[n] += 1 else: primes[n] = 1res = 1for i,val in primes.items(): t = 1 while val: val -= 1 t = (t * i + 1) % mod res = res * t % modprint(res)</code></pre></div></figure><h3 id="约数个数"><a href="#约数个数" class="headerlink" title="约数个数"></a>约数个数</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">mod = 1e9 + 7primes = {}a = int(input())while a: a -= 1 n = int(input()) i = 2 while i <= n // i: while n % i == 0: n //= i if i in primes: primes[i] += 1 else: primes[i] = 1 i += 1 if n > 1: if n in primes: primes[n] += 1 else: primes[n] = 1res = 1for i in primes.values(): res = int(res * (i + 1) % mod)print(res)</code></pre></div></figure><h3 id="欧拉函数"><a href="#欧拉函数" class="headerlink" title="欧拉函数"></a>欧拉函数</h3><p><img src="image.png" alt="alt text"><br><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">n = int(input())for i in range(n): a = int(input()) res = a j = 2 while j * j <= a : if a % j == 0: res = res * (j - 1) // j while a % j == 0: a = a // j j += 1 if a > 1: res = res * (a - 1) // a print(int(res))</code></pre></div></figure></p><h3 id="筛法求欧拉函数"><a href="#筛法求欧拉函数" class="headerlink" title="筛法求欧拉函数"></a>筛法求欧拉函数</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">N = 1000010primes = [0]*Nphi = [0]*Nst = [False]*Ndef get_eulers(n): phi[1] = 1 cnt = 0 for i in range(2,n+1): if not st[i]: primes[cnt] = i cnt += 1 phi[i] = i - 1 j = 0 while primes[j] <= n // i: st[primes[j] * i] = True if i % primes[j] == 0: phi[primes[j] * i] = phi[i] * primes[j] break phi[primes[j] * i] = phi[i] * (primes[j] - 1) j += 1</code></pre></div></figure><h3 id="扩展欧几里得"><a href="#扩展欧几里得" class="headerlink" title="扩展欧几里得"></a>扩展欧几里得</h3><p><img src="image-1.png" alt="alt text"><br><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">def extend_gcd(a,b,x,y): if not b: return a,1,0 d,y,x = extend_gcd(b, a % b, y, x) y -= a // b * x return d,x,yn = int(input())while n: n -= 1 a,b = map(int,input().split()) x,y = 0,0 d,x,y = extend_gcd(a,b,x,y) print(x,y)</code></pre></div></figure></p><h3 id="线性同余方程"><a href="#线性同余方程" class="headerlink" title="线性同余方程"></a>线性同余方程</h3><p><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240518200819.png" alt="20240518200819"><br><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">def extend_gcd(a,b,x,y): if not b: return a,1,0 d,y,x = extend_gcd(b, a % b, y, x) y -= a // b * x return d,x,yn = int(input())while n: n -= 1 a,b,m = map(int,input().split()) x,y = 0,0 d,x,y = extend_gcd(a,m,x,y) if b % d: print("impossible") else: print(x * (b // d) % m)</code></pre></div></figure></p><h3 id="求组合数"><a href="#求组合数" class="headerlink" title="求组合数"></a>求组合数</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">import mathdef C(n, m): return math.factorial(n) // (math.factorial(m) * math.factorial(n - m))n, m = map(int, input().split())print(C(n, m))</code></pre></div></figure><h2 id="数据结构"><a href="#数据结构" class="headerlink" title="数据结构"></a>数据结构</h2><h3 id="树状数组"><a href="#树状数组" class="headerlink" title="树状数组"></a>树状数组</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python"># 左闭右闭class FenWick: def __init__(self, n: int): self.n = n self.tr = [0 for _ in range(n + 1)] def sum(self, i: int): i += 1 s = 0 while i >= 1: s += self.tr[i] i &= i - 1 return s def rangeSum(self, l: int, r: int): return self.sum(r) - self.sum(l - 1) def add(self, i: int, val: int): i += 1 while i <= self.n: self.tr[i] += val i += i & -i</code></pre></div></figure><h3 id="线段数"><a href="#线段数" class="headerlink" title="线段数"></a>线段数</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">import sysfrom collections import defaultdict# region fastioinput = lambda: sys.stdin.readline().rstrip()sint = lambda: int(input())mint = lambda: map(int, input().split())ints = lambda: list(map(int, input().split()))class segtree: def __init__(self, n: int, m: int): self.n = n self.m = m self.max = [0] * (4*n) # 维护区间最大值 self.sum = [0] * (4*n) # 维护区间和 # self.build(m, 1, n, 1) # 建树【线段树下标从1开始】 # '''自定义build函数:建树''' # def build(self, val, left, right, root): # if left == right: # 到达叶子节点,递归终止 # self.max[root] = val # self.sum[root] = val # return # mid = (left + right) // 2 # self.build(val, left, mid, 2*root) # 左右递归 # self.build(val, mid+1, right, 2*root+1) # self.pushUp(root) # 更新信息 '''自定义pushUp函数:更新节点信息''' def pushUp(self, root): self.max[root] = max(self.max[2*root], self.max[2*root+1]) self.sum[root] = self.sum[2*root] + self.sum[2*root+1] '''自定义add函数:单点更新''' def add(self, i: int, val: int, left: int, right: int, root: int) -> None: # i表示操作位置编号; root表示当前节点编号(树中),[left, right]表示root节点所维护的区间 if left == right: # 到达叶子节点,递归终止 self.max[root] += val # root节点更新,+val self.sum[root] += val # root节点更新,+val return mid = (left + right) // 2 if i <= mid: # 根据条件判断去往左/右子树 self.add(i, val, left, mid, 2*root) else: self.add(i, val, mid+1, right, 2*root+1) self.pushUp(root) # 子节点更新了,父节点信息也需要更新 '''自定义query函数:区间和查询''' # 查询[L, R]之间合 # 在区间[left, right]中查询区间[L,R]中的数值之和【求和】 def query(self, L: int, R: int, left: int, right: int, root: int): # L,R表示操作区间; root表示当前节点编号(树中),[left, right]表示root节点所维护的区间 if L<=left and right<=R: return self.sum[root] mid = (left+right) // 2 range_sum = 0 if L <= mid: # 左区间有重合 range_sum += self.query(L, R, left, mid, 2*root) if R > mid: # 右区间有重合 range_sum += self.query(L, R, mid+1, right, 2*root+1) return range_sum #查询[L, R]之间的最大值 #qeery_max(L,R,1,N,1) def query_max(self, L:int, R: int, left :int, right: int, root : int): if L <= left and right <= R: return self.max[root] mid = (left + right) // 2 mm = 0 if L <= mid: mm = self.query_max(L, R, left, mid, 2 * root) if R > mid: mm = max(mm, self.query_max(L, R, mid + 1, right, 2 * root + 1)) return mmdef solve(): m, p = mint() se = segtree(m, 0) last = 0 n = 0 for _ in range(m): op, l = input().split() l = int(l) if op == 'A': # print("val", (last + l) % p) se.add(n + 1, (last + l) % p, 1, m, 1) n += 1 else: last = se.query_max(n - l + 1, n, 1, m, 1 ) print(last)if __name__ == '__main__': solve()</code></pre></div></figure><h3 id="SortedList"><a href="#SortedList" class="headerlink" title="SortedList"></a>SortedList</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">class SortedList: def __init__(self, iterable=[], _load=200): """Initialize sorted list instance.""" values = sorted(iterable) self._len = _len = len(values) self._load = _load self._lists = _lists = [values[i:i + _load] for i in range(0, _len, _load)] self._list_lens = [len(_list) for _list in _lists] self._mins = [_list[0] for _list in _lists] self._fen_tree = [] self._rebuild = True def _fen_build(self): """Build a fenwick tree instance.""" self._fen_tree[:] = self._list_lens _fen_tree = self._fen_tree for i in range(len(_fen_tree)): if i | i + 1 < len(_fen_tree): _fen_tree[i | i + 1] += _fen_tree[i] self._rebuild = False def _fen_update(self, index, value): """Update `fen_tree[index] += value`.""" if not self._rebuild: _fen_tree = self._fen_tree while index < len(_fen_tree): _fen_tree[index] += value index |= index + 1 def _fen_query(self, end): """Return `sum(_fen_tree[:end])`.""" if self._rebuild: self._fen_build() _fen_tree = self._fen_tree x = 0 while end: x += _fen_tree[end - 1] end &= end - 1 return x def _fen_findkth(self, k): """Return a pair of (the largest `idx` such that `sum(_fen_tree[:idx]) <= k`, `k - sum(_fen_tree[:idx])`).""" _list_lens = self._list_lens if k < _list_lens[0]: return 0, k if k >= self._len - _list_lens[-1]: return len(_list_lens) - 1, k + _list_lens[-1] - self._len if self._rebuild: self._fen_build() _fen_tree = self._fen_tree idx = -1 for d in reversed(range(len(_fen_tree).bit_length())): right_idx = idx + (1 << d) if right_idx < len(_fen_tree) and k >= _fen_tree[right_idx]: idx = right_idx k -= _fen_tree[idx] return idx + 1, k def _delete(self, pos, idx): """Delete value at the given `(pos, idx)`.""" _lists = self._lists _mins = self._mins _list_lens = self._list_lens self._len -= 1 self._fen_update(pos, -1) del _lists[pos][idx] _list_lens[pos] -= 1 if _list_lens[pos]: _mins[pos] = _lists[pos][0] else: del _lists[pos] del _list_lens[pos] del _mins[pos] self._rebuild = True def _loc_left(self, value): """Return an index pair that corresponds to the first position of `value` in the sorted list.""" if not self._len: return 0, 0 _lists = self._lists _mins = self._mins lo, pos = -1, len(_lists) - 1 while lo + 1 < pos: mi = (lo + pos) >> 1 if value <= _mins[mi]: pos = mi else: lo = mi if pos and value <= _lists[pos - 1][-1]: pos -= 1 _list = _lists[pos] lo, idx = -1, len(_list) while lo + 1 < idx: mi = (lo + idx) >> 1 if value <= _list[mi]: idx = mi else: lo = mi return pos, idx def _loc_right(self, value): """Return an index pair that corresponds to the last position of `value` in the sorted list.""" if not self._len: return 0, 0 _lists = self._lists _mins = self._mins pos, hi = 0, len(_lists) while pos + 1 < hi: mi = (pos + hi) >> 1 if value < _mins[mi]: hi = mi else: pos = mi _list = _lists[pos] lo, idx = -1, len(_list) while lo + 1 < idx: mi = (lo + idx) >> 1 if value < _list[mi]: idx = mi else: lo = mi return pos, idx def add(self, value): """Add `value` to sorted list.""" _load = self._load _lists = self._lists _mins = self._mins _list_lens = self._list_lens self._len += 1 if _lists: pos, idx = self._loc_right(value) self._fen_update(pos, 1) _list = _lists[pos] _list.insert(idx, value) _list_lens[pos] += 1 _mins[pos] = _list[0] if _load + _load < len(_list): _lists.insert(pos + 1, _list[_load:]) _list_lens.insert(pos + 1, len(_list) - _load) _mins.insert(pos + 1, _list[_load]) _list_lens[pos] = _load del _list[_load:] self._rebuild = True else: _lists.append([value]) _mins.append(value) _list_lens.append(1) self._rebuild = True def discard(self, value): """Remove `value` from sorted list if it is a member.""" _lists = self._lists if _lists: pos, idx = self._loc_right(value) if idx and _lists[pos][idx - 1] == value: self._delete(pos, idx - 1) def remove(self, value): """Remove `value` from sorted list; `value` must be a member.""" _len = self._len self.discard(value) if _len == self._len: raise ValueError('{0!r} not in list'.format(value)) def pop(self, index=-1): """Remove and return value at `index` in sorted list.""" pos, idx = self._fen_findkth(self._len + index if index < 0 else index) value = self._lists[pos][idx] self._delete(pos, idx) return value def bisect_left(self, value): """Return the first index to insert `value` in the sorted list.""" pos, idx = self._loc_left(value) return self._fen_query(pos) + idx def bisect_right(self, value): """Return the last index to insert `value` in the sorted list.""" pos, idx = self._loc_right(value) return self._fen_query(pos) + idx def count(self, value): """Return number of occurrences of `value` in the sorted list.""" return self.bisect_right(value) - self.bisect_left(value) def __len__(self): """Return the size of the sorted list.""" return self._len def __getitem__(self, index): """Lookup value at `index` in sorted list.""" pos, idx = self._fen_findkth(self._len + index if index < 0 else index) return self._lists[pos][idx] def __delitem__(self, index): """Remove value at `index` from sorted list.""" pos, idx = self._fen_findkth(self._len + index if index < 0 else index) self._delete(pos, idx) def __contains__(self, value): """Return true if `value` is an element of the sorted list.""" _lists = self._lists if _lists: pos, idx = self._loc_left(value) return idx < len(_lists[pos]) and _lists[pos][idx] == value return False def __iter__(self): """Return an iterator over the sorted list.""" return (value for _list in self._lists for value in _list) def __reversed__(self): """Return a reverse iterator over the sorted list.""" return (value for _list in reversed(self._lists) for value in reversed(_list)) def __repr__(self): """Return string representation of sorted list.""" return 'SortedList({0})'.format(list(self))</code></pre></div></figure><h3 id="字符串哈希"><a href="#字符串哈希" class="headerlink" title="字符串哈希"></a>字符串哈希</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">class StringHash: def __init__(self, s): n = len(s) self.base = 131 self.mod = 10 ** 13 + 7 self.h = h = [0] * (n + 1) self.p = p = [1] * (n + 1) for i in range(1, n + 1): p[i] = p[i - 1] * self.base % self.mod h[i] = h[i - 1] * self.base + ord(s[i - 1]) h[i] %= self.mod def get_hash(self, l, r): res = self.h[r] - self.h[l] * self.p[r - l] return res % self.mod</code></pre></div></figure><h3 id="二维差分"><a href="#二维差分" class="headerlink" title="二维差分"></a>二维差分</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">for i in range(1, n + 1): for j in range(1, m + 1): b[i][j] = a[i][j] - a[i - 1][j] - a[i][j - 1] + a[i - 1][j - 1]for i in range(q): x1, y1, x2, y2, c = mint() b[x1][y1] += c b[x1][y2 + 1] -= c b[x2 + 1][y1] -= c b[x2 + 1][y2 + 1] += cfor i in range(1, n + 1): for j in range(1, m + 1): a[i][j] = b[i][j] + a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1] print(a[i][j], end = ' ') print()</code></pre></div></figure><h2 id="图论"><a href="#图论" class="headerlink" title="图论"></a>图论</h2><h3 id="spfa"><a href="#spfa" class="headerlink" title="spfa"></a>spfa</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">def spfa(u, n, g) -> int: q = deque() q.append(u) vis = set() dist = defaultdict(lambda : inf) vis.add(u) dist[u] = 0 while q: t = q.popleft() vis.remove(t) for j, d in g[t]: if dist[j] > dist[t] + d: dist[j] = dist[t] + d if j not in vis: vis.add(j) q.append(j) return dist[n]</code></pre></div></figure><h3 id="dijkstra"><a href="#dijkstra" class="headerlink" title="dijkstra"></a>dijkstra</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">def dij(u, n, g) -> int: q = [(0, u)] # 距离 顶点 vis = set() dist = defaultdict(lambda : inf) dist[1] = 0 while q: d, u = heappop(q) if u in vis: continue vis.add(u) for j, d in g[u]: if j not in vis and dist[j] > dist[u] + d: dist[j] = dist[u] + d heappush(q, (dist[j], j)) return dist[n]</code></pre></div></figure><h3 id="krushkal"><a href="#krushkal" class="headerlink" title="krushkal"></a>krushkal</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">def kruskal(): dsu = DSU(n) edges.sort(key = lambda x : x[2]) res = 0 for u, v, w in edges: if dsu.same(u, v): continue dsu.merge(u, v) res += w return res if dsu.n == 1 else inf</code></pre></div></figure>]]></content>
</entry>
<entry>
<title>linux/linux系统</title>
<link href="/post/9211474f.html"/>
<url>/post/9211474f.html</url>
<content type="html"><![CDATA[<figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none"># 1. 查看系统版本</code></pre></div></figure><h2 id="中文输入法"><a href="#中文输入法" class="headerlink" title="中文输入法"></a>中文输入法</h2><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">下载 fcitx (输入法框架)fcitx-rime切换输入法快捷键:ctrl + space</code></pre></div></figure><h2 id="实习日志:"><a href="#实习日志:" class="headerlink" title="实习日志:"></a>实习日志:</h2><h3 id="2024-6-6"><a href="#2024-6-6" class="headerlink" title="2024.6.6"></a>2024.6.6</h3><p>Pbd 调试</p><h2 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h2><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none"># 解压文件tar -xzf cifar-10-python.tar.gz</code></pre></div></figure>]]></content>
<tags>
<tag> linux </tag>
</tags>
</entry>
<entry>
<title>爬虫</title>
<link href="/post/7ade1d5c.html"/>
<url>/post/7ade1d5c.html</url>
<content type="html"><![CDATA[<figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">#是用urllib模块import urlliburl = "http://www.baidu.com"response = urllib.request.urlopen(url)#read 方法 返回的字节形式的二进制数据#decode 方法 将二进制数据解码成字符串content = response.read().decode("utf-8")print(content)</code></pre></div></figure>]]></content>
</entry>
<entry>
<title>windows</title>
<link href="/post/e3e7859b.html"/>
<url>/post/e3e7859b.html</url>
<content type="html"><![CDATA[<h2 id="软件"><a href="#软件" class="headerlink" title="软件"></a>软件</h2><h3 id="snipaste"><a href="#snipaste" class="headerlink" title="snipaste"></a><code>snipaste</code></h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">F1 截图F3 粘贴,可以把粘贴的文字也变成图片</code></pre></div></figure><h3 id="powertoys"><a href="#powertoys" class="headerlink" title="powertoys"></a><code>powertoys</code></h3><p>作用:<br>粘贴为纯文本<br>图片提取文字</p>]]></content>
</entry>
<entry>
<title>c++</title>
<link href="/post/6f1ca842.html"/>
<url>/post/6f1ca842.html</url>
<content type="html"><![CDATA[<h2 id="vector"><a href="#vector" class="headerlink" title="vector"></a>vector</h2><figure><div class="code-wrapper"><pre class="line-numbers language-c++" data-language="c++"><code class="language-c++">vector<int> a(n);// pairvector<pair<int, int>> b;b.push_back({1, 2});// 遍历for(const auto& [a, b] : b){ cout << a << " " << b << endl;}</code></pre></div></figure><h2 id="哈希表"><a href="#哈希表" class="headerlink" title="哈希表"></a>哈希表</h2><figure><div class="code-wrapper"><pre class="line-numbers language-c++" data-language="c++"><code class="language-c++">map<int, int> mp = { {0, 1}, {4, 1}, {6, 1}, {9, 1}, {8, 2}};mp.find(digit) != mp.end()map<int, PII> mpfor(auto &it : mp){ cout << it.firtst << " " << it.second.first << " " << it.second.second << endl;}</code></pre></div></figure><h2 id="readline"><a href="#readline" class="headerlink" title="readline"></a>readline</h2><figure><div class="code-wrapper"><pre class="line-numbers language-c++" data-language="c++"><code class="language-c++">std::vector<T> input(){ std::vector<T> a; T s; while (std::cin >> s) { a.push_back(s); if (std::cin.get() != ' ') break; } return a;}//用法vector<int> a = input<int>();</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-c++" data-language="c++"><code class="language-c++">template <typename T>vector<T> input(){ vector<T> list; string input; getline(cin, input); istringstream stream(input); int number; while (stream >> number) { list.push_back(number); } return list;}// 用法vector<int> a = input<int>();</code></pre></div></figure>]]></content>
</entry>
<entry>
<title>sort</title>
<link href="/post/5124f222.html"/>
<url>/post/5124f222.html</url>
<content type="html"><![CDATA[<p>给定一个整数 $N$,请你求出所有分母小于或等于 $N$,大小在 $[0,1]$ 范围内的<strong>最简分数</strong>,并按从小到大顺序依次输出。</p><p>例如,当 $N = 5$ 时,所有满足条件的分<code>数按顺序依</code>次为:</p><script type="math/tex; mode=display">\frac{0}{1},\frac{1}{5},\frac{1}{4},\frac{1}{3},\frac{2}{5},\frac{1}{2},\frac{3}{5},\frac{2}{3},\frac{3}{4},\frac{4}{5},\frac{1}{1}</script><h4 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h4><p>共一行,包含一个整数 $N$。</p><h4 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h4><p>按照从小到大的顺序,输出所有满足条件的分数。</p><p>每个分数占一行,格式为 $a/b$,其中 $a$ 为分子, $b$ 为分母。</p><h4 id="数据范围"><a href="#数据范围" class="headerlink" title="数据范围"></a>数据范围</h4><p>$1 \le N \le 160$</p><h4 id="输入样例:"><a href="#输入样例:" class="headerlink" title="输入样例:"></a>输入样例:</h4><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">5</code></pre></div></figure><h4 id="输出样例:"><a href="#输出样例:" class="headerlink" title="输出样例:"></a>输出样例:</h4><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">0/11/51/41/32/51/23/52/33/44/51/1</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python"># E:\0Code\Algorithm\acw\1360.py 2024-03-30 by wzfrom functools import cmp_to_keyimport syssys.setrecursionlimit(100000)input=lambda:sys.stdin.readline().strip()from collections import *from math import *sint = lambda: int(input())mint = lambda: map(int, input().split())lint = lambda: list(map(int, input().split()))n = sint()a = set()def cmp(x,y): return x[0]*y[1] - x[1]*y[0] #返回 < 0 排序结果 x y #返回 > 0 排序结果 y xfor i in range(1, n + 1): for j in range(1, n + 1): if i <= j: a.add((i, j)) b = set()for (i, j) in a: b.add((i // gcd(i,j), j // gcd(i, j)))a = list(b)a = sorted(a, key = cmp_to_key(cmp))print("0/1")for (i, j) in a: print(str(i) + "/" + str(j))</code></pre></div></figure>]]></content>
<tags>
<tag> sort </tag>
</tags>
</entry>
<entry>
<title>pycharm</title>
<link href="/post/1a3626ab.html"/>
<url>/post/1a3626ab.html</url>
<content type="html"><![CDATA[<h3 id="汉化"><a href="#汉化" class="headerlink" title="汉化"></a>汉化</h3><p>在<code>plugin</code>里面下载<code>Chinese</code></p><h3 id="自带git"><a href="#自带git" class="headerlink" title="自带git"></a>自带git</h3><p><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240327151202.png" alt="20240327151202"></p><h3 id="新建文件自动生成头文件"><a href="#新建文件自动生成头文件" class="headerlink" title="新建文件自动生成头文件"></a>新建文件自动生成头文件</h3><p><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240327151303.png" alt="20240327151303"><br>操作如下<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240327151534.png" alt="20240327151534"></p><h3 id="代码模板"><a href="#代码模板" class="headerlink" title="代码模板"></a>代码模板</h3>]]></content>
<tags>
<tag> pycharm - python </tag>
</tags>
</entry>
<entry>
<title>vscode</title>
<link href="/post/849a3ae4.html"/>
<url>/post/849a3ae4.html</url>
<content type="html"><![CDATA[<h2 id="VSC换python内核"><a href="#VSC换python内核" class="headerlink" title="VSC换python内核"></a>VSC换python内核</h2><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">ctrl + shift + pSelect Interpreter</code></pre></div></figure><h2 id="将mackdown转化为别的格式"><a href="#将mackdown转化为别的格式" class="headerlink" title="将mackdown转化为别的格式"></a>将mackdown转化为别的格式</h2><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">下载markdown pdf 插件ctrl + shife + p 输入 markdown pdf</code></pre></div></figure><h2 id="解决markdown-pdf-不能输出latex公式问题"><a href="#解决markdown-pdf-不能输出latex公式问题" class="headerlink" title="解决markdown pdf 不能输出latex公式问题"></a>解决markdown pdf 不能输出latex公式问题</h2><p>在下面路径打开<br><figure><div class="code-wrapper"><pre class="line-numbers language-markup" data-language="markup"><code class="language-markup">C://Users/<username>/.vscode/extensions/yzane.markdown-pdf-1.4.1/template/template.html</code></pre></div></figure><br>在最后的body和html之间输入<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none"><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script type="text/x-mathjax-config"> MathJax.Hub.Config({ tex2jax: {inlineMath: [['$', '$']]}, messageStyle: "none" });</script></code></pre></div></figure><br>参考:<br><a href="https://blog.csdn.net/qq_18506419/article/details/103461825">VScode中Markdown PDF无法正确输出包含公式的pdf解决方案</a></p><h2 id="常用cmd命令"><a href="#常用cmd命令" class="headerlink" title="常用cmd命令"></a>常用cmd命令</h2><h3 id="删除-exe"><a href="#删除-exe" class="headerlink" title="删除.exe"></a>删除.exe</h3><figure><div class="code-wrapper"><pre class="line-numbers language-cmd" data-language="cmd"><code class="language-cmd">在文件下的cmd输入:for /r %i in (*.exe) do del /q %i</code></pre></div></figure><h2 id="图床"><a href="#图床" class="headerlink" title="图床"></a>图床</h2><h3 id="快捷键"><a href="#快捷键" class="headerlink" title="快捷键"></a>快捷键</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">ctrl+alt+u为什么token会消失???</code></pre></div></figure><h3 id="vscode配置java"><a href="#vscode配置java" class="headerlink" title="vscode配置java"></a>vscode配置java</h3><ul><li>下载jdk,笔者下载的是jdk15.0.1<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311145620.png" alt="20240311145620"><br>下载完之后安装即可</li><li>环境变量配置<br>打开系统环境变量-点击环境变量-点击系统变量的path-编辑-新建,添加刚刚的安装目录的<code>bin</code>和<code>jre\bin</code><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311145829.png" alt="20240311145829"><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311150012.png" alt="20240311150012"><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311150158.png" alt="20240311150158"></li><li>查看配置正确<br><code>win+r</code>输入<code>cmd</code>,输入<code>java -version</code> 和 <code>javac -version</code>,如果出现下图所示配置正确<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311150420.png" alt="20240311150420"></li><li>下载vscode的java插件</li><li>编写程序<figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">// import java.util.*;public class a {public static void main(String[] args) {System.out.println("Hello World");}}</code></pre></div></figure><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311150528.png" alt="20240311150528"></li><li>可以在<code>.gitignore</code>中添加运行生成的<code>.class</code>文件<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311150747.png" alt="20240311150747"></li></ul><h3 id="Fira-Code"><a href="#Fira-Code" class="headerlink" title="Fira Code"></a>Fira Code</h3><p>下载字体并安装<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240325172523.png" alt="20240325172523"><br>然后再设置中加入</p><p><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240325165226.png" alt="20240325165226"><br>开启连写<br>在设置中打开settings<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240325165349.png" alt="20240325165349"><br>更改<code>"editor.fontLigatures": true,</code>为true<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240325172538.png" alt="20240325172538"></p><h3 id="代码模板"><a href="#代码模板" class="headerlink" title="代码模板"></a>代码模板</h3><p>vscode用户自建模板变量:<br>点击左下角设置齿轮<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240327142401.png" alt="20240327142401"><br>点击用户代码片段<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240327142436.png" alt="20240327142436"><br>可以选择新建和原有代码片段<br>提供一个示例<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240327142541.png" alt="20240327142541"><br><code>prefix</code>后面是自己设置的快捷键唤起符<br><code>description</code>是描述<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">TM_SELECTED_TEXT当前选定的文本或空字符串TM_CURRENT_LINE当前行的内容TM_CURRENT_WORD光标下单词的内容或空字符串TM_LINE_INDEX基于零索引的行号TM_LINE_NUMBER基于一个索引的行号TM_FILENAME当前文档的文件名TM_FILENAME_BASE不带扩展名的当前文档的文件名 (比如这里你在用户代码片段中写了${TM_FILENAME_BASE},在自动生成的代码里就会在这个位置自动填充上你的文件的不含扩展名的文件名)TM_DIRECTORY当前文档的目录TM_FILEPATH当前文档的完整文件路径RELATIVE_FILEPATH当前文档的相对(相对于打开的工作空间或文件夹)文件路径CLIPBOARD剪贴板的内容WORKSPACE_NAME打开的工作区或文件夹的名称WORKSPACE_FOLDER打开的工作区或文件夹的路径</code></pre></div></figure><br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">CURRENT_YEAR本年度CURRENT_YEAR_SHORT本年度的最后两位数CURRENT_MONTH以两位数字表示的月份(例如"02")CURRENT_MONTH_NAME月份的全名(例如"七月")CURRENT_MONTH_NAME_SHORT月份的短名称(例如"Jul")CURRENT_DATE以两位数字表示的月份中的某一天(例如"08")CURRENT_DAY_NAME日期的名称(例如"星期一")CURRENT_DAY_NAME_SHORT日期的短名称(例如"星期一")CURRENT_HOUR24 小时制格式的当前小时CURRENT_MINUTE当前分钟为两位数CURRENT_SECOND当前第二位为两位数CURRENT_SECONDS_UNIX自 Unix 纪元以来的秒数</code></pre></div></figure><br><a href="https://snippet-generator.app/?description=&tabtrigger=&snippet=&mode=vscode">自动转化为snippet网址</a><br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">https://snippet-generator.app/?description=&tabtrigger=&snippet=&mode=vscode</code></pre></div></figure></p><h3 id="解决vscode文件夹下只有一个子文件会折叠起来的问题"><a href="#解决vscode文件夹下只有一个子文件会折叠起来的问题" class="headerlink" title="解决vscode文件夹下只有一个子文件会折叠起来的问题"></a>解决vscode文件夹下只有一个子文件会折叠起来的问题</h3><blockquote><p>打开设置搜索’Compact Folders’<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240912231502.png" alt="20240912231502"><br>取消即可</p></blockquote>]]></content>
<tags>
<tag> vscode - 环境 </tag>
</tags>
</entry>
<entry>
<title>anaconda</title>
<link href="/post/a5f86784.html"/>
<url>/post/a5f86784.html</url>
<content type="html"><![CDATA[<h2 id="anaconda"><a href="#anaconda" class="headerlink" title="anaconda"></a>anaconda</h2><h3 id="env"><a href="#env" class="headerlink" title="env"></a>env</h3><figure><div class="code-wrapper"><pre class="line-numbers language-yaml" data-language="yaml"><code class="language-yaml">创建虚拟环境conda create -n env_name python=3.8</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-yaml" data-language="yaml"><code class="language-yaml">查看虚拟环境conda env list</code></pre></div></figure><p>进入\激活虚拟环境<br><figure><div class="code-wrapper"><pre class="line-numbers language-yaml" data-language="yaml"><code class="language-yaml">conda activate env_name</code></pre></div></figure><br>退出虚拟环境<br><figure><div class="code-wrapper"><pre class="line-numbers language-yaml" data-language="yaml"><code class="language-yaml">conda activate</code></pre></div></figure><br>删除虚拟环境<br><figure><div class="code-wrapper"><pre class="line-numbers language-yaml" data-language="yaml"><code class="language-yaml">conda remove --name env_name --all</code></pre></div></figure><br>导出环境<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">#获得环境中的所有配置conda env export --name myenv > myenv.yml#重新还原环境conda env create -f myenv.yml</code></pre></div></figure></p><h3 id="pkg"><a href="#pkg" class="headerlink" title="pkg"></a>pkg</h3><p>查看当前虚拟环境的包/库<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda list</code></pre></div></figure><br>查询是否安装哪个包<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">详细查找conda list pkgname 模糊查找conda list pkgname* </code></pre></div></figure><br>安装包<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda install package_nameconda install numpy=0.20.3</code></pre></div></figure><br>查询包的版本 (不是本地的,是这个包网上有几个版本)<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda search package_name</code></pre></div></figure><br>卸载包<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda uninstall package_name</code></pre></div></figure></p><p>清理anaconda缓存<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda clean -p # 删除没有用的包 --packagesconda clean -t # 删除tar打包 --tarballsconda clean -y -all # 删除所有的安装包及cache(索引缓存、锁定文件、未使用过的包和tar包)</code></pre></div></figure></p><p>python版本管理<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda install python=3.5 #将版本变更到指定版本python --version #查看python版本</code></pre></div></figure></p><p><code>conda install</code> vs <code>pip install</code><br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda只能在conda管理的环境中使用,例如比如conda所创建的虚环境中使用。pip可以在任何环境中使用,在conda创建的环境 中使用pip命令,需要先安装pip(conda install pip ),然后可以 环境A 中使用pip 。conda 安装的包,pip可以卸载,但不能卸载依赖包,pip安装的包,只能用pip卸载。</code></pre></div></figure><br>如何判断conda中某个包是通过conda还是pip安装的?<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">执行 conda list ,用pip安装的包显示的build项目为pypi。</code></pre></div></figure></p><h3 id="镜像"><a href="#镜像" class="headerlink" title="镜像"></a>镜像</h3><p>添加清华源channel<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/</code></pre></div></figure><br>删除<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/</code></pre></div></figure><br>展示所有<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda config --show channels</code></pre></div></figure><br>设置下载时候显示channel<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda config --set show_channel_urls yes</code></pre></div></figure><br>查看现在的channel状态和优先级<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda config --get channels</code></pre></div></figure><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240315122413.png" alt="20240315122413"></p><p>展示所有的镜像channel<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda config --show channels #越上面优先级越高</code></pre></div></figure><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240315122438.png" alt="20240315122438"></p><p>添加conda-forge channel<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda-forge channel</code></pre></div></figure><br><strong>最新添加的优先级越高</strong></p><h3 id="jupyter"><a href="#jupyter" class="headerlink" title="jupyter"></a>jupyter</h3><p>方法一 为 conda 环境创建特殊内核<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda create -n my-conda-env # creates new virtual envconda activate my-conda-env # activate environment in terminalconda install ipykernel # install Python kernel in new conda envipython kernel install --user --name=环境名 # configure Jupyter to use Python kernel</code></pre></div></figure><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240315130049.png" alt="20240315130049"><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240315130130.png" alt="20240315130130"></p><p>方法一删除虚拟环境内核<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">jupyter kernelspec remove 环境名 # 删除虚拟环境的 kernel 内核</code></pre></div></figure></p><p>方法二 使用 nb_conda_kernels 添加所有环境<br>第一种方法其实也挺不错的。有个缺点是,你新建一个环境,就要重复操作一次。</p><p>而这个方法就是一键添加所有 conda 环境,但需要在新环境里面安装 <code>ipykernel</code><br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">conda activate my-conda-env conda install ipykernelconda deactivateconda activate base # could be also some other environmentconda install nb_conda_kernelsjupyter notebook</code></pre></div></figure><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/a5ac79c8f5825d253d1c5dcbf3a786c7.png" alt="a5ac79c8f5825d253d1c5dcbf3a786c7"><br><strong>第一个框是方法二<br>第二个框是方法一</strong><br>11</p>]]></content>
<tags>
<tag> jupyter </tag>
<tag> anaconda </tag>
<tag> python </tag>
<tag> 深度学习 </tag>
<tag> pytorch </tag>
</tags>
</entry>
<entry>
<title>sublime</title>
<link href="/post/3e496c55.html"/>
<url>/post/3e496c55.html</url>
<content type="html"><![CDATA[<h2 id="插件"><a href="#插件" class="headerlink" title="插件"></a>插件</h2><p><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240423173308.png" alt="20240423173308"><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240423173331.png" alt="20240423173331"></p><h2 id="快捷键"><a href="#快捷键" class="headerlink" title="快捷键"></a>快捷键</h2><p>ctrl + b<br>ctrl + alt + b<br>ctrl + s<br>ctrl + n</p><h2 id="主题"><a href="#主题" class="headerlink" title="主题"></a>主题</h2><p>配色方案<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311154302.png" alt="20240311154302"><br>主题<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240423164843.png" alt="20240423164843"><br>字体<code>Fira Cod</code><br>首选项-设置-复制<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311154630.png" alt="20240311154630"><br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">{"ignored_packages":[],"font_face": "Fira Code",/*"font_size": 12,*/"theme": "Seti Monokai.sublime-theme","color_scheme": "Packages/Theme - Seti Monokai/scheme/Seti Monokai.tmTheme","dark_color_scheme": "Monokai.sublime-color-scheme","light_color_scheme": "Breakers.sublime-color-scheme","sublime_merge_path": "D:\\Sublime Text\\Sublime Merge\\sublime_merge.exe","auto_complete": true,"auto_mathch_enabled": false,/*"color_scheme": "Packages/User/SublimeLinter/Monokai (SL).tmTheme",*//*"font_size": 12,*//*"ignored_packages":["Vintage"],*/// "auto_complete_triggers": // [ // {"selector": "text.html", "characters": "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.<",},// {"selector": "text.plain", "characters": "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.<",} // ],"index_files": true,"font_size": 14,}</code></pre></div></figure></p><h2 id="编译系统"><a href="#编译系统" class="headerlink" title="编译系统"></a>编译系统</h2><h3 id="python"><a href="#python" class="headerlink" title="python"></a>python</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">{ "cmd": ["E:/Anaconda/envs/test2/python.exe", "-u", "$file"], "selector": "source.python", "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "quiet": true}</code></pre></div></figure><h3 id="java"><a href="#java" class="headerlink" title="java"></a>java</h3><p>需要手动更改class名字,目前结果方法没找到。写个模版改一下<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none"></code></pre></div></figure></p><h2 id="FastOlympicCoding"><a href="#FastOlympicCoding" class="headerlink" title="FastOlympicCoding"></a>FastOlympicCoding</h2><h3 id="更改python解释器"><a href="#更改python解释器" class="headerlink" title="更改python解释器"></a>更改python解释器</h3><p> 更改的是<code>ctrl + alt + b</code>的解释环境</p><ul><li>可以看出下方的和右侧不一样,</li><li>这是因为在Sublime Text的默认设置中,Ctrl + B通常用于触发当前激活的构建系统,是之前设置的’test2’</li><li><code>ctrl + alt + b</code>是<code>FastOlympicCoding</code>运行的默认环境python。</li></ul><p><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240205175833.png" alt="20240205175833"><br><strong>这和本地的环境是一一对应的</strong><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240205180443.png" alt="20240205180443"></p><ul><li>1 先按照下图打开:<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240205175324.png" alt="20240205175324"></li><li>2找到<code>python</code></li><li>3把<code>"run_cmd": "python \"{source_file}\"</code>中的<code>python</code>改为自己想要的解释器路径,如下图<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240205175358.png" alt="20240205175358"><br>更改完毕结果如下<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240205180536.png" alt="20240205180536"></li></ul><h3 id="sublime-配置java环境"><a href="#sublime-配置java环境" class="headerlink" title="sublime 配置java环境"></a>sublime 配置java环境</h3><ul><li>下载jdk和前文配置<code>vscode</code></li><li>新建编译系统<br>工具-编译系统-新建编译系统-复制进去-保存为<code>java.sublime-build</code><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">{ "cmd": ["javac", "$file_name", "&&", "start","cmd", "/k", "java", "$file_base_name"], "shell": true, "file_regex": "^(...*?):([0-9]*):?([0-9]*)", "working_dir": "$file_path", "selector": "source.java", "encoding": "GBK", "variants": [ { "name": "Terminal", "cmd": ["javac", "$file_name", "&&", "start","cmd", "/k", "java", "$file_base_name"], "shell_cmd": "", }, { "name": "Build", "quiet": true, "shell_cmd": "javac $file_name && java $file_base_name && del $file_base_name.class", } ]}</code></pre></div></figure><h3 id="sublime添加代码模板记得空出class位置"><a href="#sublime添加代码模板记得空出class位置" class="headerlink" title="sublime添加代码模板记得空出class位置"></a>sublime添加代码模板记得空出class位置</h3>工具-插件开发-新建代码片段-复制代码-保存为-“jm.sublime-snippet”<figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none"><snippet> <content><![CDATA[//$TM_FILEPATHimport java.io.*;import java.util.StringTokenizer;import java.util.Scanner;public class ${1:} { public static Reader in; public static PrintWriter out; public static void main(String[] args) { out = new PrintWriter(new BufferedOutputStream(System.out)); in = new Reader(); int t = in.nextInt(); while (t-- > 0) solve(); out.close(); } static void solve(){ int n = in.nextInt(), m = in.nextInt(), k = in.nextInt(); char[][] c = new char[n][m]; for (int i = 0; i < n; i++) { c[i] = in.nextLine().toCharArray(); } } static class Reader { private BufferedReader br; private StringTokenizer st; Reader() { br = new BufferedReader(new InputStreamReader(System.in)); } boolean hasNext(){ try { while (st == null || !st.hasMoreElements()) { st = new StringTokenizer(br.readLine()); } }catch (Exception e){ return false; } return true; } String next() { try { while (st == null || !st.hasMoreTokens()) { st = new StringTokenizer(br.readLine()); } } catch (IOException e) { e.printStackTrace(); } return st.nextToken(); } int nextInt() { return Integer.parseInt(next()); } int[] nextIntArray(int n) { int[] arr = new int[n]; for (int i = 0; i < n; i++) arr[i] = nextInt(); return arr; } long[] nextLongArray(int n) { long[] arr = new long[n]; for (int i = 0; i < n; i++) arr[i] = nextLong(); return arr; } long nextLong() { return Long.parseLong(next()); } String nextLine() { String s = ""; try { s = br.readLine(); } catch (IOException e) { e.printStackTrace(); } return s; } }}]]></content> <tabTrigger>jp</tabTrigger></snippet></code></pre></div></figure>输入<code>jp</code>(自己设置的)就可以出现代码模板<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311153911.png" alt="20240311153911"></li></ul>]]></content>
<tags>
<tag> sublime </tag>
</tags>
</entry>
<entry>
<title>java1</title>
<link href="/post/eb7e46a9.html"/>
<url>/post/eb7e46a9.html</url>
<content type="html"><![CDATA[<h2 id="环境配置"><a href="#环境配置" class="headerlink" title="环境配置"></a>环境配置</h2><h3 id="vscode配置java"><a href="#vscode配置java" class="headerlink" title="vscode配置java"></a>vscode配置java</h3><ul><li>下载jdk,笔者下载的是jdk15.0.1<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311145620.png" alt="20240311145620"><br>下载完之后安装即可</li><li>环境变量配置<br>打开系统环境变量-点击环境变量-点击系统变量的path-编辑-新建,添加刚刚的安装目录的<code>bin</code>和<code>jre\bin</code><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311145829.png" alt="20240311145829"><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311150012.png" alt="20240311150012"><br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311150158.png" alt="20240311150158"></li><li>查看配置正确<br><code>win+r</code>输入<code>cmd</code>,输入<code>java -version</code> 和 <code>javac -version</code>,如果出现下图所示配置正确<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311150420.png" alt="20240311150420"></li><li>下载vscode的java插件</li><li>编写程序<figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">// import java.util.*;public class a {public static void main(String[] args) {System.out.println("Hello World");}}</code></pre></div></figure><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311150528.png" alt="20240311150528"></li><li>可以在<code>.gitignore</code>中添加运行生成的<code>.class</code>文件<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311150747.png" alt="20240311150747"></li></ul><h3 id="sublime-配置java环境"><a href="#sublime-配置java环境" class="headerlink" title="sublime 配置java环境"></a>sublime 配置java环境</h3><ul><li>下载jdk和前文配置<code>vscode</code></li><li>新建编译系统<br>工具-编译系统-新建编译系统-复制进去-保存为<code>java.sublime-build</code><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">{ "cmd": ["javac", "$file_name", "&&", "start","cmd", "/k", "java", "$file_base_name"], "shell": true, "file_regex": "^(...*?):([0-9]*):?([0-9]*)", "working_dir": "$file_path", "selector": "source.java", "encoding": "GBK", "variants": [ { "name": "Terminal", "cmd": ["javac", "$file_name", "&&", "start","cmd", "/k", "java", "$file_base_name"], "shell_cmd": "", }, { "name": "Build", "quiet": true, "shell_cmd": "javac $file_name && java $file_base_name && del $file_base_name.class", } ]}</code></pre></div></figure><h3 id="sublime添加代码模板记得空出class位置"><a href="#sublime添加代码模板记得空出class位置" class="headerlink" title="sublime添加代码模板记得空出class位置"></a>sublime添加代码模板记得空出class位置</h3>工具-插件开发-新建代码片段-复制代码-保存为-“jm.sublime-snippet”<figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none"><snippet> <content><![CDATA[//$TM_FILEPATHimport java.io.*;import java.util.StringTokenizer;import java.util.Scanner;public class ${1:} { public static Reader in; public static PrintWriter out; public static void main(String[] args) { out = new PrintWriter(new BufferedOutputStream(System.out)); in = new Reader(); int t = in.nextInt(); while (t-- > 0) solve(); out.close(); } static void solve(){ int n = in.nextInt(), m = in.nextInt(), k = in.nextInt(); char[][] c = new char[n][m]; for (int i = 0; i < n; i++) { c[i] = in.nextLine().toCharArray(); } } static class Reader { private BufferedReader br; private StringTokenizer st; Reader() { br = new BufferedReader(new InputStreamReader(System.in)); } boolean hasNext(){ try { while (st == null || !st.hasMoreElements()) { st = new StringTokenizer(br.readLine()); } }catch (Exception e){ return false; } return true; } String next() { try { while (st == null || !st.hasMoreTokens()) { st = new StringTokenizer(br.readLine()); } } catch (IOException e) { e.printStackTrace(); } return st.nextToken(); } int nextInt() { return Integer.parseInt(next()); } int[] nextIntArray(int n) { int[] arr = new int[n]; for (int i = 0; i < n; i++) arr[i] = nextInt(); return arr; } long[] nextLongArray(int n) { long[] arr = new long[n]; for (int i = 0; i < n; i++) arr[i] = nextLong(); return arr; } long nextLong() { return Long.parseLong(next()); } String nextLine() { String s = ""; try { s = br.readLine(); } catch (IOException e) { e.printStackTrace(); } return s; } }}]]></content> <tabTrigger>jp</tabTrigger></snippet></code></pre></div></figure>输入<code>jp</code>(自己设置的)就可以出现代码模板<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240311153902.png" alt="20240311153902"></li></ul><h2 id="数据结构常用"><a href="#数据结构常用" class="headerlink" title="数据结构常用"></a>数据结构常用</h2><h3 id="邻接表"><a href="#邻接表" class="headerlink" title="邻接表"></a>邻接表</h3><figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">List<int[]>[] g = new ArrayList[N]; // 邻接表Arrays.setAll(g, i -> new ArrayList<>());</code></pre></div></figure><p><strong>List<int[]>[]:</strong></p><ul><li>这是一个数组,每个元素都是可以存储整数数组(int[])的list。</li><li>数组的大小在初始化时固定,并且在其生命周期中不能更改。</li><li>这种结构允许通过索引直接访问列表,访问时间为O(1)。<h3 id="数组初始化"><a href="#数组初始化" class="headerlink" title="数组初始化"></a>数组初始化</h3><figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">int[] dist = new int[n + 5];Arrays.fill(dist, Integer.MAX_VALUE );</code></pre></div></figure><h3 id="双端队列"><a href="#双端队列" class="headerlink" title="双端队列"></a>双端队列</h3><figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">Deque<Integer> q = new LinkedList<>();</code></pre></div></figure><h3 id="快读"><a href="#快读" class="headerlink" title="快读"></a>快读</h3><figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">public static Reader in;public static void mian(String[] args){ in = new Reader();}static class Reader { private final BufferedReader br; private StringTokenizer st; Reader() { br = new BufferedReader(new InputStreamReader(System.in)); } boolean hasNext() { try { while (st == null || !st.hasMoreElements()) { st = new StringTokenizer(br.readLine()); } } catch (Exception e) { return false; } return true; } String next() { try { while (st == null || !st.hasMoreTokens()) { st = new StringTokenizer(br.readLine()); } } catch (IOException e) { e.printStackTrace(); } return st.nextToken(); } int nextInt() { return Integer.parseInt(next()); } int[] nextIntArray(int n) { int[] arr = new int[n]; for (int i = 0; i < n; i++) arr[i] = nextInt(); return arr; } long[] nextLongArray(int n) { long[] arr = new long[n]; for (int i = 0; i < n; i++) arr[i] = nextLong(); return arr; } long nextLong() { return Long.parseLong(next()); } String nextLine() { String s = ""; try { s = br.readLine(); } catch (IOException e) { e.printStackTrace(); } return s; }}</code></pre></div></figure><h3 id=""><a href="#" class="headerlink" title=" "></a> </h3><figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">private final Set<Integer> s = new HashSet<>();s.add(val);s.contains(val);</code></pre></div></figure><h2 id="List"><a href="#List" class="headerlink" title="List"></a>List</h2>List: List是一个接口,它定义了一个可以按顺序访问的元素集合的基本操作和方法。List是Java集合框架的一部分,它提供了一种方式来存储有序的元素集合。List是一个接口,所以你不能直接实例化一个List。</li></ul><p>ArrayList: ArrayList是List接口的一个具体实现。它使用数组的结构来存储元素,这使得元素的随机访问变得非常快。但是,添加或删除元素(尤其是列表的前部)可能比在LinkedList中慢,因为这可能需要移动数组中的其他元素。ArrayList提供了List接口的所有标准操作,并且还添加了一些其他的功能,如确保容量和增加容量。<br><figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">List<List<Integer>> rooms = new ArrayList<>();下标从0开始,访问x下标的元素。rooms.get(x)</code></pre></div></figure></p><h3 id="ArrayList"><a href="#ArrayList" class="headerlink" title="ArrayList"></a>ArrayList</h3><p><code>ArrayList</code>是<code>Java</code>中最常用的集合之一,提供了一系列功能来处理动态数组。</p><figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">// 访问元素List<Integer> l = new ArrayList<>();l.get(int index);for(Integer num : list){}//大小size()//判空isEmpty()//搜索contains(Object o) //检查列表中是否存在指定的元素。indexOf(Object o) //返回列表中指定元素的第一个出现的索引,如果列表不包含该元素,则返回-1。lastIndexOf(Object o) //返回列表中指定元素的最后一个出现的索引,如果列表不包含该元素,则返回-1。//范围subList(int l, int r) // 返回一个指定范围的新列表,不会改变原有列表</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">//转换toArray() //将列表转换为一个数组</code></pre></div></figure><p>批量操作<br><figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">clear() // 移除列表中的所有元素。</code></pre></div></figure><br>排序<br><figure><div class="code-wrapper"><pre class="line-numbers language-java" data-language="java"><code class="language-java">people.sort((p1, p2) -> p1.age - p2.age);按照年龄升序</code></pre></div></figure></p>]]></content>
<tags>
<tag> java </tag>
</tags>
</entry>
<entry>
<title>git</title>
<link href="/post/518e617c.html"/>
<url>/post/518e617c.html</url>
<content type="html"><![CDATA[<h2 id="建立第二个github-page"><a href="#建立第二个github-page" class="headerlink" title="建立第二个github page"></a>建立第二个github page</h2><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">https://wawzysys.github.io/blog2/</code></pre></div></figure><h2 id="sshbug"><a href="#sshbug" class="headerlink" title="sshbug"></a>ssh<code>bug</code></h2><p>不知道为什么只有pigcha才能连接成功,clash代理不显示ssh。https都没有问题。</p><h1 id=""><a href="#" class="headerlink" title="#"></a>#</h1><p>10.4</p><h1 id="上传git超过100mb限制"><a href="#上传git超过100mb限制" class="headerlink" title="上传git超过100mb限制"></a>上传git超过100mb限制</h1><h2 id="修改为500MB"><a href="#修改为500MB" class="headerlink" title="修改为500MB"></a>修改为500MB</h2><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">git config http.postBuffer 524288000</code></pre></div></figure><h2 id="删除git历史中超过100MB的文件"><a href="#删除git历史中超过100MB的文件" class="headerlink" title="删除git历史中超过100MB的文件"></a>删除git历史中超过100MB的文件</h2><h3 id="步骤-1:下载预构建的-BFG-Jar-文件"><a href="#步骤-1:下载预构建的-BFG-Jar-文件" class="headerlink" title="步骤 1:下载预构建的 BFG Jar 文件"></a><strong>步骤 1:下载预构建的 BFG Jar 文件</strong></h3><ol><li><p><a href="https://github.com/rtyley/bfg-repo-cleaner/releases/download/v1.14.0/bfg-1.14.0.jar">下载 bfg-1.14.0.jar</a></p></li><li><p><strong>将 <code>bfg.jar</code> 移动到一个不包含中文字符的路径</strong></p><p>将 <code>bfg.jar</code> 移动到一个路径简单且不包含中文字符的目录,例如 <code>E:\bfg\</code>。</p></li></ol><h3 id="步骤-2:克隆仓库的镜像版本"><a href="#步骤-2:克隆仓库的镜像版本" class="headerlink" title="步骤 2:克隆仓库的镜像版本"></a><strong>步骤 2:克隆仓库的镜像版本</strong></h3><ol><li><p><strong>打开 Git Bash 或命令提示符</strong></p></li><li><p><strong>导航到您希望存放镜像仓库的位置</strong></p><p>例如,将镜像仓库存放在 <code>E:\0Code</code> 目录下:</p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">cd /e/0Code</code></pre></div></figure></li><li><p><strong>克隆仓库的镜像</strong></p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">git clone --mirror https://github.com/wawzysys/Algorithm_.git</code></pre></div></figure><p>这将创建一个名为 <code>Algorithm_.git</code> 的目录,包含仓库的所有数据。</p></li><li><p><strong>进入镜像仓库目录</strong></p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">cd Algorithm_.git</code></pre></div></figure></li></ol><h3 id="步骤-3:运行-BFG-Repo-Cleaner"><a href="#步骤-3:运行-BFG-Repo-Cleaner" class="headerlink" title="步骤 3:运行 BFG Repo-Cleaner"></a><strong>步骤 3:运行 BFG Repo-Cleaner</strong></h3><p>现在,您可以使用 BFG 来移除大文件。</p><ol><li><p><strong>确保您在镜像仓库目录中</strong></p><p>您应该已经在 <code>Algorithm_.git</code> 目录中:</p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">pwd</code></pre></div></figure><p>输出应类似于:</p><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">/e/0Code/Algorithm_.git</code></pre></div></figure></li><li><p><strong>运行 BFG 命令</strong></p><p>使用以下命令来移除特定的大文件:</p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">java -jar "/e/bfg/bfg.jar" --delete-files "Clash for Windows.zip" --delete-files "Z-lib.zip" --delete-files "mingw64.zip"</code></pre></div></figure><p><strong>或</strong>,如果您想移除所有超过 100MB 的文件,可以使用:</p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">java -jar "/e/bfg/bfg.jar" --strip-blobs-bigger-than 100M</code></pre></div></figure><p><strong>注意:</strong></p><ul><li>在 Git Bash 中,路径分隔符应使用 <code>/</code>。</li><li>确保路径中使用引号括起,以处理可能的空格或特殊字符。</li></ul></li><li><p><strong>等待 BFG 处理完成</strong></p><p>BFG 会扫描并移除指定的大文件。处理完成后,您会看到类似以下的输出:</p><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">Found 3 commits to processCleaning repository, please wait...Cleaned repository</code></pre></div></figure></li></ol><h3 id="步骤-4:清理和压缩仓库"><a href="#步骤-4:清理和压缩仓库" class="headerlink" title="步骤 4:清理和压缩仓库"></a><strong>步骤 4:清理和压缩仓库</strong></h3><p>在运行 BFG 之后,执行以下 Git 命令以清理不需要的对象:</p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">git reflog expire --expire=now --allgit gc --prune=now --aggressive</code></pre></div></figure><p>这将彻底清理大文件并优化仓库。</p><h3 id="步骤-5:强制推送清理后的仓库到-GitHub"><a href="#步骤-5:强制推送清理后的仓库到-GitHub" class="headerlink" title="步骤 5:强制推送清理后的仓库到 GitHub"></a><strong>步骤 5:强制推送清理后的仓库到 GitHub</strong></h3><p>由于仓库历史已被重写,您需要使用 <code>--force</code> 选项来强制推送更改到 GitHub:</p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">git push --force</code></pre></div></figure><p><strong>⚠️ 警告:</strong> 强制推送会覆盖远程仓库的历史记录。<strong>所有协作者需要重新克隆仓库</strong>,否则他们的本地仓库将与远程仓库不一致,可能会导致问题。</p><h3 id="步骤-6:验证清理结果"><a href="#步骤-6:验证清理结果" class="headerlink" title="步骤 6:验证清理结果"></a><strong>步骤 6:验证清理结果</strong></h3><ol><li><p><strong>检查 GitHub 仓库</strong></p><p>登录您的 GitHub 仓库页面,确保大文件已被移除。</p></li><li><p><strong>尝试再次推送</strong></p><p>在本地仓库中进行一次小的提交并尝试推送,以确保问题已解决。</p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">echo "测试" > test.txtgit add test.txtgit commit -m "测试推送"git push</code></pre></div></figure><p>如果推送成功,说明清理已成功。</p></li></ol><h3 id="步骤-7:配置-Git-LFS(可选)"><a href="#步骤-7:配置-Git-LFS(可选)" class="headerlink" title="步骤 7:配置 Git LFS(可选)"></a><strong>步骤 7:配置 Git LFS(可选)</strong></h3><p>为了避免未来再次遇到大文件问题,建议使用 <a href="https://git-lfs.github.com/">Git Large File Storage (Git LFS)</a> 来管理大文件。</p><h3 id="操作步骤:"><a href="#操作步骤:" class="headerlink" title="操作步骤:"></a><strong>操作步骤:</strong></h3><ol><li><p><strong>安装 Git LFS</strong></p><p>如果尚未安装 Git LFS,请访问 <a href="https://git-lfs.github.com/">Git LFS 官方网站</a> 下载并安装。</p></li><li><p><strong>初始化 Git LFS</strong></p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">git lfs install</code></pre></div></figure></li><li><p><strong>配置要跟踪的文件类型</strong></p><p>例如,跟踪所有 <code>.zip</code> 文件:</p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">git lfs track "*.zip"</code></pre></div></figure><p>这将创建或更新 <code>.gitattributes</code> 文件。</p></li><li><p><strong>提交 <code>.gitattributes</code> 文件</strong></p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">git add .gitattributesgit commit -m "配置 Git LFS 跟踪 zip 文件"</code></pre></div></figure></li><li><p><strong>添加和提交大文件</strong></p><figure><div class="code-wrapper"><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">git add path/to/largefile.zipgit commit -m "使用 Git LFS 添加大文件"git push</code></pre></div></figure></li></ol><p><strong>注意:</strong> Git LFS 有其自身的存储限制和费用,请根据您的项目需求选择合适的方案。</p><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a><strong>总结</strong></h3><ol><li><strong>下载正确的 <code>bfg.jar</code> 文件</strong>,确保不是源代码。</li><li><strong>将 <code>bfg.jar</code> 移动到不包含中文字符的路径</strong>,如 <code>E:\bfg\</code>。</li><li><strong>克隆仓库的镜像版本</strong>,以确保 BFG 可以清理所有分支和标签中的大文件。</li><li><strong>运行 BFG 命令</strong>,指定正确的 <code>bfg.jar</code> 路径和要删除的文件。</li><li><strong>执行 Git 垃圾回收</strong>,彻底清理大文件。</li><li><strong>强制推送</strong>清理后的仓库到 GitHub。</li><li><strong>验证清理结果</strong>,确保大文件已被移除。</li><li><strong>使用 Git LFS 管理未来的大文件</strong>,避免类似问题再次发生。</li></ol>]]></content>
<tags>
<tag> git </tag>
</tags>
</entry>
<entry>
<title>test</title>
<link href="/post/d87f7e0c.html"/>
<url>/post/d87f7e0c.html</url>
<content type="html"><![CDATA[<p>[TOC]<br><code>print</code><br><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">a = input()print(a)</code></pre></div></figure><br><figure><div class="code-wrapper"><pre class="line-numbers language-CSS" data-language="CSS"><code class="language-CSS">/* CSS */@import url(https://cdn.jsdelivr.net/npm/[email protected]/distr/fira_code.css);h1#site-title { font-size: 8vh!important; text-shadow:5px 2px 6px #000!important; font-family:Fira Code!important}span#subtitle { font-size: 3vh!important; text-shadow:5px 2px 6px #000!important; font-family:Fira Code!important}a#site-name { text-shadow:5px 2px 6px #000!important; font-family:Fira Code!important}#article-container pre, #article-container code { font-family:Fira Code!important;}.article-title { font-weight: bolder; font-family:Fira Code!important;}</code></pre></div></figure></p>]]></content>
</entry>
<entry>
<title>python</title>
<link href="/post/b9ebdeb8.html"/>
<url>/post/b9ebdeb8.html</url>
<content type="html"><![CDATA[<figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">bisect_left:>=bisect_right:></code></pre></div></figure><h2 id="dict"><a href="#dict" class="headerlink" title="dict"></a>dict</h2><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">dict = defaultdict(list)# 设置无限大dict = defaultdict(inf) </code></pre></div></figure><h2 id="SortedDict"><a href="#SortedDict" class="headerlink" title="SortedDict"></a>SortedDict</h2><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">dict = defaultdict(SortedDict)</code></pre></div></figure><h2 id="any"><a href="#any" class="headerlink" title="any"></a>any</h2><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">if any(1 in row for row in grid): return -1# 检查列表中是否有真值print(any([0, False, 5])) # True,因为5是真值# 空列表中没有真值print(any([])) # False# 字典在使用any时会检查键而不是值print(any({0: "False", 1: "True"})) # True,因为有一个真键1# 空字典print(any({})) # False# 检查列表中是否存在大于5的元素nums = [1, 4, 6, 8]print(any(n > 5 for n in nums)) # True</code></pre></div></figure><h2 id="copy"><a href="#copy" class="headerlink" title="copy"></a>copy</h2><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">#二位数组import copypre_grid = copy.deepcopy(grid)##pre_grid 和 grid两者独立pre_grid = grid ##两者不独立pre_grid = grid.copy() ##两者不独立# 使用.copy()方法对列表进行浅复制(shallow copy)时,这个方法只会创建列表# 本身的一个新的副本,但是不会对列表中的子列表(即列表中的列表)进行深度复制。# 这意味着,如果原始列表中包含了其他列表(如二维数组或矩阵),那么新列表和原# 始列表中的子列表仍然是相同的对象(即它们在内存中的地址是相同的)。# 因此,当您修改grid中的任何元素时,pre_color中相应的子列表元素也会被修改,# 因为它们实际上是指向同一块内存地址。</code></pre></div></figure><h3 id="一维数组"><a href="#一维数组" class="headerlink" title="一维数组"></a>一维数组</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">a_copy = a.copy()#两者独立 a_copy = a[:]#两者独立 使用切片a_copy = a#两者不独立#对于一维数组(列表),可以使用 .copy() 方法或切片操作 [:] 来创建一个浅复制。# 对于一维数组,这两种方法都能有效地复制数组,因为一维数组不包含嵌套的列表,# 所以“浅复制”已经足够用于创建一个完全独立的副本# 修改副本中的元素不会影响原始数组。</code></pre></div></figure><h2 id="可变对象"><a href="#可变对象" class="headerlink" title="可变对象"></a>可变对象</h2><ul><li>可变对象(如列表、字典、集合等)则表现出“按引用传递”的特性。</li><li>因为函数接收的参数是对象的引用,所以如果你在函数内部修改了一个可变对象(例如,添加、删除或者修改列表中的元素),</li><li>那么这些修改会反映到原始对象上,因为实际上你和函数内部操作的是同一个对象。</li></ul><h2 id="不可变对象"><a href="#不可变对象" class="headerlink" title="不可变对象"></a>不可变对象</h2><ul><li>不可变对象(如<strong>整数、浮点数、字符串、元组</strong>等)看起来像是“按值传递”,因为它们的值不能被修改。</li><li>如果你在函数内部试图改变一个不可变对象的值,实际上会创建一个新的对象,并将其绑定到函数内部的局部变量名上,而原始对象不会受到影响。</li></ul><h2 id="def-函数参数"><a href="#def-函数参数" class="headerlink" title="def 函数参数"></a>def 函数参数</h2><p>在Python中,所有的<strong><em>函数参数</em></strong>传递都可以视为“按对象引用传递”(pass by object reference)。这意味着函数内部接收到的是实际参数对象的引用,而不是对象的副本。这种传递方式的效果取决于对象本身是可变的(mutable)还是不可变的(immutable)。</p><h3 id="不可变"><a href="#不可变" class="headerlink" title="不可变"></a>不可变</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">area = 0def fun(area): area += 1fun(area)print(area) # 0#area 不可变 #函数fun中的area是一个局部变量,它仅在函数作用域内有效。尽管它与全局变量area同名,但它实际上是一个完全不同的变量。在fun函数内部修改area时,实际上是在修改这个局部变量,而不是全局变量area。因此,全局变量area的值不会因为调用fun函数而改变。</code></pre></div></figure><h3 id="Python中函数参数如何按引用传递(对于可变对象而言)"><a href="#Python中函数参数如何按引用传递(对于可变对象而言)" class="headerlink" title="Python中函数参数如何按引用传递(对于可变对象而言)"></a>Python中函数参数如何按引用传递(对于可变对象而言)</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">area[0] = 0def fun(area): area[0] += 1fun(area)print(area[0]) # 1</code></pre></div></figure><h3 id="不可变对象-global"><a href="#不可变对象-global" class="headerlink" title="不可变对象 + global"></a>不可变对象 + global</h3><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">area = 0def fun(): global area # 指明我们打算修改的是全局变量area area += 1fun()print(area) # 结果将是1,因为fun函数被调用,全局变量area被修改</code></pre></div></figure><h3 id="global"><a href="#global" class="headerlink" title="global"></a>global</h3><ul><li>使用<code>global</code>关键字在函数内部<strong>声明全局变量</strong>。</li><li>当在函数内部修改全局变量时,如果不使用<code>global</code>关键字,</li><li><code>Python</code>将会创建一个新的局部变量,而不是修改外部的全局变量。</li><li>通过使用<code>global</code>关键字,可以明确指示Python在函数内部对全局变量进行修改。<figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">x = 5def func(): global x # 指明我们要修改的是全局变量x x = 10func()print(x) # 输出将是10,因为全局变量x被修改了</code></pre></div></figure><h3 id="nonlocal"><a href="#nonlocal" class="headerlink" title="nonlocal"></a>nonlocal</h3></li><li><code>nonlocal</code>关键字用于在嵌套函数中声明非局部变量(即不属于这个函数,但也不是全局的变量)。</li><li>这通常用于在嵌套函数中修改封闭作用域(enclosing scope,即嵌套函数外部的另一个函数内部)的变量。</li></ul><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">def outer(): x = 5 def inner(): nonlocal x # 指明我们要修改的是封闭作用域中的变量x x = 10 inner() print(x) # 输出将是10,因为封闭作用域中的变量x被修改了outer()</code></pre></div></figure><h3 id="使用注意事项"><a href="#使用注意事项" class="headerlink" title="使用注意事项"></a>使用注意事项</h3><p><code>global</code>和<code>nonlocal</code>关键主要用于复杂的场景,比如需要在多层嵌套的函数中修改外部变量的值。然而,过度使用这些关键字可能会导致代码难以理解和维护,因此应该谨慎使用。<br>如果可以通过其他方式(如返回值、类属性等)来实现相同的功能,通常这些方式会更加清晰和优雅。</p><h2 id="嵌套函数"><a href="#嵌套函数" class="headerlink" title="嵌套函数"></a>嵌套函数</h2><p>在Python中,嵌套函数可以访问其外部函数(父函数)作用域内的所有变量,无论这些变量是可变的还是不可变的。这种特性是由于Python的作用域和闭包的概念所决定的。当你在一个函数内定义另一个函数时,内部的函数(嵌套函数)可以访问外部函数的局部变量。</p><h3 id="访问不可变变量"><a href="#访问不可变变量" class="headerlink" title="访问不可变变量"></a>访问不可变变量</h3><p>嵌套函数可以读取外部函数中定义的不可变变量(如整数、字符串、元组等),但不能直接修改它们。如果尝试修改,Python会在嵌套函数的局部作用域内创建一个同名的新变量,而不是修改外部函数的变量。这是因为不可变变量不能被更改,只能被替换。</p><p>示例:<br><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">Copy codedef outer(): x = 3 # 不可变变量 def inner(): print(x) # 可以访问外部函数的变量x inner()outer()</code></pre></div></figure></p><h3 id="修改可变变量"><a href="#修改可变变量" class="headerlink" title="修改可变变量"></a>修改可变变量</h3><p>对于可变变量(如列表、字典等),嵌套函数可以修改这些变量的内容,因为可变变量允许原地修改。</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">Copy codedef outer(): lst = [1, 2, 3] # 可变变量 def inner(): lst.append(4) # 修改外部函数的变量lst inner() print(lst)outer()</code></pre></div></figure><h3 id="使用nonlocal关键字"><a href="#使用nonlocal关键字" class="headerlink" title="使用nonlocal关键字"></a>使用nonlocal关键字</h3><p>如果需要在嵌套函数中修改外部函数的不可变变量,可以使用nonlocal关键字。这样做可以明确地告诉Python解释器你打算修改的是嵌套作用域中的变量,而不是创建一个新的局部变量。<br><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">pythonCopy codedef outer(): x = 3 def inner(): nonlocal x x = 5 # 修改的是外部函数的变量x inner() print(x) # 输出5outer()</code></pre></div></figure><br>在这个示例中,nonlocal关键字使得inner函数能够修改外部函数outer中定义的不可变变量x的值。<br>总结来说,嵌套函数能够访问父函数中定义的所有变量,无论它们是可变的还是不可变的。但要修改不可变变量,需要使用nonlocal关键字。</p><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>修改不可变复杂一点……<br>修改可变,不用加入函数参数直接改!<br><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">my_list = [1, 2, 3]def modify_list(): my_list.append(4)modify_list()print(my_list) # 输出 [1, 2, 3, 4]</code></pre></div></figure></p><h2 id="排序"><a href="#排序" class="headerlink" title="排序"></a>排序</h2><h3 id="lambda"><a href="#lambda" class="headerlink" title="lambda"></a><code>lambda</code></h3><p>在python种,<code>lambda</code>函数后面可以跟一个列表或任何其他类型的表达式。<code>lambda</code>函数是一个简单的匿名函数,可以接受任何任何数量的参数,但只有一个表达式,这个表达式的就算结果就是函数的返回值。<br>例如:</p><ul><li>排序字典的时候,lambda接受两个参数 <code>item = [k, v]</code>,然后返回一个参数<code>item[1]</code><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">sorted_dict_by_value = dict(sorted(my_dict.items(), key=lambda item: item[1]))</code></pre></div></figure></li><li>按值排序索引的时候,接受一个参数,返回一个列表里面两个参数<ul><li>这里的 lambda 函数对于每个元素 x(在这个上下文中,x 是 lst 中的一个元素,即一个索引)返回一个由两个元素组成的列表:nums[x] 和 x。</li><li>这个返回的列表用作排序的键:<ul><li>第一个元素 nums[x] 是主要的排序依据。</li><li>第二个元素 x 作为次要排序依据,确保在 nums[x] 相同的情况下,索引较小的元素排在前面。<figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">sort_lst = sorted(lst, key=lambda x: [nums[x], x])</code></pre></div></figure></li></ul></li></ul></li></ul><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">my_dict = {'b': 1, 'a': 2, 'c': 3}sorted_dict = dict(sorted(my_dict.items()))my_dict = {'b': 1, 'a': 2, 'c': 3}sorted_dict_by_value = dict(sorted(my_dict.items(), key=lambda item: item[1]))</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">#升序sorted_index = sorted(range(len(nums)), key = nums.__getitem__)#升序sorted_index = [i for i, _ in sorted(enumerate(nums), key=lambda x: x[1])]#升序nums_index = [[num, i] for i, num in enumerate(nums)]sorted_index = [i for num, i in sorted(nums_index, key = lambda x : x[0])]#根据列表nums中的值和索引对一个索引列表lst进行排序。#根据nums中的值降序排序,如果有值相同,则根据索引降序排序。n = len(nums)lst = list(range(n)) #创建一个从0到n-1的索引列表,这个列表将被排序。lst.sort(key=lambda x: [-nums[x], -x])#对lst进行就地排序(即排序后的结果直接修改lst)#对于lst中的每一个元素x(这里的x是一个索引),lambda函数返回一个由两部分组成的列表[-nums[x], -x]。#第一关键字 -nums[x]#第二关键字 -x#升序n = len(nums)lst = list(range(n))sort_lst = sorted(lst, key = lambda x: nums[x])#sorted() 函数返回一个新列表,这个列表是按照 key 参数指定的方法排序的 lst 的副本。sort_lst = sorted(lst, key = lambda x: [nums[x], x])</code></pre></div></figure><ul><li><code>sort_lst = sorted(lst, key=lambda x: nums[x]):</code><br>这个表达式根据 <code>nums</code> 中每个索引 x 对应的值对 <code>lst</code> 进行排序。如果 nums 中存在相同的值,那么它们对应的索引在 <code>sort_lst</code> 中的相对顺序将按照它们在原列表 <code>lst</code> 中的顺序,也就是说,排序是稳定的。</li><li><code>sort_lst = sorted(lst, key=lambda x: [nums[x], x]):</code><br>这个表达式在排序时考虑了两个因素:首先是 nums 中每个索引 x 对应的值,其次是索引 <code>x</code> 本身。这意味着,如果 <code>nums</code> 中有两个或多个相同的值,它们将进一步按照它们的索引进行排序。这种方法确保了即使在 <code>nums</code> 中的值相等时,排序结果也是确定的,因为索引值是唯一的。<h2 id="accumulate"><a href="#accumulate" class="headerlink" title="accumulate"></a>accumulate</h2>内置前缀和<figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">import itertools import operatordata = [1, 2, 3, 4, 5]# 计算前缀和print(list(itertools.accumulate(data)))print(list(accumulate(data)))# 计算到当前位置累积相乘得结果data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]print(list(itertools.accumulate(data, operator.mul, initial=2)))# 计算到当前位置的最大值并且输出print(list(itertools.accumulate(data, max)))</code></pre></div></figure><h2 id="enumerate"><a href="#enumerate" class="headerlink" title="enumerate"></a>enumerate</h2>在Python中,enumerate 是一个内置函数,用于将一个可迭代的(比如列表、元组、字符串等)组合成一个索引序列,通常用于在for循环中获取每个元素的索引和值。这样可以在遍历时同时获得每个元素的索引位置和对应的值<figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">for index, value in enumerate(iterable, start=0): print(index, value)#这里的 iterable 是你想要遍历的可迭代对象,start 是一个可选参数,表示索引的起始值,默认为0。# 下面是一个具体的例子:my_list = ['apple', 'banana', 'cherry']# 使用enumerate遍历列表for index, value in enumerate(my_list): print(f"Index: {index}, Value: {value}")Index: 0, Value: appleIndex: 1, Value: bananaIndex: 2, Value: cherry</code></pre></div></figure>使用 enumerate 可以使代码更加清晰和简洁,特别是当你需要索引和值时。</li></ul><h3 id="图论"><a href="#图论" class="headerlink" title="图论"></a>图论</h3><h4 id="邻接表"><a href="#邻接表" class="headerlink" title="邻接表"></a>邻接表</h4><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">g = defaultdict(list)while x, y in deges: g[x].append(y) g[y].adppen(x)while x, y, d in deges(): g[x].append((y, d)) g[y].append((x, d))</code></pre></div></figure><h4 id="并查集"><a href="#并查集" class="headerlink" title="并查集"></a>并查集</h4><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python"># 数组p = list(range(n))def find(x): if x != p[x]: p[x] = find(p[x]) return p[x]def merge(x, y): px = find(x) py = find(y) if px != py: p[px] = p[py]# 增加联通分量的大小,联通分量的数量p = list(range(n)) # 父节点数组size = [1] * n # 连通分量大小数组,初始时每个连通分量大小为1num_components = n # 初始时每个节点自成一个连通分量,所以总数为ndef find(x): if x != p[x]: p[x] = find(p[x]) # 路径压缩 return p[x]def merge(x, y): px = find(x) py = find(y) if px != py: # 只有当两个节点属于不同的连通分量时,才进行合并 global num_components if size[px] < size[py]: # 将较小的连通分量合并到较大的连通分量 p[px] = py # 更新父节点 size[py] += size[px] # 更新连通分量的大小 else: p[py] = px size[px] += size[py] num_components -= 1 # 减少连通分量的总数</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">class UnionFind: def __init__(self, n): self.root = [i for i in range(n)] self.size = [1]*n self.part = n def find(self, x): if x != self.root[x]: # 在查询的时候合并到顺带直接根节点 root_x = self.find(self.root[x]) self.root[x] = root_x return root_x return x def union(self, x, y): root_x = self.find(x) root_y = self.find(y) if root_x == root_y: return if self.size[root_x] >= self.size[root_y]: root_x, root_y = root_y, root_x self.root[root_x] = root_y self.size[root_y] += self.size[root_x] # 将非根节点的秩赋0 self.size[root_x] = 0 self.part -= 1 return def is_connected(self, x, y): return self.find(x) == self.find(y) def get_root_part(self): # 获取每个根节点对应的组 part = defaultdict(list) n = len(self.root) for i in range(n): part[self.find(i)].append(i) return part def get_root_size(self): # 获取每个根节点对应的组大小 size = defaultdict(int) n = len(self.root) for i in range(n): size[self.find(i)] = self.size[self.find(i)] return size</code></pre></div></figure><h2 id="数论"><a href="#数论" class="headerlink" title="数论"></a>数论</h2><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">def quick_pow(a, b, mod):#快速幂 res = 1 while b: if b & 1: res = res * a % mod a = a * a % mod b >>= 1 return resdef inverse(a, mod): #求逆元 return quick_pow(a, mod - 2, mod)</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">def gcd(a, b): return a if b == 0 else gcd(b, a % b)</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">def sieve(n): primes = [] st = [0] * (n + 1) for i in range(2, n + 1): if not st[i]: primes.append(i) for j in range(i * i, n + 1, i): st[j] = 1 return primes</code></pre></div></figure><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">def is_prime(n): if n < 2: return False i = 2 while i <=n // i: if n % i == 0: return False i += 1 return True</code></pre></div></figure><p>用Python编码更简单:</p><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">n = int(input()) s = 1 ans = 0for i in range(1,n+1,1): s *= i ans += s print(ans)</code></pre></div></figure><h2 id="C-2-构造随机数和随机字符串"><a href="#C-2-构造随机数和随机字符串" class="headerlink" title="C.2 构造随机数和随机字符串"></a>C.2 构造随机数和随机字符串</h2><p>用Python构造测试数据,比c++简单得多。它能直接产生极大的数字,方便地产生随机字符等。下<br>(1)导入库</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">import random</code></pre></div></figure><p>可以写成:</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">from random import *</code></pre></div></figure><p>此时后面的代码能够简单一点,例如把<code>random.randint</code>直接写为<code>randint</code><br>(2)在指定范围内生成一个很大的随机整数:</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">print (random.randint(-9999999999999999,9999999999999999))</code></pre></div></figure><p>输出示例:428893995939258<br>(3)在指定范围内(0到100000)生成一个随机偶数:</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">print (random.randrange(0, 100001, 2))</code></pre></div></figure><p>输出示例:14908<br>(4)生成一个0到1之间的随机浮点数:</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">print (random.random())</code></pre></div></figure><p>输出示例:0.2856636141181378<br>(5)在指定范围内(1到20)生成一个随机浮点数:</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">print (random.uniform(1, 20))</code></pre></div></figure><p>输出示例:9.81984258258233<br>(6)在指定字符中生成一个随机字符:</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">print (random.choice('abcdefghijklmnopqrst@#$%^&*()'))</code></pre></div></figure><p>输出示例:d<br>(7)在指定字符中生成指定数量的随机字符:</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">print (random.sample('zyxwvutsrqponmlkjihgfedcba',5))</code></pre></div></figure><p>输出示例:[‘z’, ‘u’, ‘x’, ‘w’, ‘j’]<br>(8)导入库</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">import string</code></pre></div></figure><p>若写成<code>from string import *</code>,下面的<code>string.ascii_letters</code>改为<code>ascii_letters</code><br>(9)用a-z、A-Z、0-9生成指定数量的随机字符串:</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))print (ran_str)</code></pre></div></figure><p>输出示例:iCTm6yxN<br>(10)从多个字符中选取指定数量的字符组成新字符串:</p><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">print (''.join(random.sample(['m','l','k','j','i','h','g','d'], 5)))</code></pre></div></figure><p>输出示例:mjlhd<br>(11)打乱数组的顺序:</p><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] random.shuffle(items)for i in range(0,len(items),1): #逐个打印 print (items[i]," ",end='')</code></pre></div></figure><p>输出示例:1 0 8 3 5 7 9 4 6 2</p><h2 id="对拍"><a href="#对拍" class="headerlink" title="对拍"></a>对拍</h2><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">import osfrom random import randint, uniformimport subprocessT = 10 # 样例组数# 生成随机数据的函数def generate_date(): A = [0] * 1010 for t in range(1, T + 1): # 数据的文件名 filename = f"in_{t}.txt" with open(filename, "w") as file: n = randint(1, 1000) k = randint(1, n) file.write(str(n)+ " " + str(k) + "\n") for i in range(n): A[i] = randint(0, 100) nums = " ".join(map(str, A[:n])) file.write(nums + "\n") print(f'generate_ok:......{T}')# 调用py程序函数def run(process_name): for t in range(1, T + 1): # 文件名 out_filename = f"{process_name}_out_{t}.txt" in_filename = f"in_{t}.txt" subprocess.run(['python', f'{process_name}.py'], stdin = open(in_filename, "r"), stdout = open(out_filename, "w")) print(f'run_{process_name}_ok:......{T}')# 对比txt文件是否相同的函数def diff(file1, file2): for t in range(1, T + 1): f1 = f"{file1}_out_{t}.txt" f2 = f"{file2}_out_{t}.txt" with open(f1, "r") as s, open(f2, "r") as ss: lines1 = s.readlines() lines2 = ss.readlines() if len(lines1) != len(lines2): print(f'{t}:lines error') continue ok = 1 for line1,line2 in zip(lines1, lines2): if line1 != line2: print(f'{t}:exist error') ok = 0 break if ok: print(f'{t}:ok')if __name__ == "__main__": # 生成输入文件 generate_date() # 调用正解 file_true = "True" run(file_true) # 调用测试程序 file_my = "A" run(file_my) # 调用对比程序 diff(file_true, file_my)</code></pre></div></figure>]]></content>
<tags>
<tag> python </tag>
</tags>
</entry>
<entry>
<title>hexo</title>
<link href="/post/ab21860c.html"/>
<url>/post/ab21860c.html</url>
<content type="html"><![CDATA[<h1 id="发表文章"><a href="#发表文章" class="headerlink" title="发表文章"></a>发表文章</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">hexo new "name"</code></pre></div></figure><p>这篇文章会出现在/source/_post/</p><h1 id="发表page"><a href="#发表page" class="headerlink" title="发表page"></a>发表page</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">hexo page "name"</code></pre></div></figure><h1 id="修改完毕之后在本地查看效果"><a href="#修改完毕之后在本地查看效果" class="headerlink" title="修改完毕之后在本地查看效果"></a>修改完毕之后在本地查看效果</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">hexo cleanhexo generatehexo cl && hexo ghexo serve</code></pre></div></figure><h1 id="上传"><a href="#上传" class="headerlink" title="上传"></a>上传</h1><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">hexo d </code></pre></div></figure><p>需要输入ssh密码</p><h2 id="美化"><a href="#美化" class="headerlink" title="美化"></a>美化</h2><h3 id="彩色标签云"><a href="#彩色标签云" class="headerlink" title="彩色标签云"></a>彩色标签云</h3><p>在<code>config.yal</code>中将<code>aside</code>中的<code>card_tags</code>的<code>enable</code>设置为<code>true</code>即可</p><h3 id="用giscus实现评论"><a href="#用giscus实现评论" class="headerlink" title="用giscus实现评论"></a>用<code>giscus</code>实现评论</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">待整理</code></pre></div></figure><h3 id="实现鼠标彩色"><a href="#实现鼠标彩色" class="headerlink" title="实现鼠标彩色"></a>实现鼠标彩色</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">待整理</code></pre></div></figure><h3 id="社交信息"><a href="#社交信息" class="headerlink" title="社交信息"></a>社交信息</h3><figure><div class="code-wrapper"><pre class="line-numbers language-yaml" data-language="yaml"><code class="language-yaml">social: fab fa-github: "填入github主页"|| Github || '#24292e' fas fa-envelope: mailto:"邮箱" || Email || '#4a7dbe' fab fa-qq: fab fa-qq: tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin="QQ号👌"&website=www.oicqzone.com || QQ || '#qq-color-code'</code></pre></div></figure><h3 id="背景图片and渐变"><a href="#背景图片and渐变" class="headerlink" title="背景图片and渐变"></a>背景图片and渐变</h3><p><strong>⚠️:先在<code>config.butterfly.yaml</code>中将<code>backgroud</code>设一个图片 <code>url()</code><br>网上都没有这一步<br>但我试了好多次,只加个<code>css</code>不出现图片,不知道为什么</strong><br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">background: url(https://picx.zhimg.com/80/v2-7ee6f104979814d2bf420461e3872475_1440w.webp?source=1def8aca)写css然后inject</code></pre></div></figure></p><h3 id="代码高亮"><a href="#代码高亮" class="headerlink" title="代码高亮"></a>代码高亮</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">写css然后inject</code></pre></div></figure><h2 id="目前还不会的"><a href="#目前还不会的" class="headerlink" title="目前还不会的"></a>目前还不会的</h2><h3 id="2024-1-11"><a href="#2024-1-11" class="headerlink" title="2024.1.11"></a>2024.1.11</h3><ul><li>[ ] <code>giscus</code>不会将评论顺序默认改成最新的</li><li>[ ] 最新留言or评论不会弄到右边</li><li>[x] 将评论在某些page不显示</li><li>[x] 文章背景虚化 2024.1.22完成<h3 id="待做"><a href="#待做" class="headerlink" title="待做"></a>待做</h3></li><li>[ ] <code>about</code>完善</li></ul><h3 id="图床"><a href="#图床" class="headerlink" title="图床"></a>图床</h3><h4 id="用picgo-app:"><a href="#用picgo-app:" class="headerlink" title="用picgo app:"></a>用<code>picgo</code> app:</h4><p><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240301205606.png" alt=""><br>从粘贴板上传图片快捷键:<code>ctrl+shift+p</code></p><h4 id="用vscode-markdowm-picgo-插件"><a href="#用vscode-markdowm-picgo-插件" class="headerlink" title="用vscode + markdowm + picgo(插件)"></a>用vscode + markdowm + picgo(插件)</h4><p><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240123001458.png" alt="20240123001458"><br><code>cdn</code>加速<br><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240123001522.png" alt="20240123001522"><br>从粘贴板上传图片快捷键:<code>artl+shift+u</code></p><h4 id="Typora"><a href="#Typora" class="headerlink" title="Typora"></a><code>Typora</code></h4><p>文件->偏好设置->图像</p><p><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240301205545.png" alt=""></p><p><img src="https://cdn.jsdelivr.net/gh/wawzysys/imgbed@main/20240301205518.png" alt=""></p><p>点击<strong>验证图片上传选项</strong>查看是否配置好</p><h3 id="git-子仓库:"><a href="#git-子仓库:" class="headerlink" title="git 子仓库:"></a>git 子仓库:</h3><figure><div class="code-wrapper"><pre class="line-numbers language-git" data-language="git"><code class="language-git">cd themes/butterflygit add .git commit -m "update"cd ../../git add themes/butterflygit commit -m "update"git push origin hexo</code></pre></div></figure><h3 id="将ssh代理改为https"><a href="#将ssh代理改为https" class="headerlink" title="将ssh代理改为https"></a>将ssh代理改为https</h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">temp</code></pre></div></figure><h3 id="可以单独将public上传到github仓库,不用hexo-d"><a href="#可以单独将public上传到github仓库,不用hexo-d" class="headerlink" title="可以单独将public上传到github仓库,不用hexo d"></a>可以单独将public上传到github仓库,不用<code>hexo d</code></h3><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">temp</code></pre></div></figure><h3 id="副标题"><a href="#副标题" class="headerlink" title="副标题"></a>副标题</h3><p>在’_config.yaml’里面更改</p><figure><div class="code-wrapper"><pre class="line-numbers language-yaml" data-language="yaml"><code class="language-yaml">title: asdaso的blogsubtitle: enable: true sub: - 何其荣幸 何德何能 - 所有的不平凡都来自平凡description: 'cs'keywords:author: asdasolanguage: zh-CNtimezone: ''</code></pre></div></figure><h3 id="封面不显示正文"><a href="#封面不显示正文" class="headerlink" title="封面不显示正文"></a>封面不显示正文</h3><p><code>method</code>选择1表示显示介绍</p><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">index_post_content: method: 1 #description length: 500 # if you set method to 2 or 3, the length need to config</code></pre></div></figure>]]></content>
<tags>
<tag> hexo </tag>
</tags>
</entry>
<entry>
<title>第一个博客</title>
<link href="/post/61585.html"/>
<url>/post/61585.html</url>
<content type="html"><![CDATA[<h2 id="VSC换python内核"><a href="#VSC换python内核" class="headerlink" title="VSC换python内核"></a>VSC换python内核</h2><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none">ctrl + shift + pSelect Interpreter</code></pre></div></figure><h2 id="将mackdown转化为别的格式"><a href="#将mackdown转化为别的格式" class="headerlink" title="将mackdown转化为别的格式"></a>将mackdown转化为别的格式</h2><figure><div class="code-wrapper"><pre class="line-numbers language-python" data-language="python"><code class="language-python">下载markdown pdf 插件ctrl + shife + p 输入 markdown pdf</code></pre></div></figure><h2 id="解决markdown-pdf-不能输出latex公式问题"><a href="#解决markdown-pdf-不能输出latex公式问题" class="headerlink" title="解决markdown pdf 不能输出latex公式问题"></a>解决markdown pdf 不能输出latex公式问题</h2><p>在下面路径打开<br><figure><div class="code-wrapper"><pre class="line-numbers language-markup" data-language="markup"><code class="language-markup">C://Users/<username>/.vscode/extensions/yzane.markdown-pdf-1.4.1/template/template.html</code></pre></div></figure><br>在最后的body和html之间输入<br><figure><div class="code-wrapper"><pre class="line-numbers language-none"><code class="language-none"><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script type="text/x-mathjax-config"> MathJax.Hub.Config({ tex2jax: {inlineMath: [['$', '$']]}, messageStyle: "none" });</script></code></pre></div></figure><br>参考:<br><a href="https://blog.csdn.net/qq_18506419/article/details/103461825">VScode中Markdown PDF无法正确输出包含公式的pdf解决方案</a></p><h3 id="常用cmd命令"><a href="#常用cmd命令" class="headerlink" title="常用cmd命令"></a>常用cmd命令</h3><h4 id="删除-exe"><a href="#删除-exe" class="headerlink" title="删除.exe"></a>删除.exe</h4><figure><div class="code-wrapper"><pre class="line-numbers language-cmd" data-language="cmd"><code class="language-cmd">在文件下的cmd输入:for /r %i in (*.exe) do del /q %i</code></pre></div></figure><p>~~~</p>]]></content>
<tags>
<tag> 编程 </tag>
<tag> 计算机科学 </tag>
<tag> 技术 </tag>
<tag> VSCODE </tag>
</tags>
</entry>
</search>