linux调试分析工具

一 strace 系统调用跟踪

1 strace 参数

-c 统计每一系统调用的所执行的时间,次数和出错的次数等. 
-d 输出strace关于标准错误的调试信息. 
-f 跟踪由fork调用所产生的子进程. 
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号. 
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪. 
-h 输出简要的帮助信息. 
-i 输出系统调用的入口指针. 
-q 禁止输出关于脱离的消息. 
-r 打印出相对时间关于,,每一个系统调用. 
-t 在输出中的每一行前加上时间信息. 
-tt 在输出中的每一行前加上时间信息,微秒级. 
-ttt 微秒级输出,以秒了表示时间. 
-T 显示每一调用所耗的时间. 
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出. 
-V 输出strace的版本信息. 
-x 以十六进制形式输出非标准字符串 
-xx 所有字符串以十六进制形式输出. 
-a column 
设置返回值的输出位置.默认 为40. 
-e expr 
指定一个表达式,用来控制如何跟踪.格式如下: 
[qualifier=][!]value1[,value2]... 
qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否定符号.例如: 
-eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open表示跟踪除了open以外的其他调用.有两个特殊的符号 all 和 none. 
注意有些shell使用!来执行历史记录里的命令,所以要使用\\. 
-e trace=set 
只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all. 
-e trace=file 
只跟踪有关文件操作的系统调用. 
-e trace=process 
只跟踪有关进程控制的系统调用. 
-e trace=network 
跟踪与网络有关的所有系统调用. 
-e strace=signal 
跟踪所有与系统信号有关的 系统调用 
-e trace=ipc 
跟踪所有与进程通讯有关的系统调用 
-e abbrev=set 
设定 strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all. 
-e raw=set 
将指 定的系统调用的参数以十六进制显示. 
-e signal=set 
指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号. 
-e read=set 
输出从指定文件中读出 的数据.例如: 
-e read=3,5 
-e write=set 
输出写入到指定文件中的数据. 
-o filename 
将strace的输出写入文件filename 
-p pid 
跟踪指定的进程pid. 
-s strsize 
指定输出的字符串的最大长度.默认为32.文件名一直全部输出. 
-u username 
以username 的UID和GID执行被跟踪的命令

2 几个使用实例

(1)寻找被程序读取的配置文件

[root@v68869 sbin]# strace ./nginx 2>&1 | grep nginx.conf
open("/opt/nginx//conf/nginx.conf", O_RDONLY) = 4

(2)跟踪进程的某个系统调用

[root@v68869 conf]# strace -e open cat nginx.conf
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("nginx.conf", O_RDONLY)            = 3

 (3) 跟踪进程

