-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
325 lines (283 loc) · 31.9 KB
/
index.html
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
<!DOCTYPE html><html lang="en" data-theme="dark"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>TnTeQAQ的blog</title><meta name="author" content="TnTeQAQ"><meta name="copyright" content="TnTeQAQ"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#0d0d0d"><meta property="og:type" content="website">
<meta property="og:title" content="TnTeQAQ的blog">
<meta property="og:url" content="https://tnteqaq.github.io/index.html">
<meta property="og:site_name" content="TnTeQAQ的blog">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="https://tnteqaq.github.io/img/megumin.jpg">
<meta property="article:author" content="TnTeQAQ">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://tnteqaq.github.io/img/megumin.jpg"><link rel="shortcut icon" href="/img/favicon.png"><link rel="canonical" href="https://tnteqaq.github.io/index.html"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: undefined,
translate: undefined,
noticeOutdate: undefined,
highlight: {"plugin":"highlight.js","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
copy: {
success: 'Copy Successful',
error: 'Copy Error',
noSupport: 'Browser Not Supported'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '',
dateSuffix: {
just: 'Just now',
min: 'minutes ago',
hour: 'hours ago',
day: 'days ago',
month: 'months ago'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: undefined,
infinitegrid: {
js: 'https://cdn.jsdelivr.net/npm/@egjs/infinitegrid/dist/infinitegrid.min.js',
buttonText: 'Load More'
},
isPhotoFigcaption: false,
islazyload: false,
isAnchor: false,
percent: {
toc: true,
rightside: false,
},
autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: 'TnTeQAQ的blog',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2024-08-08 17:56:31'
}</script><script>(win=>{
win.saveToLocal = {
set: (key, value, ttl) => {
if (ttl === 0) return
const now = Date.now()
const expiry = now + ttl * 86400000
const item = {
value,
expiry
}
localStorage.setItem(key, JSON.stringify(item))
},
get: key => {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = Date.now()
if (now > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = (url, attr = {}) => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
script.onerror = reject
script.onload = script.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
script.onload = script.onreadystatechange = null
resolve()
}
Object.keys(attr).forEach(key => {
script.setAttribute(key, attr[key])
})
document.head.appendChild(script)
})
win.getCSS = (url, id = false) => new Promise((resolve, reject) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = url
if (id) link.id = id
link.onerror = reject
link.onload = link.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
link.onload = link.onreadystatechange = null
resolve()
}
document.head.appendChild(link)
})
win.activateDarkMode = () => {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
win.activateLightMode = () => {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
const t = saveToLocal.get('theme')
if (t === 'dark') activateDarkMode()
else if (t === 'light') activateLightMode()
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
if (asideStatus === 'hide') {
document.documentElement.classList.add('hide-aside')
} else {
document.documentElement.classList.remove('hide-aside')
}
}
const detectApple = () => {
if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
document.documentElement.classList.add('apple')
}
}
detectApple()
})(window)</script><!-- hexo injector head_end start -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css">
<!-- hexo injector head_end end --><meta name="generator" content="Hexo 6.3.0"></head><body><div id="web_bg"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/megumin.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">Articles</div><div class="length-num">26</div></a><a href="/tags/"><div class="headline">Tags</div><div class="length-num">42</div></a><a href="/categories/"><div class="headline">Categories</div><div class="length-num">3</div></a></div><hr class="custom-hr"/></div></div><div class="page" id="body-wrap"><header class="full_page fixed" id="page-header" style="background-image: url('/img/kmnz/kmnz1.jpg')"><nav id="nav"><span id="blog-info"><a href="/" title="TnTeQAQ的blog"><span class="site-name">TnTeQAQ的blog</span></a></span><div id="menus"><div id="toggle-menu"><a class="site-page" href="javascript:void(0);"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">TnTeQAQ的blog</h1><div id="site-subtitle"><span id="subtitle"></span></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/07/15/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E7%AC%94%E8%AE%B0/" title="渗透测试笔记">渗透测试笔记</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2024-07-15T02:00:00.000Z" title="Created 2024-07-15 10:00:00">2024-07-15</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%AE%9E%E4%B9%A0/">实习</a></span></div><div class="content">报告小抄。
渗透测试笔记代码漏洞XSS存储型XSS技巧
PDF解析导致XSS攻击。
漏洞描述
利用跨站脚本漏洞欺骗用户,收集Cookie等相关数据并冒充其他用户。通过精心构造的恶意代码,可以让访问者访问非法网站或下载恶意木马。
网站在解析PDF时未进行安全检测,容易引起跨站脚本攻击的风险。
修复建议
在服务器端对传入的参数进行验证,过滤包含HTML的特殊字符。
对传入数据中的HTML特殊字符进行转义处理。
排查涉及PDF解析的所有功能,对PDF中的js脚本进行安全检测。
限制PDF执行js脚本。
反射型XSS技巧暂无
漏洞描述
利用跨站脚本漏洞欺骗用户,收集Cookie等相关数据并冒充其他用户。通过精心构造的恶意代码,可以让访问者访问非法网站或下载恶意木马。
修复建议
在服务器端对传入的参数进行验证,过滤包含HTML的特殊字符
对传入数据中的HTML特殊字符进行转义处理
文件上传任意文件上传技巧暂无
漏洞描述
在上传文件时,存在任意文件上传。
头像上传功能仅支持上传和检验jpg、png等图片格式,但是仅在前端进行了校验,通过抓包修改的方式可上传php、jsp、asp、txt等 ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/07/06/EVM%E6%8C%87%E4%BB%A4%E9%9B%86/" title="EVM指令集">EVM指令集</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2024-07-06T07:31:43.000Z" title="Created 2024-07-06 15:31:43">2024-07-06</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%AD%A6%E4%B9%A0%E4%B8%AD/">学习中</a></span></div><div class="content">摘自《精通以太坊》
算术操作算术操作码指令:
123456789101112ADD //Add the top two stack itemsMUL //Multiply the top two stack itemsSUB //Subtract the top two stack itemsDIV //Integer divisionSDIV //Signed integer divisionMOD //Modulo (remainder) operationSMOD //Signed modulo operationADDMOD //Addition modulo any numberMULMOD //Multiplication modulo any numberEXP //Exponential operationSIGNEXTEND //Extend the length of a two's complement signed intege ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/05/22/nat%E7%B1%BB%E5%9E%8B/" title="nat类型">nat类型</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2024-05-22T07:02:11.000Z" title="Created 2024-05-22 15:02:11">2024-05-22</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%87%E5%BF%98%E5%BD%95/">备忘录</a></span></div><div class="content">NAT类型网络地址转换器(NAT)NAT不止检查进入数据包的头部,而且对其进行修改,从而实现同一内网中不同主机共用更少的公网IP(通常是一个)。
基本NAT(Basic NAT)基本NAT会将内网主机的IP地址映射为一个公网IP,不改变其TCP/UDP端口号。基本NAT通常只有在当NAT有公网IP池的时候才有用。
网络地址-端口转换器(NAPT)到目前为止最常见的即为NAPT,其检测并修改出入数据包的IP地址和端口号,从而允许多个内网主机同时共享一个公网IP地址。
锥形NAT(Cone NAT)在建立了一对(公网IP,公网端口)和(内网IP,内网端口)二元组的绑定之后,Cone NAT会重用这组绑定用于接下来该应用程序的所有会话(同一内网IP和端口),只要还有一个会话还是激活的。
例如,假设客户端A建立了两个连续的对外会话,从相同的内部端点(10.0.0.1:1234)到两个不同的外部服务端S1和S2。Cone NAT只为两个会话映射了一个公网端点(155.99.25.11:62000), 确保客户端端口的“身份”在地址转换的时候保持不变。由于基本NAT和防火墙都不改变数据包的端口号 ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/05/20/%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB/" title="网安面试问题汇总">网安面试问题汇总</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2024-05-20T14:31:07.000Z" title="Created 2024-05-20 22:31:07">2024-05-20</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%87%E5%BF%98%E5%BD%95/">备忘录</a></span></div><div class="content">网安面试问题汇总SQL注入方式有哪些1.按照注入方式分类
联合查询注入可以明确判断回显位置的情况下使用
报错注入无回显位置,可以有报错输出的情况可以使用
布尔盲注关闭错误回显和数据回显,但是页面会根据我们的输入对错变化。可以使用。
时间盲注无任何形式的回显,但是仅仅对睡眠函数有响应,可以使用时间盲注。
堆叠注入堆叠注入在mysql上不常见,必须要用到mysqli_multi_query()或者PDO,可以用分号分割来执行多个语句,相当于可直连数据库。Mssql则较常见堆叠注入。
2.根据注入点分类
数字型注入
字符型注入
搜索型注入
在Mysql5.0以上和Mysql5.0以下的版本中最大的区别是什么?
在Mysql5.0以上的版本中加入了一个information_schema这个系统表,这个系统表中包含了该数据库的所有数据库名、表名、列表,可以通过SQL注入来拿到用户的账号和口令,而Mysql5.0以下的只能暴力跑表名
5.0 以下是多用户单操作,5.0 以上是多用户多操作。
sql注入常见函数有哪些1.数据库基本函数
1234567891011121314151617# ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/03/09/%E5%8C%BA%E5%9D%97%E9%93%BE%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0Day8/" title="区块链学习笔记Day8:智能合约安全">区块链学习笔记Day8:智能合约安全</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2024-03-09T07:36:42.000Z" title="Created 2024-03-09 15:36:42">2024-03-09</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%AD%A6%E4%B9%A0%E4%B8%AD/">学习中</a></span></div><div class="content">学区块链做的笔记Day8,大部分内容来自《精通以太坊》。
智能合约安全重入攻击这里这个重入攻击先是,在网上看了很久,根本没看懂,后面才看的书,发现书里其实写的很明白。
这里我把书上的代码简化了一下(毕竟只是做演示)。
合约代码编译器版本:0.4.22。
钱包.sol:
1234567891011121314contract EtherStore { // 创建{账户: 余额}表 mapping (address => uint256) public balances; // 用于接收传入的ETH,然后更新余额 function depositFunds() public payable { balances[msg.sender] += msg.value; } // 验证并转出余额,然后更新余额 function withdrawFunds (uint256 _weiToWithdraw) public { require(balances[msg.sender] ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/03/06/%E5%9C%A8%E7%BA%BF%E8%AE%BF%E9%97%AEjupyter%E6%9C%8D%E5%8A%A1%E5%B9%B6%E6%B7%BB%E5%8A%A0%E5%9F%9F%E5%90%8D/" title="在线访问jupyter服务并添加域名">在线访问jupyter服务并添加域名</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2024-03-05T16:07:31.180Z" title="Created 2024-03-06 00:07:31">2024-03-06</time></span></div><div class="content">之前有写过一篇如何在服务器搭建jupyter的文章,但是当时什么都不懂,有很多地方就是脱裤子放屁了,而且当时只能通过ip+端口的方式进行访问,并不能通过域名访问,这次主要就是想通过域名来访问jupyter服务。
访问jupyter的时候发现现在新出了个jupyter lab感觉比原来的好用,而且包含了notebook原来的功能,所以现在就搭建这个。(其实就是把jupyter notebook改成了jupyter lab)
准备
有nginx的服务器一台
域名
开始搭建1.安装略
2.生成配置文件1jupyter notebook --generate-config
这不可以看到生成的配置文件的地址,一般是在~/.jupyter/jupyter_notebook_config.py里。
3.编辑配置文件设置
12c.ServerApp.allow_origin = '*'c.ServerApp.allow_remote_access = True
4.创建systemd任务1vim /etc/systemd/system/jupyter.service
向里面写入 ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/03/02/linux%E5%91%BD%E4%BB%A4%E7%AC%94%E8%AE%B0/" title="linux命令笔记">linux命令笔记</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2024-03-02T09:53:48.000Z" title="Created 2024-03-02 17:53:48">2024-03-02</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%87%E5%BF%98%E5%BD%95/">备忘录</a></span></div><div class="content">linux常用命令汇总查看系统基本信息123uname -acat /etc/issuecat /etc/*-release
网络代理123export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890 #设置代理地址export -p #查看代理信息unset http_proxy https_proxy all_proxy #关闭代理
端口占用及进程12netstat -ntlp #查看端口占用情况,已经占用端口的PID和程序名ps -ef #查看进程及运行进程的用户
查看日志1journalctl -u xxx.service -f #实时查看某服务的日志
</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/02/27/gemini%E6%9C%AC%E5%9C%B0%E8%B0%83%E7%94%A8%E6%97%B6429%E9%94%99%E8%AF%AF/" title="gemini本地调用时429错误">gemini本地调用时429错误</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2024-02-27T03:15:15.000Z" title="Created 2024-02-27 11:15:15">2024-02-27</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%87%E5%BF%98%E5%BD%95/">备忘录</a></span></div><div class="content">问题描述最近跑前段时间写的一个调用gemini的项目,发现一直报错。报错提示如下:
1234567891011121314151617181920212223242526272829303132333435Traceback (most recent call last): File "D:\anaconda3\lib\site-packages\google\api_core\grpc_helpers.py", line 79, in error_remapped_callable return callable_(*args, **kwargs) File "D:\anaconda3\lib\site-packages\grpc\_channel.py", line 1160, in __call__ return _end_unary_response_blocking(state, call, False, None) File "D:\anaconda3\lib\site-packages\grpc\_cha ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/02/24/%E8%AE%B0%E4%B8%80%E6%AC%A1%E5%A4%B1%E8%B4%A5%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%88%A0%E9%99%A4%E7%BB%8F%E5%8E%86/" title="记一次失败的软件删除经历">记一次失败的软件删除经历</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2024-02-23T21:01:40.000Z" title="Created 2024-02-24 05:01:40">2024-02-24</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%87%E5%BF%98%E5%BD%95/">备忘录</a></span></div><div class="content">记一次失败的软件删除经历起因之前有到CTF题有用到PGP,当时下了之后一直都删不掉,突然这天晚上抽风想去把它删干净但是失败了。
下面是原本想写的文章内容。
问题描述PGP已经删除后还是有PGP Viewer。
桌面上每次重启都会有PGP的图标,删除不了,改注册表可以删一次,但是下一次又会回来。
解决方法网上PGP相关文件的位置在:
C:\Program Files\PGP Corporation 有文件
C:\ProgramData\PGP Corporation 无文件
C:\Users\win10\AppData\Roaming\PGP Corporation 有文件
C:\Users\win10\Documents\PGP Corporation 无文件但是有↓
C:\Users\win10\Documents\PGP
如何把pgp软件卸载干净 - CSDN文库
尝试删除,但均提示文件被占用。
启动任务管理器,发现有两个程序正在运行,结束任务。
除C:\Program Files\PGP Corporation外 ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2024/02/17/%E7%94%A8%E6%88%B7%E4%B8%AD%E5%BF%83%E9%A1%B9%E7%9B%AE%E5%AE%9E%E8%B7%B5%E7%AC%94%E8%AE%B0/" title="用户中心项目实践笔记">用户中心项目实践笔记</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">Created</span><time datetime="2024-02-16T17:22:06.000Z" title="Created 2024-02-17 01:22:06">2024-02-17</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%AD%A6%E4%B9%A0%E4%B8%AD/">学习中</a></span></div><div class="content">项目实践笔记。
项目来自编程导航知识星球 | 鱼皮的编程宝典 (codefather.cn)
注意事项一定要提前检查node,npm等的版本和源,不然可能会出现很多问题。
如果视频教程里和文档里写的不一样,请以文档里的为标准,不要抄视频里的代码。
二八定律:在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%的尽管是多数,却是次要的。
企业做项目流程
需求分析。
设计(概要设计、详细设计)。
技术选型。
初始化 / 引入需要的技术。
写 Demo。
写代码(实现业务逻辑)。
先做设计
代码实现
持续优化
测试(单元测试)。
代码提交 / 代码评审。
部署。
发布。
初始化项目
官方模板。
Github代码。
IDEA等工具生成。
项目模板瘦身
移除国际化。
移除测试用代码。
规整项目目录:
删除不必要的目录,如 前后端分离项目,后端删除static等前端的文件。
新建目录,如model,utils,service等。
数据库设计
不一定要在刚开始的时候就把所有字段都想好,可以后续补充,盲目添加字段容易过度设计。
常用字段
create_time 创建时间 ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/#content-inner">2</a><a class="page-number" href="/page/3/#content-inner">3</a><a class="extend next" rel="next" href="/page/2/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/megumin.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">TnTeQAQ</div><div class="author-info__description"></div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">Articles</div><div class="length-num">26</div></a><a href="/tags/"><div class="headline">Tags</div><div class="length-num">42</div></a><a href="/categories/"><div class="headline">Categories</div><div class="length-num">3</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/TnTeQAQ"><i class="fab fa-github"></i><span>Follow Me</span></a></div><div class="sticky_layout"><div class="card-widget card-categories"><div class="item-headline">
<i class="fas fa-folder-open"></i>
<span>Categories</span>
</div>
<ul class="card-category-list" id="aside-cat-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E5%A4%87%E5%BF%98%E5%BD%95/"><span class="card-category-list-name">备忘录</span><span class="card-category-list-count">10</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E5%AD%A6%E4%B9%A0%E4%B8%AD/"><span class="card-category-list-name">学习中</span><span class="card-category-list-count">14</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E5%AE%9E%E4%B9%A0/"><span class="card-category-list-name">实习</span><span class="card-category-list-count">1</span></a></li>
</ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>Tags</span></div><div class="card-tag-cloud"><a href="/tags/django/" style="font-size: 1.1em; color: #999">django</a> <a href="/tags/%E5%8E%9F%E7%A5%9E/" style="font-size: 1.1em; color: #999">原神</a> <a href="/tags/%E5%90%88%E7%BA%A6%E6%97%A5%E5%BF%97/" style="font-size: 1.1em; color: #999">合约日志</a> <a href="/tags/Kubernetes/" style="font-size: 1.1em; color: #999">Kubernetes</a> <a href="/tags/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/" style="font-size: 1.1em; color: #999">数据分析</a> <a href="/tags/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E8%B7%B5/" style="font-size: 1.1em; color: #999">项目实践</a> <a href="/tags/Java/" style="font-size: 1.1em; color: #999">Java</a> <a href="/tags/MyBatis/" style="font-size: 1.1em; color: #999">MyBatis</a> <a href="/tags/%E6%95%B0%E6%A8%A1/" style="font-size: 1.1em; color: #999">数模</a> <a href="/tags/%E6%8A%A5%E9%94%99/" style="font-size: 1.1em; color: #999">报错</a> <a href="/tags/%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84/" style="font-size: 1.1em; color: #999">软件架构</a> <a href="/tags/%E4%BB%A5%E5%A4%AA%E5%9D%8A/" style="font-size: 1.5em; color: #99a9bf">以太坊</a> <a href="/tags/%E8%B7%A8%E5%9F%9F/" style="font-size: 1.18em; color: #999ca1">跨域</a> <a href="/tags/Nginx/" style="font-size: 1.1em; color: #999">Nginx</a> <a href="/tags/%E8%AF%B7%E6%B1%82%E5%B0%81%E8%A3%85/" style="font-size: 1.1em; color: #999">请求封装</a> <a href="/tags/%E5%B0%8F%E5%AF%84%E5%B7%A7/" style="font-size: 1.34em; color: #99a3b0">小寄巧</a> <a href="/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/" style="font-size: 1.1em; color: #999">计算机网络</a> <a href="/tags/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6/" style="font-size: 1.42em; color: #99a6b7">智能合约</a> <a href="/tags/Web%E5%BC%80%E5%8F%91/" style="font-size: 1.1em; color: #999">Web开发</a> <a href="/tags/React/" style="font-size: 1.1em; color: #999">React</a> <a href="/tags/%E4%BA%A4%E6%8D%A2%E6%9C%BA/" style="font-size: 1.1em; color: #999">交换机</a> <a href="/tags/SOLID%E5%8E%9F%E5%88%99/" style="font-size: 1.1em; color: #999">SOLID原则</a> <a href="/tags/linux/" style="font-size: 1.1em; color: #999">linux</a> <a href="/tags/%E7%9C%9F%E8%BF%99%E4%B9%88%E5%B9%B2%E4%BD%A0%E5%B0%B1%E7%AD%89%E6%AD%BB%E5%90%A7/" style="font-size: 1.18em; color: #999ca1">真这么干你就等死吧</a> <a href="/tags/%E5%90%88%E7%BA%A6%E5%AE%89%E5%85%A8/" style="font-size: 1.1em; color: #999">合约安全</a> <a href="/tags/Springboot/" style="font-size: 1.1em; color: #999">Springboot</a> <a href="/tags/Ant-Design/" style="font-size: 1.1em; color: #999">Ant Design</a> <a href="/tags/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/" style="font-size: 1.1em; color: #999">渗透测试</a> <a href="/tags/gemini/" style="font-size: 1.1em; color: #999">gemini</a> <a href="/tags/python/" style="font-size: 1.1em; color: #999">python</a> <a href="/tags/flask/" style="font-size: 1.18em; color: #999ca1">flask</a> <a href="/tags/%E5%AE%B9%E5%99%A8%E6%8A%80%E6%9C%AF/" style="font-size: 1.1em; color: #999">容器技术</a> <a href="/tags/Umi/" style="font-size: 1.1em; color: #999">Umi</a> <a href="/tags/%E9%A1%B9%E7%9B%AE%E5%BC%80%E5%8F%91/" style="font-size: 1.1em; color: #999">项目开发</a> <a href="/tags/Solidity/" style="font-size: 1.26em; color: #999fa8">Solidity</a> <a href="/tags/%E9%9D%A2%E8%AF%95/" style="font-size: 1.1em; color: #999">面试</a> <a href="/tags/%E7%AE%97%E6%B3%95/" style="font-size: 1.1em; color: #999">算法</a> <a href="/tags/%E6%B0%B8%E9%9B%8F%E5%A1%94%E8%8F%B2/" style="font-size: 1.1em; color: #999">永雏塔菲</a> <a href="/tags/%E5%A4%87%E5%BF%98%E5%BD%95/" style="font-size: 1.1em; color: #999">备忘录</a> <a href="/tags/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/" style="font-size: 1.1em; color: #999">数据挖掘</a></div></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>Info</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">Article :</div><div class="item-count">26</div></div><div class="webinfo-item"><div class="item-name">UV :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">PV :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">Last Update :</div><div class="item-count" id="last-push-date" data-lastPushDate="2024-08-08T09:56:30.887Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer" style="background: transparent"><div id="footer-wrap"><div class="copyright">©2020 - 2024 By TnTeQAQ</div><div class="framework-info"><span>Framework </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>Theme </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="Toggle Between Light And Dark Mode"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="Toggle between Single-column and Double-column"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside-config" type="button" title="Setting"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="Back To Top"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.umd.min.js"></script><div class="js-pjax"><script>window.typedJSFn = {
init: (str) => {
window.typed = new Typed('#subtitle', Object.assign({
strings: str,
startDelay: 300,
typeSpeed: 150,
loop: true,
backSpeed: 50,
}, null))
},
run: (subtitleType) => {
if (true) {
if (typeof Typed === 'function') {
subtitleType()
} else {
getScript('https://cdn.jsdelivr.net/npm/typed.js/dist/typed.umd.min.js').then(subtitleType)
}
} else {
subtitleType()
}
}
}
</script><script>function subtitleType () {
if (true) {
typedJSFn.init(["原神,启动!"])
} else {
document.getElementById("subtitle").textContent = "原神,启动!"
}
}
typedJSFn.run(subtitleType)</script></div><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>