[root@v68869 conf]# strace -p 23259
strace: Process 23259 attached
epoll_wait(8,
[{EPOLLIN, {u32=2768318480, u64=139739529293840}}], 512, -1) = 1
accept4(6, {sa_family=AF_INET, sin_port=htons(35326), sin_addr=inet_addr("218.98.33.164")}, [16], SOCK_NONBLOCK) = 3
epoll_ctl(8, EPOLL_CTL_ADD, 3, {EPOLLIN|EPOLLET, {u32=2768318848, u64=139739529294208}}) = 0
epoll_wait(8, [{EPOLLIN, {u32=2768318848, u64=139739529294208}}], 512, 60000) = 1
recvfrom(3, "CONNECT init.itunes.apple.com:44"..., 1024, 0, NULL, NULL) = 218
writev(3, [{"\r\n400 Bad Req"..., 120}, {"<hr><center>nginx/1.0.14</center"..., 53}], 2) = 173
shutdown(3, SHUT_WR)                    = 0
recvfrom(3, 0x7ffd5fc091b0, 4096, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
epoll_wait(8, [{EPOLLIN|EPOLLHUP, {u32=2768318848, u64=139739529294208}}], 512, 5000) = 1
recvfrom(3, "", 4096, 0, NULL, NULL)    = 0
write(5, "218.98.33.164 - - [26/May/2019:2"..., 108) = 108
close(3)                                = 0
epoll_wait(8, [{EPOLLIN, {u32=2768318480, u64=139739529293840}}], 512, -1) = 1
accept4(6, {sa_family=AF_INET, sin_port=htons(28320), sin_addr=inet_addr("218.98.33.164")}, [16], SOCK_NONBLOCK) = 3
epoll_ctl(8, EPOLL_CTL_ADD, 3, {EPOLLIN|EPOLLET, {u32=2768318849, u64=139739529294209}}) = 0
epoll_wait(8, [{EPOLLIN, {u32=2768318849, u64=139739529294209}}], 512, 60000) = 1
recvfrom(3, "CONNECT init.itunes.apple.com:44"..., 1024, 0, NULL, NULL) = 218
writev(3, [{"<html>\r\n<head><title>400 Bad Req"..., 120}, {"<hr><center>nginx/1.0.14</center"..., 53}], 2) = 173
shutdown(3, SHUT_WR)                    = 0
recvfrom(3, 0x7ffd5fc091b0, 4096, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
epoll_wait(8, [{EPOLLIN|EPOLLHUP, {u32=2768318849, u64=139739529294209}}], 512, 5000) = 1
recvfrom(3, "", 4096, 0, NULL, NULL)    = 0
write(5, "218.98.33.164 - - [26/May/2019:2"..., 108) = 108
</code></pre> 
  <p> </p> 
  <h3>(4)strace的统计概要</h3> 
  <pre class="has"><code class="language-bash">[root@v68869 conf]# strace -c ls
fastcgi.conf          fastcgi_params.default  mime.types          nginx.conf.default   uwsgi_params
fastcgi.conf.default  koi-utf                 mime.types.default  scgi_params          uwsgi_params.default
fastcgi_params        koi-win                 nginx.conf          scgi_params.default  win-utf
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 25.25    0.001423          51        28           mmap
 14.21    0.000801          45        18           mprotect
 13.13    0.000740          67        11           open
  9.44    0.000532          53        10           read
  7.40    0.000417          30        14           close
  6.53    0.000368          31        12           fstat
  4.56    0.000257         129         2         2 statfs
  3.55    0.000200         100         2           getdents
  2.41    0.000136          45         3           munmap
  2.15    0.000121          61         2           ioctl
  1.85    0.000104          35         3           write
  1.61    0.000091          30         3           brk
  1.17    0.000066          33         2         1 access
  1.14    0.000064          32         2           rt_sigaction
  0.98    0.000055          55         1           openat
  0.98    0.000055          55         1           set_robust_list
  0.91    0.000051          51         1           execve
  0.83    0.000047          47         1           getrlimit
  0.76    0.000043          43         1           set_tid_address
  0.71    0.000040          40         1           rt_sigprocmask
  0.43    0.000024          24         1         1 stat
  0.00    0.000000           0         1           arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.005635                   120         4 total
[root@v68869 conf]# strace -c -p 23259
strace: Process 23259 attached
^Cstrace: Process 23259 detached
[root@v68869 conf]# strace -c -p 23259
strace: Process 23259 attached
^Cstrace: Process 23259 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 29.12    0.000316         158         2           writev
 19.72    0.000214          43         5           epoll_wait
 18.53    0.000201          40         5         2 recvfrom
 15.39    0.000167          84         2           shutdown
  8.76    0.000095          48         2           epoll_ctl
  8.48    0.000092          46         2           accept4
  0.00    0.000000           0         1           write
  0.00    0.000000           0         1           close
------ ----------- ----------- --------- --------- ----------------
100.00    0.001085                    20         2 total
</code></pre> 
  <h2>二  mtrace 内存泄漏调式工具</h2> 
  <h3>1 安装</h3> 
  <p>centos系统:  yum install glibc-utils</p> 
  <h3>2 使用</h3> 
  <pre class="has"><code class="language-cpp">
#include <stdio.h>

int main()
{
        setenv("MALLOC_TRACE", "mtrace.log", "1");
        mtrace();

        int *p = (int *)malloc(2 * sizeof(int));

        return 0;
}
</code></pre> 
  <p><code>mtrace</code> ()开启内存使用记录,<code>muntrace()</code>用于取消内存使用记录。内存使用情况记录到一个文件,值由环境变量:<code>MALLOC_TRACE</code>决定。</p> 
  <p>编译源文件:gcc -g -DDEBUG testmtrace.c</p> 
  <p>执行:./a.out 产生mtrace.log</p> 
  <p>分析结果:  mtrace ./a.out mtrace.log</p> 
  <pre class="has"><code class="language-cpp">[root@v68869 ~]# mtrace ./a.out mtrace.log
- 0x0000000001d04010 Free 3 was never alloc'd 0x7fcd53db596a
- 0x0000000001d040f0 Free 4 was never alloc'd 0x7fcd53e771fd
- 0x0000000001d04110 Free 5 was never alloc'd 0x7fcd53eeb9dc

Memory not freed:
-----------------
           Address     Size     Caller
0x0000000001d04590      0x8  at /root/testmtrace.c:19
</code></pre> 
  <h3>3 说明</h3> 
  <p><code>mtrace</code> 采用 <code>malloc_hook</code> + <code>return_addr</code> 这两个机制来实现的</p> 
  <ul> 
   <li><code>mtrace</code> 会记录所有的分配、释放,包括所有的模块、线程。内存使用记录必将很多,所以官方推荐使用 <code>SIGUSR1</code>或<code>SIGUSR2</code> 来进行开启和关闭内存记录功能。</li> 
   <li>从 <code>mtrace</code> 记录和分析结果可以看到,内存记录日志只记录到 <code>malloc</code> 层面。而实际项目开发时,很多接口都是封装多层才会实际调用到 <code>malloc</code>,对于上面几层的地址,<code>mtrace</code> 没有记录。而上面几层的调用关系才是追踪内存泄漏问题的关键所在。所以在实际开发的项目中,使用 <code>mtrace</code> 不是一个特别好的方法。这里推荐使用 <code>valgrind</code> 工具进行跑流程的方式追踪内存泄漏。如果想要自己记录内存使用情况,可以考虑以下两种方式:</li> 
  </ul> 
  <ol> 
   <li>封装一层内存分配、释放的接口函数来记录内存使用情况。项目开发时,统一使用这个接口来进行内存管理。适用于项目尚未开始。</li> 
   <li>使用 malloc_hook 的方式进行记录,项目代码可以不变。适合于项目已经比较庞大了。</li> 
  </ol> 
  <p> </p> 
  <h3>三  ltrace 跟踪进程调用库函数</h3> 
  <p>ltrace 在某些方面和是trace功能类似</p> 
  <p>语法:ltrace [option ...] [command [arg ...]]</p> 
  <pre class="has"><code class="language-bash">Usage: ltrace [option ...] [command [arg ...]]
Trace library calls of a given program.

  -a, --align=COLUMN  align return values in a secific column.
  -c                  count time and calls, and report a summary on exit.
  -C, --demangle      decode low-level symbol names into user-level names.
  -d, --debug         print debugging info.
      --dl            show calls to symbols in dlopened libraries.
  -e expr             modify which events to trace.
  -f                  follow forks.
  -h, --help          display this help and exit.
  -i                  print instruction pointer at time of library call.
  -l, --library=FILE  print library calls from this library only.
  -L                  do NOT display library calls.
  -n, --indent=NR     indent output by NR spaces for each call level nesting.
  -o, --output=FILE   write the trace output to that file.
  -p PID              attach to the process with the process ID pid.
  -r                  print relative timestamps.
  -s STRLEN           specify the maximum string size to print.
  -S                  display system calls.
  -t, -tt, -ttt       print absolute timestamps.
  -T                  show the time spent inside each call.
  -u USERNAME         run command with the userid, groupid of username.
  -V, --version       output version information and exit.
  -x NAME             treat the global NAME like a library subroutine.</code></pre> 
  <pre class="has"><code class="language-bash">[root@bogon bin]# ltrace ./cli
(0, 0, 0x1321000, -1, 0x1f25bc2)                                                                 = 0x3c9ba22160
__libc_start_main(0x462ba0, 1, 0x7fff89be1e08, 0x4c6450, 0x4c6440 <unfinished ...>
pthread_spin_init(0x7bf600, 0, 0x7fff89be1e18, 8, 0x3c9bf8fba0)                                  = 0
__cxa_atexit(0x4afff0, 0, 0x4c6548, 8, 0x3c9bf8fba0)                                             = 0
__cxa_atexit(0x4a7550, 0, 0x4c6548, 9, 0x3c9bf8fba0)                                             = 0
__cxa_atexit(0x4a7520, 0, 0x4c6548, 10, 0x3c9bf8fba0)                                            = 0
pthread_spin_init(0x7c17e0, 0, 0, 11, 0x3c9bf8fba0)                                              = 0
__cxa_atexit(0x4a2c80, 0, 0x4c6548, 11, 0x3c9bf8fba0)                                            = 0
pthread_spin_init(0x7c18a4, 0, 0, 12, 0x3c9bf8fba0)                                              = 0
__cxa_atexit(0x4a2c70, 0, 0x4c6548, 12, 0x3c9bf8fba0)                                            = 0
strlen("*")                                                                                      = 1
memcpy(0x7c1660, "*", 1)                                                                         = 0x7c1660
__cxa_atexit(0x481290, 0, 0x4c6548, 42, 0x596b7c)                                                = 0
malloc(72)                                                                                       = 0x1bd9c40
pthread_mutex_lock(0x7bf540, 0x3c9bf8ef60, 0x1bd9c40, 81, 0x3c9bf8e188)                          = 0
pthread_mutex_unlock(0x7bf540, 0, 0x1bd9c40, 81, 0x7bf540)                                       = 0
pthread_mutex_lock(0x7bf540, 0, 0x7bf540, 0, 0x7bf540)                                           = 0
pthread_mutex_unlock(0x7bf540, 0, 0x7bf540, 0, 0x7bf540)                                         = 0
pthread_spin_init(0x7c1788, 0, 0x7bf540, 0, 0x7bf540)                                            = 0
pthread_mutex_lock(0x7bf540, 0, 0x7bf540, 0, 0x7bf540)                                           = 0
pthread_cond_broadcast(0x7d1920, 0, 0x7bf540, 0, 0x7bf540)                                       = 0
pthread_mutex_unlock(0x7bf540, 1, 0x7bf540, 0, 0x7bf540)                                         = 0
__cxa_atexit(0x47fab0, 0, 0x4c6548, 0, 0x7bf540)                                                 = 0
pthread_spin_lock(0x7c1788, 13, 0, 15, 0x3c9bf8fba0)                                             = 0
pthread_spin_unlock(0x7c1788, 13, 0, 15, 0x3c9bf8fba0)                                           = 0
pthread_spin_init(0x7c16e8, 0, 0, 15, 0x3c9bf8fba0)                                              = 0
strlen("C")                                                                                      = 1
memcpy(0x7c16f0, "C", 1)                                                                         = 0x7c16f0
malloc(216)                                                                                      = 0x1bd9c90</code></pre> 
  <p> </p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1281198342235242496"></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">你可能感兴趣的:(Linux,c/c++编程)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1892546785944072192.htm"
                           title="css主题色修改后会多出一个css吗?css怎么定义变量?" target="_blank">css主题色修改后会多出一个css吗?css怎么定义变量?</a>
                        <span class="text-muted">编程星空</span>
<a class="tag" taget="_blank" href="/search/CSS/1.htm">CSS</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</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>在CSS中修改主题色时,通常不会直接生成一个新的CSS文件,而是通过CSS变量(CustomProperties)或预处理器变量(如Sass、Less)来动态修改样式。以下是详细说明:1.CSS变量(CustomProperties)CSS变量是现代CSS提供的一种功能,允许在样式表中定义可复用的值,并在需要时动态修改。定义CSS变量CSS变量以--开头,通常在:root伪类中定义全局变量。:ro</div>
                    </li>
                    <li><a href="/article/1892546533199507456.htm"
                           title="uniapp 蓝牙连接设备 下发命令 监听蓝牙与设备的连接状态(兼容 微信小程序和支付宝小程序)" target="_blank">uniapp 蓝牙连接设备 下发命令 监听蓝牙与设备的连接状态(兼容 微信小程序和支付宝小程序)</a>
                        <span class="text-muted">外派叙利亚</span>
<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/uni-app/1.htm">uni-app</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>
                        <div>1:创建蓝牙需要调用的Api文件ly.js//import{TextDecoder}from'text-encoding-utf-8';letbluetoothOpen=false;//手机蓝牙是否打开letbluetoothConnect=false;//设备和蓝牙是否连接letisHaveDevice=false;//是否查找到设备letdeviceId=null;//设备idletservi</div>
                    </li>
                    <li><a href="/article/1892546280924704768.htm"
                           title="uni-app使用websocket" target="_blank">uni-app使用websocket</a>
                        <span class="text-muted">外派叙利亚</span>
<a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a><a class="tag" taget="_blank" href="/search/websocket/1.htm">websocket</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a>
                        <div>点击发送请求离开页面exportdefault{onLoad(){//进入这个页面的时候创建websocket连接【整个页面随时使用】this.connectSocketInit();},data(){return{socketTask:null,//确保websocket是打开状态is_open_socket:false}},//关闭websocket【必须在实例销毁之前关闭,否则会是under</div>
                    </li>
                    <li><a href="/article/1892545271611584512.htm"
                           title="新电脑配置安装下载" target="_blank">新电脑配置安装下载</a>
                        <span class="text-muted">今天吃了嘛o</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>1、谷歌浏览器地址https://www.google.cn/chrome/下载安装即可。2、nvm下载下载地址:地址https://nvm.uihtm.com/#google_vignettenvminstall相对应的node版本//安装nvmlist可以查看已下载的node版本//查看nvmuse相对应的node版本号//使用nvmuninstall对应版本号//卸载3、git下载官网地址h</div>
                    </li>
                    <li><a href="/article/1892545272022626304.htm"
                           title="windows系统不弹出用户控制中心" target="_blank">windows系统不弹出用户控制中心</a>
                        <span class="text-muted">今天吃了嘛o</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a>
                        <div>解决电脑频繁弹出用户账户控制的方法!是不是每次打开电脑都看到那个烦人的用户账户控制弹窗?1️⃣首先,按下Win+R键,打开运行窗口,输入“msconfig”并按下回车。2️⃣接下来,切换到“工具”选项卡,找到“更改UAC设置”,然后点击“启动”。3️⃣在弹出的用户账户控制设置对话框中,选择“为从不通知”,然后点击确定。</div>
                    </li>
                    <li><a href="/article/1892545272681132032.htm"
                           title="解决弹窗中form表单中按下tab键不切换的问题" target="_blank">解决弹窗中form表单中按下tab键不切换的问题</a>
                        <span class="text-muted">今天吃了嘛o</span>
<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/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>开发过程中碰到el-dialog中使用的form组件,按下键盘tab键不会切换到下一个,普通页面就正常切换。解决办法import{ref}from'vue';//省略其他导入代码constnewPWDInput=ref(null);constrepeatPWDInput=ref(null);consthandleTab=(event,nextInputRef)=>{event.preventDef</div>
                    </li>
                    <li><a href="/article/1892544892337451008.htm"
                           title="vue中原生表格的使用" target="_blank">vue中原生表格的使用</a>
                        <span class="text-muted">今天吃了嘛o</span>
<a class="tag" taget="_blank" href="/search/table%E5%8E%9F%E7%94%9F/1.htm">table原生</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a>
                        <div>因项目中需要大量的合并,而且表格左右布局,所以采用了原生table。colspan和rowspan分别代表合并多少行多少列。代码如下:线路名称{{item.lineName}}巡检区段{{item.scope}}运维管理单位{{item.operationAndMaintenanceCompany}}运检作业单位{{item.insWorkCompany}}巡检员{{item.droneWorkU</div>
                    </li>
                    <li><a href="/article/1892544893620908032.htm"
                           title="纯前端导入导出txt文件" target="_blank">纯前端导入导出txt文件</a>
                        <span class="text-muted">今天吃了嘛o</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%AF%BC%E5%85%A5%E5%AF%BC%E5%87%BAtxt%E6%96%87%E4%BB%B6/1.htm">前端导入导出txt文件</a><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/html5/1.htm">html5</a>
                        <div>1.html部分导入导出{{alone}}2.js部分导出的时候我尝试了很多次改变编码格式为gb2312的,但是无果,所以我再读取的时候先读取文件判断了文件编码格式,然后再去根据编码格式读取文件并展示页面。exportdefault{data(){return{works:[],};},methods:{handleBeforeUpload(file){this.fileList=[file];c</div>
                    </li>
                    <li><a href="/article/1892544766139232256.htm"
                           title="设计模式---命令模式" target="_blank">设计模式---命令模式</a>
                        <span class="text-muted">菜鸟起航ing</span>
<a class="tag" taget="_blank" href="/search/Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/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/%E5%91%BD%E4%BB%A4%E6%A8%A1%E5%BC%8F/1.htm">命令模式</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>1.简介命令模式(CommandPattern)是一种行为设计模式,它将一个请求封装为一个对象,从而让你可以使用不同的请求把客户端参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式通常用于以下几种情况:解耦调用操作的客户与执行操作的类:通过命令模式,可以使得调用操作的客户不需要知道是谁将会执行这个操作,以及如何执行。需要对操作进行记录、排队或日志记录:命令模式允许系统将请求记录到日</div>
                    </li>
                    <li><a href="/article/1892544639852933120.htm"
                           title="202312青少年软件编程(scratch图形化)等级考试试卷(四级)" target="_blank">202312青少年软件编程(scratch图形化)等级考试试卷(四级)</a>
                        <span class="text-muted">MarcoPage</span>
<a class="tag" taget="_blank" href="/search/Scarch/1.htm">Scarch</a><a class="tag" taget="_blank" href="/search/%E8%80%83%E8%AF%95%E9%A2%98%E5%BA%93/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><a class="tag" taget="_blank" href="/search/%E9%9D%92%E5%B0%91%E5%B9%B4%E7%BC%96%E7%A8%8B/1.htm">青少年编程</a>
                        <div>第1题:【单选题】运行下列程序,输入“abcdef”,程序结束后,变量“字符串”是?()A:fedcbB:bcdefC:abcdeD:edbca【正确答案】:B</div>
                    </li>
                    <li><a href="/article/1892543379292614656.htm"
                           title="vue中使用ueditor上传到服务器_vue+Ueditor集成 [前后端分离项目][图片、文件上传][富文本编辑]..." target="_blank">vue中使用ueditor上传到服务器_vue+Ueditor集成 [前后端分离项目][图片、文件上传][富文本编辑]...</a>
                        <span class="text-muted">小西超人</span>

                        <div>写在最前面的话:鉴于近期很多的博友讨论,说我按照文章的一步一步来,弄好之后,怎么会提示后端配置项http错误,文件上传会提示上传错误。这里提别申明一点,ueditor在前端配置好后,需要与后端部分配合进行,后端部分的项目代码git地址:https://github.com/coderliguoqing/UeditorSpringboot,然后将配置ueditor.config.js里的server</div>
                    </li>
                    <li><a href="/article/1892543379728822272.htm"
                           title="青少年计算机编程赛,青少年编程竞赛汇总" target="_blank">青少年计算机编程赛,青少年编程竞赛汇总</a>
                        <span class="text-muted">帆起</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%92%E5%B0%91%E5%B9%B4%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BC%96%E7%A8%8B%E8%B5%9B/1.htm">青少年计算机编程赛</a>
                        <div>孩子从小学编程,无论是从个人思维发展,还是科技时代需求出发,都是非常必要的。此外,家长也非常关心信息学竞赛等对孩子的帮助,让孩子能多一个进入学校的机会。那孩子学编程,有哪些高含金量的比赛值得参加呢?在义务教育阶段较具影响力的“国字号比赛”莫过于以下几个。一、全国青少年探索计划scratch创意编程大赛含金量:★★★参赛对象:全国中小学在校生(8~15岁)举办时间:10月~12月帮助:小升初:科技特</div>
                    </li>
                    <li><a href="/article/1892543000224002048.htm"
                           title="js实现三级联动" target="_blank">js实现三级联动</a>
                        <span class="text-muted">计算机毕业设计系统</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>$(function(){varprovince=$("#province"),city=$("#city"),town=$("#town");console.log(province);for(vari=0;i"+value+"";ele.append(optionStr);}functionremoveEle(ele){ele.find("option").remove();varoption</div>
                    </li>
                    <li><a href="/article/1892542748079222784.htm"
                           title="java新技术" target="_blank">java新技术</a>
                        <span class="text-muted">计算机毕业设计系统</span>

                        <div>转载:http://lj6684.iteye.com/blog/895010最近在网上查资料碰到好多没接触过的技术,先汇总在这里备用,以后慢慢吸收1.JNAJNI的替代品,调用方式比JNI更直接,不再需要JNI那层中间接口,几乎达到Java直接调用动态库2.SmallSQL基于JDBC3.0转为Desktop应用设计的嵌入式数据库,纯Java,本地访问,不支持网络但目前好像不太活跃,最新版本是0.</div>
                    </li>
                    <li><a href="/article/1892541989010862080.htm"
                           title="基于Linux平台的多实例RTSP|RTMP直播播放器深度解析与技术实现" target="_blank">基于Linux平台的多实例RTSP|RTMP直播播放器深度解析与技术实现</a>
                        <span class="text-muted">音视频牛哥</span>
<a class="tag" taget="_blank" href="/search/RTSP%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">RTSP播放器</a><a class="tag" taget="_blank" href="/search/RTMP%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">RTMP播放器</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E7%89%9B%E7%9B%B4%E6%92%ADSDK/1.htm">大牛直播SDK</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E6%97%B6%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">实时音视频</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91%E7%BC%96%E8%A7%A3%E7%A0%81/1.htm">视频编解码</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/rtsp%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">rtsp播放器</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/rtmp%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">rtmp播放器</a><a class="tag" taget="_blank" href="/search/linux%E5%9B%BD%E4%BA%A7rtmp%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">linux国产rtmp播放器</a><a class="tag" taget="_blank" href="/search/linux%E5%9B%BD%E4%BA%A7rtsp%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">linux国产rtsp播放器</a>
                        <div>一、引言在Linux平台上实现一个高性能、高并发的多实例播放器,是许多流媒体应用的核心需求。本文将结合大牛直播SDK的Linux平台RTSP/RTMP播放器功能,深入解析其实现原理、关键技术点以及优化策略。通过对代码的详细分析和实际应用的结合,帮助开发者更好地理解和应用该技术。二、项目概述本文基于以下代码实现了一个多实例播放器:multi_player_demo.cpp:主程序,负责初始化SDK、</div>
                    </li>
                    <li><a href="/article/1892541736924803072.htm"
                           title="iOS平台RTSP|RTMP直播播放器技术接入说明" target="_blank">iOS平台RTSP|RTMP直播播放器技术接入说明</a>
                        <span class="text-muted">音视频牛哥</span>
<a class="tag" taget="_blank" href="/search/RTSP%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">RTSP播放器</a><a class="tag" taget="_blank" href="/search/RTMP%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">RTMP播放器</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E7%89%9B%E7%9B%B4%E6%92%ADSDK/1.htm">大牛直播SDK</a><a class="tag" taget="_blank" href="/search/objective-c/1.htm">objective-c</a><a class="tag" taget="_blank" href="/search/iOS/1.htm">iOS</a><a class="tag" taget="_blank" href="/search/rtsp%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">rtsp播放器</a><a class="tag" taget="_blank" href="/search/iOS/1.htm">iOS</a><a class="tag" taget="_blank" href="/search/rtmp%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">rtmp播放器</a><a class="tag" taget="_blank" href="/search/iOS/1.htm">iOS</a><a class="tag" taget="_blank" href="/search/rtsp/1.htm">rtsp</a><a class="tag" taget="_blank" href="/search/player/1.htm">player</a><a class="tag" taget="_blank" href="/search/iOS/1.htm">iOS</a><a class="tag" taget="_blank" href="/search/rtmp/1.htm">rtmp</a><a class="tag" taget="_blank" href="/search/player/1.htm">player</a><a class="tag" taget="_blank" href="/search/iOS%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">iOS播放器</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E7%89%9B%E7%9B%B4%E6%92%ADSDK/1.htm">大牛直播SDK</a>
                        <div>技术背景大牛直播SDK自2015年发布RTSP、RTMP直播播放模块,迭代从未停止,SmartPlayer功能强大、性能强劲、高稳定、超低延迟、超低资源占用。无需赘述,全自研内核,行业内一致认可的跨平台RTSP、RTMP直播播放器。本文以iOS平台为例,介绍下如何集成RTSP、RTMP播放模块。技术对接系统要求SDK支持iOS9.0及以上版本;支持的CPU架构:arm64(真机调试)。准备工作相关</div>
                    </li>
                    <li><a href="/article/1892541358825074688.htm"
                           title="uniapp开发APP,主动连接mqtt,订阅消息" target="_blank">uniapp开发APP,主动连接mqtt,订阅消息</a>
                        <span class="text-muted">路痴先森</span>
<a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a>
                        <div>一、安装依赖通过查阅资料,了解到现在mqtt.js库的最新版本已经是5,但是目前应该mqtt@3.0.0版本最为稳定,我项目开发中使用的也是mqtt@3.0.0版本npminstallmqtt@3.0.0参考插件:MQTT使用-模板项目-DCloud插件市场参考文档:GitHub-mqttjs/MQTT.js:TheMQTTclientforNode.jsandthebrowser二、封装一个工具</div>
                    </li>
                    <li><a href="/article/1892540980872146944.htm"
                           title="深入解析 C++ STL中的 std::map 容器" target="_blank">深入解析 C++ STL中的 std::map 容器</a>
                        <span class="text-muted">金外飞176</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/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><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>深入解析C++中的std::map容器在C++标准模板库(STL)中,std::map是一种非常强大且常用的关联式容器。它通过键值对(key-value)的方式存储数据,并且基于红黑树实现,能够高效地进行插入、删除和查找操作。本文将通过一个实际的项目代码,深入探讨std::map的各种特性,包括构造、插入、删除、查找、排序以及与其他容器的交互。1.std::map的基本概念std::map是一个关</div>
                    </li>
                    <li><a href="/article/1892540853390471168.htm"
                           title="vuecli项目实战--管理系统" target="_blank">vuecli项目实战--管理系统</a>
                        <span class="text-muted">团团kobebryant</span>
<a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE/1.htm">项目</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><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>
                        <div>一、项目搭建HBuider直接:新建--项目--填项目名称、选地址、下拉选vue项目(2.6.10)项目结构这个样子:二、前端配置1.路由配置(地址)在src文件夹下创建router文件夹在router文件夹下面创建js文件index.js---配置组件的地址还有导航守卫、路由嵌套也配在这里1.组件路由2.组件路由嵌套3.路由导航记得跟vue对象关联还有导出路由嗷importVuefrom'vue</div>
                    </li>
                    <li><a href="/article/1892540854321606656.htm"
                           title="Vision Transformer(ViT):用 Transformer 颠覆图像识别" target="_blank">Vision Transformer(ViT):用 Transformer 颠覆图像识别</a>
                        <span class="text-muted">金外飞176</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB/1.htm">论文精读</a><a class="tag" taget="_blank" href="/search/transformer/1.htm">transformer</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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>VisionTransformer(ViT):用Transformer颠覆图像识别在计算机视觉领域,卷积神经网络(CNN)长期以来一直是图像识别任务的主流架构。然而,近年来,自然语言处理(NLP)领域中大放异彩的Transformer架构也开始在图像识别中崭露头角。今天,我们将深入探讨一种创新的架构——VisionTransformer(ViT),它将Transformer的强大能力直接应用于图像</div>
                    </li>
                    <li><a href="/article/1892540600499105792.htm"
                           title="uni.request 发起网络请求3种回调结果调用" target="_blank">uni.request 发起网络请求3种回调结果调用</a>
                        <span class="text-muted">治金的blog</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a>
                        <div>第一种标题:{{item.title}}内容:{{item.body}}import{ref}from'vue';letarrs=ref([]);//uni.request请求的三种方式functionrequest(){uni.request({url:"https://jsonplaceholder.typicode.com/posts",success:res=>{console.log(r</div>
                    </li>
                    <li><a href="/article/1892540601199554560.htm"
                           title="对回调结果严格处理then,catch,finally" target="_blank">对回调结果严格处理then,catch,finally</a>
                        <span class="text-muted">治金的blog</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a>
                        <div>{{item.content}}----{{item.author}}import{ref}from'vue';constpets=ref([]);constonPreview=function(index){leturls=pets.value.map(item=>item.url)uni.previewImage({current:index,urls})//console.log(index</div>
                    </li>
                    <li><a href="/article/1892540598934630400.htm"
                           title="vue 3中 页面跳转" target="_blank">vue 3中 页面跳转</a>
                        <span class="text-muted">治金的blog</span>
<a class="tag" taget="_blank" href="/search/Vue3%E5%AD%A6%E4%B9%A0/1.htm">Vue3学习</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/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>z1.普通函数的页面跳转首页我的import{useRouter}from'vue-router'//使用useRouter创建一个router实例constrouter=useRouter()//定义go函数以便路由跳转functiongo(){router.push({path:'/my'})}//将go函数暴露给模板2.箭头函数的实现方法首页我的import{useRouter}from'v</div>
                    </li>
                    <li><a href="/article/1892540346982789120.htm"
                           title="【vue 后台管理模板 ranAdmin 支持ant-design/ant-design/electron-plus/electron-plus-electron】" target="_blank">【vue 后台管理模板 ranAdmin 支持ant-design/ant-design/electron-plus/electron-plus-electron】</a>
                        <span class="text-muted">RanShakaLove</span>
<a class="tag" taget="_blank" href="/search/ranAdmin/1.htm">ranAdmin</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>【vue后台管理模板支持ant-design/ant-design/electron-plus/electron-plus-electron】个性化功能项目主要功能项目演示github地址vue-ant-designgitee地址vue-ant-design项目地址项目4个分支ant-designant-dessign-electronelement-pluselement-plus-electr</div>
                    </li>
                    <li><a href="/article/1892539968312635392.htm"
                           title="基于若依和flowable6.7.2的ruoyi-nbcio流程管理系统正式发布" target="_blank">基于若依和flowable6.7.2的ruoyi-nbcio流程管理系统正式发布</a>
                        <span class="text-muted">宁波阿成</span>
<a class="tag" taget="_blank" href="/search/ruoyi-nbcio/1.htm">ruoyi-nbcio</a><a class="tag" taget="_blank" href="/search/%E8%8B%A5%E4%BE%9D/1.htm">若依</a><a class="tag" taget="_blank" href="/search/flowable/1.htm">flowable</a><a class="tag" taget="_blank" href="/search/flowable/1.htm">flowable</a><a class="tag" taget="_blank" href="/search/%E8%8B%A5%E4%BE%9D/1.htm">若依</a><a class="tag" taget="_blank" href="/search/ruoyi-nbcio/1.htm">ruoyi-nbcio</a><a class="tag" taget="_blank" href="/search/ruoyi/1.htm">ruoyi</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a>
                        <div>更多ruoyi-nbcio功能请看演示系统gitee源代码地址前后端代码:https://gitee.com/nbacheng/ruoyi-nbcio演示地址:RuoYi-Nbcio后台管理系统项目概要本项目基于RuoYi-Flowable-Plus进行二次开发,从nbcio-boot(https://gitee.com/nbacheng/nbcio-boot)项目</</div>
                    </li>
                    <li><a href="/article/1892539841762095104.htm"
                           title="js的垃圾回收机制" target="_blank">js的垃圾回收机制</a>
                        <span class="text-muted">www.www</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E7%9B%B8%E5%85%B3/1.htm">相关</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%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>js中的垃圾回收机制JavaScript作为一种高级语言,开发者不需要手动管理内存的分配和释放。垃圾回收机制是JavaScript引擎中的一部分,负责自动回收那些不再被使用的内存,确保内存资源得到有效利用,避免内存泄漏。垃圾回收机制主要有两种算法:引用计数和标记清除引用计数基本原理:每个对象都有一个引用计数器,当有一个引用指向该对象时,计数器+1,当一个引用不再指向该对象时,计数器-1。如果某个对</div>
                    </li>
                    <li><a href="/article/1892539211513393152.htm"
                           title="mac mini m1芯片 Xcode 15.3 各种报错的问题" target="_blank">mac mini m1芯片 Xcode 15.3 各种报错的问题</a>
                        <span class="text-muted">OKXLIN</span>
<a class="tag" taget="_blank" href="/search/macos/1.htm">macos</a><a class="tag" taget="_blank" href="/search/xcode/1.htm">xcode</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a>
                        <div>错误一:/Users/mac/Desktop/Test_project/mobile-ios/Test/Test-Bridging-Header.h:4:9failedtoemitprecompiledheader'/Users/mac/Library/Developer/Xcode/DerivedData/App-apvcgkuclncgfqdlzqcoffyaexos/Build/Interm</div>
                    </li>
                    <li><a href="/article/1892539212012515328.htm"
                           title="Android Calendar日历获取几个月的总天数,每月的月初时间和月末时间" target="_blank">Android Calendar日历获取几个月的总天数,每月的月初时间和月末时间</a>
                        <span class="text-muted">OKXLIN</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                        <div>/***获取当月剩余天数(含当天)+往后几个月的天数总和*@parammonthNum往后几个月*@return总天数*/publicstaticintgetDaysWithMonthYear(intmonthNum){intdays=0;Calendarcalendar=Calendar.getInstance();intyear=calendar.get(Calendar.YEAR);intm</div>
                    </li>
                    <li><a href="/article/1892539085134819328.htm"
                           title="记录App中加入Mqtt实现过程" target="_blank">记录App中加入Mqtt实现过程</a>
                        <span class="text-muted">街角的小菜鸟</span>
<a class="tag" taget="_blank" href="/search/Android%E5%BC%80%E5%8F%91/1.htm">Android开发</a>
                        <div>前言因为公司项目里因为功能的修改,移除了关于无人机飞控控制的代码部分,软件中无人机信息变更为通过mqtt获取,通过翻阅网上资料后,终于实现了该功能。现在写下来,以免再次用到要重新查找资料。MQTT的相关了解Topic:订阅的主题。URI:MQTT服务器的地址例如:"tcp://"+MQTT_HOST+":"+MQTT_PORTusername&password:账户与密码ClientId:客户端的</div>
                    </li>
                    <li><a href="/article/1892538707169308672.htm"
                           title="若依前后端分离集成CAS详细教程" target="_blank">若依前后端分离集成CAS详细教程</a>
                        <span class="text-muted">Roc-xb</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%82%B9%E7%99%BB%E5%BD%95/1.htm">单点登录</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A6%BB/1.htm">前后端分离</a><a class="tag" taget="_blank" href="/search/CAS/1.htm">CAS</a>
                        <div>目录一、后端配置1、添加cas依赖2、修改配置文件3、修改LoginUser.java4、修改Constants.java5、添加CasProperties.java6、添加CasUserDetailsService.java7、添加CasAuthenticationSuccessHandler.java8、修改SecurityConfig9、启动后端二、前端配置1、修改settings.js2、</div>
                    </li>
                                <li><a href="/article/81.htm"
                                       title="java短路运算符和逻辑运算符的区别" target="_blank">java短路运算符和逻辑运算符的区别</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a>
                                    <div>
/*
		 * 逻辑运算符——不论是什么条件都要执行左右两边代码
		 * 短路运算符——我认为在底层就是利用物理电路的“并联”和“串联”实现的
		 * 原理很简单,并联电路代表短路或(||),串联电路代表短路与(&&)。
		 * 
		 * 并联电路两个开关只要有一个开关闭合,电路就会通。
		 * 类似于短路或(||),只要有其中一个为true(开关闭合)是</div>
                                </li>
                                <li><a href="/article/208.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/exception/1.htm">exception</a>
                                    <div>一、在finally块中做数据回收操作 
比如数据库连接都是很宝贵的,所以最好在finally中关闭连接。 
JDBCAgent jdbc = new JDBCAgent();
try{
jdbc.excute("select * from ctp_log");
}catch(SQLException e){
...
}finally{
jdbc.close();
</div>
                                </li>
                                <li><a href="/article/335.htm"
                                       title="utf-8与utf-8(无BOM)的区别" target="_blank">utf-8与utf-8(无BOM)的区别</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                    <div>BOM——Byte Order Mark,就是字节序标记       在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。这样如</div>
                                </li>
                                <li><a href="/article/462.htm"
                                       title="JAVA Annotation之定义篇" target="_blank">JAVA Annotation之定义篇</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/%E6%B3%A8%E8%A7%A3/1.htm">注解</a><a class="tag" taget="_blank" href="/search/annotation/1.htm">annotation</a><a class="tag" taget="_blank" href="/search/%E5%85%A5%E9%97%A8/1.htm">入门</a><a class="tag" taget="_blank" href="/search/%E6%B3%A8%E9%87%8A/1.htm">注释</a>
                                    <div>    Annotation: 译为注释或注解 
An annotation, in the Java computer programming language, is a form of syntactic metadata that can be added to Java source code. Classes, methods, variables, pa</div>
                                </li>
                                <li><a href="/article/589.htm"
                                       title="tomcat的多域名、虚拟主机配置" target="_blank">tomcat的多域名、虚拟主机配置</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a>
                                    <div>众所周知apache可以配置多域名和虚拟主机,而且配置起来比较简单,但是项目用到的是tomcat,配来配去总是不成功。查了些资料才总算可以,下面就跟大家分享下经验。 
很多朋友搜索的内容基本是告诉我们这么配置: 
在Engine标签下增面积Host标签,如下: 
<Host name="www.site1.com"  appBase="webapps"</div>
                                </li>
                                <li><a href="/article/716.htm"
                                       title="Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )" target="_blank">Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/capistrano/1.htm">capistrano</a>
                                    <div> 
1.ssh -v hdfs@192.168.18.133 出现 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 
错误 
 
运行状况如下: 
 
 
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuratio</div>
                                </li>
                                <li><a href="/article/843.htm"
                                       title="log4j的用法" target="_blank">log4j的用法</a>
                                    <span class="text-muted">Harry642</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a>
                                    <div>一、前言:     log4j 是一个开放源码项目,是广泛使用的以Java编写的日志记录包。由于log4j出色的表现,     当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代jdk1.4 的日志工具类,但当时jdk1.4已接近完成,所以sun拒绝使用log4j,当在java开发中</div>
                                </li>
                                <li><a href="/article/970.htm"
                                       title="mysql、sqlserver、oracle分页,java分页统一接口实现" target="_blank">mysql、sqlserver、oracle分页,java分页统一接口实现</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/jave/1.htm">jave</a>
                                    <div>  
定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量 
oracle分页: 
    select * from ( select mytable.*,rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart 
sqlServer分页: 
 </div>
                                </li>
                                <li><a href="/article/1097.htm"
                                       title="Hessian 简单例子" target="_blank">Hessian 简单例子</a>
                                    <span class="text-muted">antlove</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/service/1.htm">service</a><a class="tag" taget="_blank" href="/search/hessian/1.htm">hessian</a>
                                    <div>hello.hessian.MyCar.java 
package hessian.pojo;

import java.io.Serializable;


public class MyCar implements Serializable {

    private static final long serialVersionUID = 473690540190845543</div>
                                </li>
                                <li><a href="/article/1224.htm"
                                       title="数据库对象的同义词和序列" target="_blank">数据库对象的同义词和序列</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E5%BA%8F%E5%88%97/1.htm">序列</a><a class="tag" taget="_blank" href="/search/%E5%90%8C%E4%B9%89%E8%AF%8D/1.htm">同义词</a><a class="tag" taget="_blank" href="/search/ORACLE%E6%9D%83%E9%99%90/1.htm">ORACLE权限</a>
                                    <div>回顾简单的数据库权限等命令; 
解锁用户和锁定用户
alter user scott account lock/unlock;
//system下查看系统中的用户
select * dba_users;

//创建用户名和密码
create user wj identified by wj;
identified by 
//授予连接权和建表权
grant connect to </div>
                                </li>
                                <li><a href="/article/1351.htm"
                                       title="使用Powermock和mockito测试静态方法" target="_blank">使用Powermock和mockito测试静态方法</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/1.htm">持续集成</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a><a class="tag" taget="_blank" href="/search/Powermock/1.htm">Powermock</a>
                                    <div>        实例: 
package com.bijian.study;

import static org.junit.Assert.assertEquals;

import java.io.IOException;

import org.junit.Before;
import org.junit.Test;
import or</div>
                                </li>
                                <li><a href="/article/1478.htm"
                                       title="精通Oracle10编程SQL(6)访问ORACLE" target="_blank">精通Oracle10编程SQL(6)访问ORACLE</a>
                                    <span class="text-muted">bijian1013</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%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a>
                                    <div>/*
 *访问ORACLE
*/

--检索单行数据
--使用标量变量接收数据
DECLARE
  v_ename emp.ename%TYPE;
  v_sal emp.sal%TYPE;
BEGIN
  select ename,sal into v_ename,v_sal
  from emp where empno=&no;
  dbms_output.pu</div>
                                </li>
                                <li><a href="/article/1605.htm"
                                       title="【Nginx四】Nginx作为HTTP负载均衡服务器" target="_blank">【Nginx四】Nginx作为HTTP负载均衡服务器</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a>
                                    <div> Nginx的另一个常用的功能是作为负载均衡服务器。一个典型的web应用系统,通过负载均衡服务器,可以使得应用有多台后端服务器来响应客户端的请求。一个应用配置多台后端服务器,可以带来很多好处: 
  负载均衡的好处 
 
 增加可用资源 
 增加吞吐量 
 加快响应速度,降低延时 
 出错的重试验机制 
 Nginx主要支持三种均衡算法: 
 
 round-robin 
 l</div>
                                </li>
                                <li><a href="/article/1732.htm"
                                       title="jquery-validation备忘" target="_blank">jquery-validation备忘</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/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/F%23/1.htm">F#</a><a class="tag" taget="_blank" href="/search/Firebug/1.htm">Firebug</a>
                                    <div>留点学习jquery validation总结的代码: 
  
function checkForm(){
	validator = $("#commentForm").validate({// #formId为需要进行验证的表单ID
		errorElement :"span",// 使用"div"标签标记错误, 默认:&</div>
                                </li>
                                <li><a href="/article/1859.htm"
                                       title="solr限制admin界面访问(端口限制和http授权限制)" target="_blank">solr限制admin界面访问(端口限制和http授权限制)</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/%E9%99%90%E5%AE%9AIp%E8%AE%BF%E9%97%AE/1.htm">限定Ip访问</a>
                                    <div>solr的管理界面可以帮助我们做很多事情,但是把solr程序放到公网之后就要限制对admin的访问了。 
可以通过tomcat的http基本授权来做限制,也可以通过iptables防火墙来限制。 
我们先看如何通过tomcat配置http授权限制。 
第一步: 在tomcat的conf/tomcat-users.xml文件中添加管理用户,比如: 
<userusername="ad</div>
                                </li>
                                <li><a href="/article/1986.htm"
                                       title="多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1" target="_blank">多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a>
                                    <div>

public class IncDecThread {

	private int j=10;
	
	/*
	 * 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
	 * 两个问题:
	 * 1、线程同步--synchronized
	 * 2、线程之间如何共享同一个j变量--内部类
	 */
	public static </div>
                                </li>
                                <li><a href="/article/2113.htm"
                                       title="买房历程" target="_blank">买房历程</a>
                                    <span class="text-muted">cfyme</span>

                                    <div>  
  
2015-06-21: 万科未来城,看房子 
  
2015-06-26: 办理贷款手续,贷款73万,贷款利率5.65=5.3675 
  
2015-06-27: 房子首付,签完合同 
  
2015-06-28,央行宣布降息 0.25,就2天的时间差啊,没赶上。 
  
首付,老婆找他的小姐妹接了5万,另外几个朋友借了1-</div>
                                </li>
                                <li><a href="/article/2240.htm"
                                       title="[军事与科技]制造大型太空战舰的前奏" target="_blank">[军事与科技]制造大型太空战舰的前奏</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%88%B6%E9%80%A0/1.htm">制造</a>
                                    <div> 
 
       天气热了........空调和电扇要准备好.......... 
 
       最近,世界形势日趋复杂化,战争的阴影开始覆盖全世界.......... 
 
 
       所以,我们不得不关</div>
                                </li>
                                <li><a href="/article/2367.htm"
                                       title="dateformat" target="_blank">dateformat</a>
                                    <span class="text-muted">dai_lm</span>
<a class="tag" taget="_blank" href="/search/DateFormat/1.htm">DateFormat</a>
                                    <div>
"Symbol  Meaning             Presentation   Ex."
"------  -------             ------------   ----"
"G       era designator      (Text)         AD"
"y       year</div>
                                </li>
                                <li><a href="/article/2494.htm"
                                       title="Hadoop如何实现关联计算" target="_blank">Hadoop如何实现关联计算</a>
                                    <span class="text-muted">datamachine</span>
<a class="tag" taget="_blank" href="/search/mapreduce/1.htm">mapreduce</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E5%85%B3%E8%81%94%E8%AE%A1%E7%AE%97/1.htm">关联计算</a>
                                    <div>    选择Hadoop,低成本和高扩展性是主要原因,但但它的开发效率实在无法让人满意。 
    以关联计算为例。 
    假设:HDFS上有2个文件,分别是客户信息和订单信息,customerID是它们之间的关联字段。如何进行关联计算,以便将客户名称添加到订单列表中? 
  &nbs</div>
                                </li>
                                <li><a href="/article/2621.htm"
                                       title="用户模型中修改用户信息时,密码是如何处理的" target="_blank">用户模型中修改用户信息时,密码是如何处理的</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>当我添加或修改用户记录的时候对于处理确认密码我遇到了一些麻烦,所有我想分享一下我是怎么处理的。 
场景是使用的基本的那些(系统自带),你需要有一个数据表(user)并且表中有一个密码字段(password),它使用 sha1、md5或其他加密方式加密用户密码。 
面是它的工作流程: 当创建用户的时候密码需要加密并且保存,但当修改用户记录时如果使用同样的场景我们最终就会把用户加密过的密码再次加密,这</div>
                                </li>
                                <li><a href="/article/2748.htm"
                                       title="中文 iOS/Mac 开发博客列表" target="_blank">中文 iOS/Mac 开发博客列表</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/Blog/1.htm">Blog</a>
                                    <div>  
本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息。 
本博客列表涉及的文章内容支持 定制化Google搜索,特别感谢 JeOam 提供并帮助更新。 
本博客列表也提供同步更新的OPML文件(下载OPML文件),可供导入到例如feedly等第三方定阅工具中,特别感谢 lcepy 提供自动转换脚本。这里有导入教程。   </div>
                                </li>
                                <li><a href="/article/2875.htm"
                                       title="js去除空格,去除左右两端的空格" target="_blank">js去除空格,去除左右两端的空格</a>
                                    <span class="text-muted">蕃薯耀</span>
<a class="tag" taget="_blank" href="/search/%E5%8E%BB%E9%99%A4%E5%B7%A6%E5%8F%B3%E4%B8%A4%E7%AB%AF%E7%9A%84%E7%A9%BA%E6%A0%BC/1.htm">去除左右两端的空格</a><a class="tag" taget="_blank" href="/search/js%E5%8E%BB%E6%8E%89%E6%89%80%E6%9C%89%E7%A9%BA%E6%A0%BC/1.htm">js去掉所有空格</a><a class="tag" taget="_blank" href="/search/js%E5%8E%BB%E9%99%A4%E7%A9%BA%E6%A0%BC/1.htm">js去除空格</a>
                                    <div>js去除空格,去除左右两端的空格 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g</div>
                                </li>
                                <li><a href="/article/3002.htm"
                                       title="SpringMVC4零配置--web.xml" target="_blank">SpringMVC4零配置--web.xml</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/springmvc4/1.htm">springmvc4</a>
                                    <div>servlet3.0+规范后,允许servlet,filter,listener不必声明在web.xml中,而是以硬编码的方式存在,实现容器的零配置。 
ServletContainerInitializer:启动容器时负责加载相关配置 
package javax.servlet;
import java.util.Set;
public interface ServletContainer</div>
                                </li>
                                <li><a href="/article/3129.htm"
                                       title="《开源框架那些事儿21》:巧借力与借巧力" target="_blank">《开源框架那些事儿21》:巧借力与借巧力</a>
                                    <span class="text-muted">j2eetop</span>
<a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a>
                                    <div>同样做前端UI,为什么有人花了一点力气,就可以做好?而有的人费尽全力,仍然错误百出?我们可以先看看几个故事。 
故事1:巧借力,乌鸦也可以吃核桃 
有一个盛产核桃的村子,每年秋末冬初,成群的乌鸦总会来到这里,到果园里捡拾那些被果农们遗落的核桃。 
核桃仁虽然美味,但是外壳那么坚硬,乌鸦怎么才能吃到呢?原来乌鸦先把核桃叼起,然后飞到高高的树枝上,再将核桃摔下去,核桃落到坚硬的地面上,被撞破了,于是,</div>
                                </li>
                                <li><a href="/article/3256.htm"
                                       title="JQuery EasyUI 验证扩展" target="_blank">JQuery EasyUI 验证扩展</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/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/%E9%AA%8C%E8%AF%81/1.htm">验证</a>
                                    <div>  最近项目中用到了前端框架-- EasyUI,在做校验的时候会涉及到很多需要自定义的内容,现把常用的验证方式总结出来,留待后用。 
  以下内容只需要在公用js中添加即可。 
  使用类似于如下: 
 <input class="easyui-textbox" name="mobile" id="mobile&</div>
                                </li>
                                <li><a href="/article/3383.htm"
                                       title="架构师之httpurlconnection----------读取和发送(流读取效率通用类)" target="_blank">架构师之httpurlconnection----------读取和发送(流读取效率通用类)</a>
                                    <span class="text-muted">nannan408</span>

                                    <div>1.前言. 
   如题. 
2.代码. 
 

/* 
 * Copyright (c) 2015, S.F. Express Inc. All rights reserved.
 */
package com.test.test.test.send;

import java.io.IOException;
import java.io.InputStream</div>
                                </li>
                                <li><a href="/article/3510.htm"
                                       title="Jquery性能优化" target="_blank">Jquery性能优化</a>
                                    <span class="text-muted">r361251</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a>
                                    <div>一、注意定义jQuery变量的时候添加var关键字 
这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下: 
$loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了相同的变量名,就会郁闷至死的 
二、请使用一个var来定义变量 
如果你使用多个变量的话,请如下方式定义: 
. 代码如下: 
 
var page </div>
                                </li>
                                <li><a href="/article/3637.htm"
                                       title="在eclipse项目中使用maven管理依赖" target="_blank">在eclipse项目中使用maven管理依赖</a>
                                    <span class="text-muted">tjj006</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a>
                                    <div>概览: 
 
 如何导入maven项目至eclipse中 
 
 
 建立自有Maven  Java类库服务器 
 
 
 建立符合maven代码库标准的自定义类库 
 
Maven在管理Java类库方面有巨大的优势,像白衣所说就是非常“环保”。 
我们平时用IDE开发都是把所需要的类库一股脑的全丢到项目目录下,然后全部添加到ide的构建路径中,如果用了SVN/CVS,这样会很容易就 把</div>
                                </li>
                                <li><a href="/article/3764.htm"
                                       title="中国天气网省市级联页面" target="_blank">中国天气网省市级联页面</a>
                                    <span class="text-muted">x125858805</span>
<a class="tag" taget="_blank" href="/search/%E7%BA%A7%E8%81%94/1.htm">级联</a>
                                    <div>1、页面及级联js 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&l</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>