爬虫 博客 增加访问量 Jsoup Java 正则 实现

需求

利用 get 请求 访问博客, 增加阅读量, 易于搜索引擎收录

实现要点

注意: 每次用代码访问博客就会增加一个访问量, 设计思路是获取文章共分几页显示, 从每页的文章列表中爬出文章的url, 然后遍历这些url进行get请求访问.

  1. 每篇博客的网址是 http://blog.csdn.net/never_cxb/article/details/47324459, 最后面的数字为标记id, 每篇文章不同

  2. 博客文章列表为 http://blog.csdn.net/never_cxb/article/list/1, 我们要做的就是从中爬出每篇文章的url

  3. 文章比较多, 会分好几页显示 http://blog.csdn.net/never_cxb/article/list/1 最后面的数字1会递增为2, 3, 4 等等. 可以在 http://blog.csdn.net/never_cxb/article/list/1 最下面的25条数据 共2页1 2 下一页 尾页 爬出一共几页

  4. 为了防止被封号, 随机访问某页文章列表, 随机访问该页上的某篇文章

对某个文章url进行get请求访问

// 对一个文章url进行get请求访问
    public static void accessBolg(String blogUrl) {
        URL url;
        try {
            url = new URL(blogUrl);

            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.addRequestProperty("Content-Type", "text/html; charset=UTF-8");
            con.addRequestProperty(
                    "User-Agent",
                    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36");
            con.setRequestMethod("GET");

            if (con.getResponseCode() == 200) {
                InputStream inputStr = con.getInputStream();
                StreamTool.read(inputStr);
                System.out.println(blogUrl + " has been accessed");
                // 给个随机数暂停访问
                int sleepSec = new Random().nextInt(200) + 100;
                Thread.sleep(sleepSec * 1000);

            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

获取某列表页的文章 url 集合

// 获取该列表页上的文章 url 集合
    public static List<String> getBolgUrls(String listUrl) {
        List<String> result = new ArrayList<String>(20);
        Document doc;
        try {
            doc = Jsoup.connect(listUrl).userAgent("Mozilla").timeout(3000)
                    .get();

            Elements links = doc.select("a[href]");
            for (Element link : links) {

                if (link.text().equals("阅读")) {
                    // 在属性名前加 abs: 前缀,取得一个绝对路径,
                    // 这样就可以返回包含根路径的URL地址attr("abs:href")
                    result.add(link.attr("abs:href"));
                }

            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result;

    }

获取一共分几页显示

// 获取文章页数
    public static HomePage countPage(String pageUrl) {
        Document doc;
        try {
            doc = Jsoup.connect(pageUrl).userAgent("Mozilla").timeout(3000)
                    .get();

            Elements links = doc.select(".pagelist");
            Element link = links.first();

            String text = link.select("span").text();
            System.out.println(text);
            String pattern = new String("(\\d+)[^\\d]*(\\d+)[^\\d]*");

            // 创建 Pattern 对象
            Pattern r = Pattern.compile(pattern);

            Matcher m = r.matcher(text);
            if (m.find()) {

                return new HomePage(Integer.valueOf(m.group(2)),
                        Integer.valueOf(m.group(1)));
            }
            // 
// 29条数据 共2页首页 // 上一页 // href="/never_cxb/article/list/1">1 2 //
} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return new HomePage(); }

随机访问某个列表页

omePage home = countPage(baseListUrl);
        int page = home.getPage();

        List originPages = new ArrayList(page);
        for (int i = 0; i < page; i++) {
            originPages.add(i);
        }
        List blogList = new ArrayList(page);

        // random
        for (int i = 0; i < page; i++) {
            int random = new Random().nextInt(originPages.size());
            int index = originPages.get(random) + 1;
            String list = baseListUrl + index;
            originPages.remove(random);
            blogList.add(list);
        }

打乱某列表页上的文章 url 集合

// 将每页的文章 url打乱
    public static List randomUrlList(List oriListUrl) {
        if (oriListUrl != null) {
            int size = oriListUrl.size();
            List randomList = new ArrayList(size);
            int[] oriArray = new int[size];

            for (int i = 0; i < size; i++) {
                oriArray[i] = i;
            }

            for (int i = 0; i < size; i++) {
                int random = new Random().nextInt(size - i);
                int value = oriArray[random];
                randomList.add(oriListUrl.get(value));

                // note 随着i递增,当前最后一个数的位置会往前移
                oriArray[random] = oriArray[size - i - 1];
                oriArray[size - i - 1] = value;
            }
            return randomList;
        }
        return null;

    }

输出访问 url 的工具类

public class StreamTool {

    public static byte[] read(InputStream inputStr) throws Exception {
        ByteArrayOutputStream outStr = new ByteArrayOutputStream();
        // TODO Auto-generated method stub
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = inputStr.read(buffer)) != -1) {
            String searchTitle = new String(buffer, "UTF-8");
            if (searchTitle.contains(" Java 数组 声明 定义 传参数 - never_cxb的专栏"</span>)){
                System.<span class="hljs-keyword">out</span>.println(searchTitle);
            }
            outStr.write(buffer, <span class="hljs-number">0</span>, len);
        }
        inputStr.close();
        <span class="hljs-keyword">return</span> outStr.toByteArray();
    }

}</code></pre> 
  <h2 id="输出信息">输出信息</h2> 
  <pre class="prettyprint"><code class=" hljs avrasm"><span class="hljs-number">32</span>条数据 共<span class="hljs-number">3</span>页
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47148535</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47042831</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47324803</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47184241</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47303109</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47323241</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47375017</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47156935</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47324459</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47134107</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47346891</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47359761</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47324101</span> has been accessed
<span class="hljs-label">http:</span>//blog<span class="hljs-preprocessor">.csdn</span><span class="hljs-preprocessor">.net</span>/never_cxb/article/details/<span class="hljs-number">47360253</span> has been accessed
</code></pre> 
  <h1 id="所用知识点总结">所用知识点总结</h1> 
  <ol> 
   <li>Java 正则匹配获取页数</li> 
  </ol> 
  <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">div</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"papelist"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"pagelist"</span>></span>
<span class="hljs-tag"><<span class="hljs-title">span</span>></span> 31条数据  共3页<span class="hljs-tag"></<span class="hljs-title">span</span>></span><span class="hljs-tag"><<span class="hljs-title">a</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">"/never_cxb/article/list/1"</span>></span>首页<span class="hljs-tag"></<span class="hljs-title">a</span>></span> <span class="hljs-tag"><<span class="hljs-title">a</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">"/never_cxb/article/list/1"</span>></span>上一页<span class="hljs-tag"></<span class="hljs-title">a</span>></span> <span class="hljs-tag"><<span class="hljs-title">a</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">"/never_cxb/article/list/1"</span>></span>1<span class="hljs-tag"></<span class="hljs-title">a</span>></span> <span class="hljs-tag"><<span class="hljs-title">strong</span>></span>2<span class="hljs-tag"></<span class="hljs-title">strong</span>></span> <span class="hljs-tag"><<span class="hljs-title">a</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">"/never_cxb/article/list/3"</span>></span>3<span class="hljs-tag"></<span class="hljs-title">a</span>></span> <span class="hljs-tag"><<span class="hljs-title">a</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">"/never_cxb/article/list/3"</span>></span>下一页<span class="hljs-tag"></<span class="hljs-title">a</span>></span> <span class="hljs-tag"><<span class="hljs-title">a</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">"/never_cxb/article/list/3"</span>></span>尾页<span class="hljs-tag"></<span class="hljs-title">a</span>></span> 
    <span class="hljs-tag"></<span class="hljs-title">div</span>></span></code></pre> 
  <p>对于这段html, 先用<code>doc.select(".pagelist")</code> 匹配出了<code>class="pagelist"</code> <br> 再用<code>link.select("span")</code> 匹配了 <code><span> <span> 31条数据 共3页</span></span></code></p> 
  <p>再用正则匹配出 <code>共3页</code> 中的页数3</p> 
  <p>Java 正则中, <code>Matcher.group(0)</code> 表示整个匹配的字符串, 而<code>group(1)</code> 则表示第一个括号内的匹配</p> 
  <p>注意一定在有<code>Matcher.group(0)</code> 前一定先调用 <code>Matcher.find()</code> ,不然会报<code>java.lang.IllegalStateException: No match found</code></p> 
  <pre class="prettyprint"><code class=" hljs avrasm">doc = Jsoup<span class="hljs-preprocessor">.connect</span>(pageUrl)<span class="hljs-preprocessor">.userAgent</span>(<span class="hljs-string">"Mozilla"</span>)<span class="hljs-preprocessor">.timeout</span>(<span class="hljs-number">3000</span>)
                    <span class="hljs-preprocessor">.get</span>()<span class="hljs-comment">;</span>

            Elements links = doc<span class="hljs-preprocessor">.select</span>(<span class="hljs-string">".pagelist"</span>)<span class="hljs-comment">;</span>
            Element link = links<span class="hljs-preprocessor">.first</span>()<span class="hljs-comment">;</span>

            String text = link<span class="hljs-preprocessor">.select</span>(<span class="hljs-string">"span"</span>)<span class="hljs-preprocessor">.text</span>()<span class="hljs-comment">;</span>

            String pattern = new String(<span class="hljs-string">"[^\\d]*(\\d+)[^\\d]*(\\d+)[^\\d]*"</span>)<span class="hljs-comment">;</span>

            // 创建 Pattern 对象
            Pattern r = Pattern<span class="hljs-preprocessor">.compile</span>(pattern)<span class="hljs-comment">;</span>

            Matcher m = r<span class="hljs-preprocessor">.matcher</span>(text)<span class="hljs-comment">;</span>
            if (m<span class="hljs-preprocessor">.find</span>()) {
                return Integer<span class="hljs-preprocessor">.valueOf</span>(m<span class="hljs-preprocessor">.group</span>(<span class="hljs-number">2</span>))<span class="hljs-comment">;</span>
            }</code></pre> 
  <ol>
    2. 
  </ol> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1188228486372892672"></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">你可能感兴趣的:(java)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1900647888455790592.htm"
                           title="Java网络编程:TCP的socket编程" target="_blank">Java网络编程:TCP的socket编程</a>
                        <span class="text-muted">想作会飞的鱼</span>
<a class="tag" taget="_blank" href="/search/Java%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/1.htm">Java网络编程</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/1.htm">网络编程</a><a class="tag" taget="_blank" href="/search/socket/1.htm">socket</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/tcp/1.htm">tcp</a>
                        <div>一、Java中的网络编程协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议、TCP协议和UDP协议。现在TCP/IP协议族中的主要socket类型为流套接字(使用TCP协议)和数据报套接字(使用UDP协议)。TCP协议提供面向连接的服务,通过它建立的是可靠地连接。Java为TCP协议提供了两个类:S</div>
                    </li>
                    <li><a href="/article/1900647254486740992.htm"
                           title="JAVA简单实现国密双向认证" target="_blank">JAVA简单实现国密双向认证</a>
                        <span class="text-muted">shootero@126.com</span>
<a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E7%9B%B8%E5%85%B3/1.htm">安全相关</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%9B%BD%E5%AF%86/1.htm">国密</a>
                        <div>要实现国密双向认证的数据发送,需要使用支持国密算法的Java库,并且确保HTTP客户端能够处理SSL/TLS连接时的客户端证书验证。在这个例子中,使用Java标准库结合BouncyCastle作为提供国密算法的支持。下面是一个简化的示例,展示如何使用Java实现国密双向认证的数据发送。请注意,实际开发中可能需要更多的错误处理和配置细节。首先,确保你已经添加了BouncyCastle作为安全提供者,</div>
                    </li>
                    <li><a href="/article/1900646246197030912.htm"
                           title="前端流式输出实现详解:从原理到实践" target="_blank">前端流式输出实现详解:从原理到实践</a>
                        <span class="text-muted">代码剑客588</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>前端流式输出实现详解:从原理到实践前言一、流式输出核心原理1.1什么是流式输出?1.2技术优势对比1.3关键技术支撑二、原生JavaScript实现方案2.1使用FetchAPI流式处理关键点解析:2.2处理SSE(Server-SentEvents)三、主流框架实现示例3.1React实现方案3.2Vue实现方案四、高级优化策略4.1性能优化4.2用户体验增强4.3安全注意事项五、实际应用案例5</div>
                    </li>
                    <li><a href="/article/1900643348331425792.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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a>
                        <div>1.pom依赖org.bouncycastlebcprov-jdk15to181.662.SM3封装packagecom.yl.encrypt.sm;importorg.bouncycastle.crypto.digests.SM3Digest;importorg.bouncycastle.crypto.macs.HMac;importorg.bouncycastle.crypto.params.</div>
                    </li>
                    <li><a href="/article/1900641962059427840.htm"
                           title="Java SSLSocket TLS 1.3示例" target="_blank">Java SSLSocket TLS 1.3示例</a>
                        <span class="text-muted">cyan20115</span>
<a class="tag" taget="_blank" href="/search/java/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/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>该Java11JEP332添加了对TLS1.3协议的支持。SSLSocket+TLS1.3具有TLS1.3协议和TLS_AES_128_GCM_SHA256流密码的SSLSocket客户端,用于将请求发送到https://google.com并打印响应。JavaTLS13.javapackagecom.mkyong.java11.jep332;importjavax.net.ssl.SSLSock</div>
                    </li>
                    <li><a href="/article/1900636282007121920.htm"
                           title="C#实现AES-CBC加密工具类(含完整源码及使用教程)" target="_blank">C#实现AES-CBC加密工具类(含完整源码及使用教程)</a>
                        <span class="text-muted">WangMing_X</span>
<a class="tag" taget="_blank" href="/search/C%23%E5%AE%9E%E7%8E%B0%E5%90%84%E7%A7%8D%E5%8A%9F%E8%83%BD%E5%B7%A5%E5%85%B7%E9%9B%86/1.htm">C#实现各种功能工具集</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/AES-CBC%E5%8A%A0%E5%AF%86/1.htm">AES-CBC加密</a>
                        <div>一、AES-CBC加密应用场景AES(AdvancedEncryptionStandard)作为全球公认的安全加密标准,广泛使用在以下场景:API通信加密:保护HTTP接口传输的敏感数据(如身份令牌、支付信息)文件安全存储:加密本地配置文件、数据库连接字符串等用户隐私保护:加密存储密码、身份证号等PII(个人身份信息)跨平台数据交换:与Java/Python等其他语言实现的加密系统互通物联网设备通</div>
                    </li>
                    <li><a href="/article/1900634011206742016.htm"
                           title="java解析el-upload上传的文件,vue+elementui 使用el-upload组件实现单个文件手动上传" target="_blank">java解析el-upload上传的文件,vue+elementui 使用el-upload组件实现单个文件手动上传</a>
                        <span class="text-muted">神经脱臼</span>

                        <div>ref='upload'style="width:100%":action="uploadUrl":on-remove="handleRemove":on-change="handleChange":data="uploadData":file-list="filelist":before-upload="handleBeforeUpload":auto-upload="false">选取文件仅支</div>
                    </li>
                    <li><a href="/article/1900631104797339648.htm"
                           title="[Java实战]性能优化qps从1万到3万" target="_blank">[Java实战]性能优化qps从1万到3万</a>
                        <span class="text-muted">曼岛_</span>
<a class="tag" taget="_blank" href="/search/%E5%9B%BD%E5%AF%86%E5%AE%9E%E6%88%98/1.htm">国密实战</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、问题背景事情起因是项目上springboot项目提供的tps达不到客户要求,除了增加服务器提高tps之外,作为团队的技术总监,架构师,技术扛把子,本着我不入地狱谁入地狱的原则,决心从代码上优化,让客户享受到飞一般的感觉。虽然大多数编程工作在写下第一行代码时已经完成,但本着谦虚使人进步,骄傲使人落后的原则还是一步一个脚印的把问题慢慢展开,慢慢分析。以下内容是抽丝剥茧的心路历程,请君欣赏。二、TP</div>
                    </li>
                    <li><a href="/article/1900629719712329728.htm"
                           title="Java面试精选:Kafka+Zookeeper+redis+JVM+RabbitMQ,最全总结" target="_blank">Java面试精选:Kafka+Zookeeper+redis+JVM+RabbitMQ,最全总结</a>
                        <span class="text-muted">我叫小迁W:bjmsb2019</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</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><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                        <div>大家开始准备金九银十了吗?不知是跳槽还是找工作的朋友,趁现在增进一下自己的技术何尝不是一件好事呢?一、RabbitMQ1.rabbitmq的使用场景有哪些?2.rabbitmq有哪些重要的角色?3.rabbitmq有哪些重要的组件?4.rabbitmq中vhost的作用是什么?5.rabbitmq的消息是怎么发送的?6.rabbitmq怎么保证消息的稳定性?7.rabbitmq怎么避免消息丢失?8</div>
                    </li>
                    <li><a href="/article/1900629213036212224.htm"
                           title="Java常用集合与映射的线程安全问题深度解析" target="_blank">Java常用集合与映射的线程安全问题深度解析</a>
                        <span class="text-muted">jiajia651304</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%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>Java常用集合与映射的线程安全问题深度解析一、线程安全基础认知在并发编程环境下,当多个线程同时操作同一集合对象时,若未采取同步措施,可能导致以下典型问题:数据竞争:多个线程同时修改数据导致结果不可预测状态不一致:部分线程看到集合的中间状态内存可见性:线程本地缓存与主内存数据不同步死循环风险:特定操作引发无限循环(如JDK7的HashMap扩容)二、典型非线程安全集合问题分析1.ArrayList</div>
                    </li>
                    <li><a href="/article/1900622404586106880.htm"
                           title="java语言开源协议_Language Server Protocol" target="_blank">java语言开源协议_Language Server Protocol</a>
                        <span class="text-muted">weixin_39709674</span>
<a class="tag" taget="_blank" href="/search/java%E8%AF%AD%E8%A8%80%E5%BC%80%E6%BA%90%E5%8D%8F%E8%AE%AE/1.htm">java语言开源协议</a>
                        <div>软件简介LSP(LanguageServerProtocol)开源的语言服务器协定。由红帽、微软和Codenvy联合推出,可以让不同的程序编辑器与集成开发环境(IDE)方便嵌入各种程序语言,允许开发人员在最喜爱的工具中使用各种语言来撰写程序。唯一基于JSON的语言服务器数据交换协定,目前由GitHub代管,并采用CC及MIT授权。该协定主要用来促进编辑器及语言服务器之间的互动,允许开发人员在各种编</div>
                    </li>
                    <li><a href="/article/1900622026029199360.htm"
                           title="Java常用API:String与ArrayList的设计哲学与实践应用" target="_blank">Java常用API:String与ArrayList的设计哲学与实践应用</a>
                        <span class="text-muted">shy2005_5_31</span>
<a class="tag" taget="_blank" href="/search/Java%E5%85%A8%E6%A0%88%E5%BC%80%E5%8F%91%E5%AD%A6%E4%B9%A0/1.htm">Java全栈开发学习</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/java-ee/1.htm">java-ee</a><a class="tag" taget="_blank" href="/search/intellij-idea/1.htm">intellij-idea</a>
                        <div>在Java编程中,API(应用程序编程接口)是开发者最强大的工具之一。它们封装了复杂的底层逻辑,提供了简洁的调用方式。本文将聚焦Java中两个最常用的API——String和ArrayList,从底层原理到实际应用,结合深度思考,探讨它们的设计哲学与使用技巧。一、String:不可变性的艺术1.String的核心特性String类在Java中代表字符串,其核心特性是不可变性。这意味着一旦一个Str</div>
                    </li>
                    <li><a href="/article/1900618874806661120.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>
                        <div>深入理解Java集合框架:构建高效、灵活的数据管理方案引言Java集合框架(JavaCollectionsFramework,JCF)是Java语言提供的一套用于表示和操作集合的统一架构。它包含了一系列的接口和类,用于存储和操作对象集合,如列表(List)、集合(Set)、映射(Map)和队列(Queue)等。集合框架的设计初衷是为了提供一套灵活、可重用且类型安全的集合数据结构,帮助开发者以统一和</div>
                    </li>
                    <li><a href="/article/1900617991184248832.htm"
                           title="Python, Java 开发全国苦难人群诉苦平台APP" target="_blank">Python, Java 开发全国苦难人群诉苦平台APP</a>
                        <span class="text-muted">Geeker-2025</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>开发一个“全国苦难人群诉苦平台APP”是一个非常有社会意义的项目,旨在为需要帮助的人群提供一个表达困难、寻求支持和解决方案的平台。这种APP可以帮助政府、公益组织和社会各界更好地了解和解决社会问题,同时为苦难人群提供心理支持和实际帮助。以下是一个高层次的开发思路,以及如何用**Python**和**Java**实现相关功能的示例。---###**1.功能需求分析**一个“全国苦难人群诉苦平台APP</div>
                    </li>
                    <li><a href="/article/1900616979455209472.htm"
                           title="Maven的安装配置" target="_blank">Maven的安装配置</a>
                        <span class="text-muted">2301_82243979</span>
<a class="tag" taget="_blank" href="/search/%E4%BD%9C%E8%80%85%5C%2F/1.htm">作者\/</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>(注:文章是前段时间写的忘记发了,防止丢失在此记录一下)Maven是Apache下的纯Java开发的开源项目,是一个项目管理工具,使用Maven对项目进行构建,依赖管理。依赖管理就是一个项目中要使用第三方jar包才可以运行。Maven正是对这些jar包进行规范化管理,所以在Maven的项目中只需要在pom.xml中添加jar包的坐标,自动从Maven仓库中下载jar包,运行即可。Maven项目对比</div>
                    </li>
                    <li><a href="/article/1900616853105995776.htm"
                           title="微信小程序点餐系统的设计与实现(开题报告+源码+论文)_在线点餐外卖系统设计与实现文献" target="_blank">微信小程序点餐系统的设计与实现(开题报告+源码+论文)_在线点餐外卖系统设计与实现文献</a>
                        <span class="text-muted">2301_82243979</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/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/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a>
                        <div>二.技术环境jdk版本:1.8及以上ide工具:Eclipse或者IDEA,微信小程序开发工具数据库:mysql5.7(必须5.7)编程语言:Javajava框架:ssmmaven:3.6.1详细技术:HTML+CSS+JAVA+SSM+MYSQL+VUE+MAVEN+微信开发工具三.功能设计本基于微信小程序的外卖点餐系统的设计与实现有管理员,外卖员,餐厅,用户共四个角色。管理员功能有个人中心,外</div>
                    </li>
                    <li><a href="/article/1900608910172155904.htm"
                           title="JavaScript基础-全局作用域" target="_blank">JavaScript基础-全局作用域</a>
                        <span class="text-muted">難釋懷</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>在JavaScript编程中,理解变量的作用域是编写高效、可维护代码的关键之一。全局作用域是指变量在整个程序范围内都可访问的状态,这意味着它们可以在任何函数或代码块中被读取和修改。然而,过度使用全局变量也可能导致一些问题,如命名冲突和意外的副作用。本文将详细介绍全局作用域的概念、特性以及如何合理使用全局变量。一、什么是全局作用域?当一个变量在任何函数、代码块之外声明时,它就处于全局作用域下。这意味</div>
                    </li>
                    <li><a href="/article/1900602860882685952.htm"
                           title="idea java cpu100_Intellij Idea cpu 100% 卡顿 解决办法" target="_blank">idea java cpu100_Intellij Idea cpu 100% 卡顿 解决办法</a>
                        <span class="text-muted">weixin_39968760</span>

                        <div>配置文件位置修改配置文件idea.vmoptions具体参数配置#堆栈设置-Xms4096m-Xmx4096m-Xmn3072m-XX:MetaspaceSize=1024m-XX:MaxMetaspaceSize=1024m-XX:+AlwaysPreTouch-XX:InitialCodeCacheSize=1200m-XX:ReservedCodeCacheSize=1200m-XX:+Us</div>
                    </li>
                    <li><a href="/article/1900601346294345728.htm"
                           title="开发过程中如何减少属性注释?" target="_blank">开发过程中如何减少属性注释?</a>
                        <span class="text-muted">紫乾2014</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E7%BB%8F%E9%AA%8C/1.htm">开发经验</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E7%BB%8F%E9%AA%8C/1.htm">开发经验</a>
                        <div>一、注释冗余举个例子,我们在开发项目中肯定会有状态字段,现在有个工单状态枚举StatusEnum.javapackagecn.zxj.note;/***@author:Administrator*@since:2025/1/3014:40*@description:*/publicenumStatusEnum{TO_BE_SUBMITTED(1,"待提交"),SUBMITTED(2,"已提交"),</div>
                    </li>
                    <li><a href="/article/1900600463707926528.htm"
                           title="SpringBoot设置过滤器(Filter)或拦截器(Interceptor)的执行顺序:@Order注解、setOrder()方法" target="_blank">SpringBoot设置过滤器(Filter)或拦截器(Interceptor)的执行顺序:@Order注解、setOrder()方法</a>
                        <span class="text-muted">pan_junbiao</span>
<a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</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%88%91%E3%81%AE%E5%8E%9F%E5%88%9B/1.htm">我の原创</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>JavaWeb过滤器、拦截器、监听器,系列文章:(1)过滤器(Filter)的使用:《Servlet过滤器(Filter)的使用:Filter接口、@WebFilter注释》《SpringMVC使用过滤器(Filter)解决中文乱码》《SpringBoot过滤器(Filter)的使用:Filter接口、FilterRegistrationBean类配置、@WebFilter注释》《SpringBo</div>
                    </li>
                    <li><a href="/article/1900597435617570816.htm"
                           title="mybatisSql拼接报错" target="_blank">mybatisSql拼接报错</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/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>Column'id'inwhereclauseisambiguous;nestedexceptionisjava.sql.SQLIntegrityConstraintViolationException:Column'id'inwhereclauseisambiguousSELECTs.id,s.serial_no,s.material_requisition_id,s.material_requ</div>
                    </li>
                    <li><a href="/article/1900596679585886208.htm"
                           title="Elasticsearch Java High Level Client [7.17] 使用" target="_blank">Elasticsearch Java High Level Client [7.17] 使用</a>
                        <span class="text-muted">DavidSoCool</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>es的HighLevelClient存在es源代码的引用,结合springboot使用时,会存在es版本的冲突,这里记录下解决冲突和使用方式(es已经不建议使用这个了)。注意es服务端的版本需要与client的版本对齐,否则返回数据可能会解析失败!!!文档地址:JavaHighLevelRESTClient|JavaRESTClient[7.17]|Elastic1、首先创建个javaspring</div>
                    </li>
                    <li><a href="/article/1900591760128667648.htm"
                           title="深入理解 Java 中 synchronized 的使用和锁升级" target="_blank">深入理解 Java 中 synchronized 的使用和锁升级</a>
                        <span class="text-muted">谢家小布柔</span>
<a class="tag" taget="_blank" href="/search/java%E4%B8%AD%E7%9A%84%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">java中的面试题</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录一、synchronized的使用方式(一)修饰普通方法(二)修饰静态方法(三)修饰代码块二、synchronized的锁升级(一)无锁(二)偏向锁(三)轻量级锁(四)重量级锁在Java并发编程中,synchronized是一个非常重要的关键字,用于实现线程同步,保证在同一时刻只有一个线程可以访问被同步的代码块或方法,从而避免多线程带来的数据不一致等问题。同时,Java虚拟机(JVM)为了提高</div>
                    </li>
                    <li><a href="/article/1900591760762007552.htm"
                           title="Java面向对象编程进阶:深入理解static、单例模式与继承" target="_blank">Java面向对象编程进阶:深入理解static、单例模式与继承</a>
                        <span class="text-muted">shy2005_5_31</span>
<a class="tag" taget="_blank" href="/search/Java%E5%85%A8%E6%A0%88%E5%BC%80%E5%8F%91%E5%AD%A6%E4%B9%A0/1.htm">Java全栈开发学习</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/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>在面向对象编程(OOP)中,掌握高级特性是提升代码质量和设计能力的关键。本文基于Java语言,深入探讨static关键字、单例设计模式、继承等核心概念,并结合实际应用场景与深度思考,帮助读者构建系统化的知识体系。一、static关键字:共享与效率的基石1.静态变量vs实例变量静态变量:用static修饰,属于类,内存中仅一份,被所有对象共享。应用场景:全局计数器、配置参数。publicclassU</div>
                    </li>
                    <li><a href="/article/1900589997283667968.htm"
                           title="25年大数据开发省赛样题第一套,离线数据处理答案" target="_blank">25年大数据开发省赛样题第一套,离线数据处理答案</a>
                        <span class="text-muted">Tometor</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a><a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a>
                        <div>省赛样题一,数据抽取模块这一模块的作用是从mysql抽取数据到ods层进行指标计算,在题目中要求进行全量抽取,并新增etl-date字段进行分区,日期为比赛前一天importorg.apache.spark.sql.SparkSessionimportjava.util.PropertiesobjectTask1{defmain(args:Array[String]):Unit={valspark</div>
                    </li>
                    <li><a href="/article/1900587981727657984.htm"
                           title="Mybatis的基本使用" target="_blank">Mybatis的基本使用</a>
                        <span class="text-muted">学c真好玩</span>
<a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a>
                        <div>MyBatis简介MyBatis用于持久层框架,持久层是对数据库操作的部分,前版本iBatis由Apache软件基金组织进行更名并维护。特点:简化数据库的操作SQL映射灵活(半ORM框架)支持高级映射易于集成维护配置动态SQL缓存机制功能:替代JDBC,JDBC是java中提供的用于操作数据库的技术及方案数据库的连接控制难。连接池SQL语句硬编码。将sql语句存放到xml配置文件中参数传递问题。提</div>
                    </li>
                    <li><a href="/article/1900584073215143936.htm"
                           title="VSCode 2025最新后端开发必备插件汇总(必备插件合集,Python、Java、Go等语言)" target="_blank">VSCode 2025最新后端开发必备插件汇总(必备插件合集,Python、Java、Go等语言)</a>
                        <span class="text-muted">Code_流苏</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E4%B8%8E%E9%AB%98%E6%95%88%E5%B7%A5%E5%85%B7/1.htm">实用软件与高效工具</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</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%E5%BC%80%E5%8F%91/1.htm">后端开发</a><a class="tag" taget="_blank" href="/search/%E5%BF%85%E5%A4%87%E6%8F%92%E4%BB%B6%E5%90%88%E9%9B%86/1.htm">必备插件合集</a>
                        <div>前言:作为微软推出的轻量级跨平台编辑器,VSCode凭借智能代码补全、远程开发、Git集成等核心功能,已成为后端开发者首选工具。其强大的插件生态更是覆盖了主流后端语言支持、代码质量优化、性能分析等全场景需求。名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)目录一、语言支持类插件二、代码质量和格式化工具三、数据库工具四、AP</div>
                    </li>
                    <li><a href="/article/1900572222951583744.htm"
                           title="Spring Cloud 与微服务学习总结(14)—— 云原生时代,如何从 Java 开发者转型微服务?" target="_blank">Spring Cloud 与微服务学习总结(14)—— 云原生时代,如何从 Java 开发者转型微服务?</a>
                        <span class="text-muted">一杯甜酒</span>
<a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/Cloud%E4%B8%8E%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">Cloud与微服务</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/cloud/1.htm">cloud</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84/1.htm">微服务架构</a>
                        <div>前言根据维基百科定义,微服务不是整体应用程序中的一个层。相反,微服务是一个独立的业务功能,具有清晰的接口,并且可以通过内部组件实现分层架构。从战略角度来看,微服务架构基本上遵循“做一件事,就要做得好”的Unix哲学。为了应对传统单体架构的缺陷,微服务架构被企业广泛应用。然而,实践之前有很多问题都需要提前考虑清楚,比如Java背景的开发者是否更有优势?微服务、容器化、DevOps和CI/CD之间的关</div>
                    </li>
                    <li><a href="/article/1900567679102676992.htm"
                           title="【零基础JavaScript入门 | Day1】从“消费记账“案例学编程基础 ⭐表格制作+数据类型转换全解析" target="_blank">【零基础JavaScript入门 | Day1】从“消费记账“案例学编程基础 ⭐表格制作+数据类型转换全解析</a>
                        <span class="text-muted">helbyYoung</span>
<a class="tag" taget="_blank" href="/search/JavaScrip%E5%AD%A6%E4%B9%A0/1.htm">JavaScrip学习</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>【零基础JavaScript入门|Day1】从"消费记账"案例学编程基础⭐表格制作+数据类型转换全解析今日学习重点:✅数据与现实的映射关系→网页表格如何承载生活数据✅变量容器的本质→用let管理三大消费支出✅隐式类型转换技巧→+prompt()输入处理的妙用✅模板字符串实战→动态生成消费报表案例亮点:1️⃣用户交互三部曲:通过prompt()实现饮食/交通/娱乐费用的分步输入2️⃣自动统计系统:t</div>
                    </li>
                    <li><a href="/article/1900564652379664384.htm"
                           title="2024年最新【Rust指南】快速入门 开发环境 hello world_rust开发是啥(3)" target="_blank">2024年最新【Rust指南】快速入门 开发环境 hello world_rust开发是啥(3)</a>
                        <span class="text-muted">2301_79772893</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</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>2、与其他编程语言相比较C/C++性能很好,但是系统类型和内存都不太安全。Java/C#,拥有GC机制,能保证内存安全,特性也优秀,但是性能不行Rust:安全无需GC代码安全高效,易于维护、调试3、Rust特别擅长的领域高性能WebServiceWebAssembly命令行工具网络编程嵌入式设备系统编程4、Rust的用户和案例Google:新操作系统Fuschia,其中Rust代码量约占30%Am</div>
                    </li>
                                <li><a href="/article/104.htm"
                                       title="springmvc 下 freemarker页面枚举的遍历输出" target="_blank">springmvc 下 freemarker页面枚举的遍历输出</a>
                                    <span class="text-muted">杨白白</span>
<a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/freemarker/1.htm">freemarker</a>
                                    <div>spring mvc freemarker 中遍历枚举 
 
1枚举类型有一个本地方法叫values(),这个方法可以直接返回枚举数组。所以可以利用这个遍历。 
 

enum

public enum BooleanEnum {  
    TRUE(Boolean.TRUE, "是"), FALSE(Boolean.FALSE, "否");  
</div>
                                </li>
                                <li><a href="/article/231.htm"
                                       title="实习简要总结" target="_blank">实习简要总结</a>
                                    <span class="text-muted">byalias</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a>
                                    <div>来白虹不知不觉中已经一个多月了,因为项目还在需求分析及项目架构阶段,自己在这段 
时间都是在学习相关技术知识,现在对这段时间的工作及学习情况做一个总结: 
 
(1)工作技能方面 
大体分为两个阶段,Java Web 基础阶段和Java EE阶段 
 
1)Java Web阶段 
在这个阶段,自己主要着重学习了 JSP, Servlet, JDBC, MySQL,这些知识的核心点都过 
了一遍,也</div>
                                </li>
                                <li><a href="/article/358.htm"
                                       title="Quartz——DateIntervalTrigger触发器" target="_blank">Quartz——DateIntervalTrigger触发器</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2208559 一.概述 
simpleTrigger 内部实现机制是通过计算间隔时间来计算下次的执行时间,这就导致他有不适合调度的定时任务。例如我们想每天的 1:00AM 执行任务,如果使用 SimpleTrigger,间隔时间就是一天。注意这里就会有一个问题,即当有 misfired 的任务并且恢复执行时,该执行时间</div>
                                </li>
                                <li><a href="/article/485.htm"
                                       title="Unix快捷键" target="_blank">Unix快捷键</a>
                                    <span class="text-muted">18289753290</span>
<a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a><a class="tag" taget="_blank" href="/search/Unix%EF%BC%9B%E5%BF%AB%E6%8D%B7%E9%94%AE%3B/1.htm">Unix;快捷键;</a>
                                    <div>复制,删除,粘贴: 
dd:删除光标所在的行                             &nbs</div>
                                </li>
                                <li><a href="/article/612.htm"
                                       title="获取Android设备屏幕的相关参数" target="_blank">获取Android设备屏幕的相关参数</a>
                                    <span class="text-muted">酷的飞上天空</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>包含屏幕的分辨率  以及 屏幕宽度的最大dp 高度最大dp   
  
        TextView text = (TextView)findViewById(R.id.text);
        DisplayMetrics dm = new DisplayMetrics();
        text.append("getResources().ge</div>
                                </li>
                                <li><a href="/article/739.htm"
                                       title="要做物联网?先保护好你的数据" target="_blank">要做物联网?先保护好你的数据</a>
                                    <span class="text-muted">蓝儿唯美</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE/1.htm">数据</a>
                                    <div>根据Beecham Research的说法,那些在行业中希望利用物联网的关键领域需要提供更好的安全性。 
在Beecham的物联网安全威胁图谱上,展示了那些可能产生内外部攻击并且需要通过快速发展的物联网行业加以解决的关键领域。 
Beecham Research的技术主管Jon Howes说:“之所以我们目前还没有看到与物联网相关的严重安全事件,是因为目前还没有在大型客户和企业应用中进行部署,也就</div>
                                </li>
                                <li><a href="/article/866.htm"
                                       title="Java取模(求余)运算" target="_blank">Java取模(求余)运算</a>
                                    <span class="text-muted">随便小屋</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>        整数之间的取模求余运算很好求,但几乎没有遇到过对负数进行取模求余,直接看下面代码: 
/**
 * 
 * @author Logic
 *
 */
public class Test {

	public static void main(String[] args) {
		// TODO A</div>
                                </li>
                                <li><a href="/article/993.htm"
                                       title="SQL注入介绍" target="_blank">SQL注入介绍</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/sql%E6%B3%A8%E5%85%A5/1.htm">sql注入</a>
                                    <div>二、SQL注入范例 
  
 这里我们根据用户登录页面 
  <form action="" > 用户名:<input type="text" name="username"><br/> 密 码:<input type="password" name="passwor</div>
                                </li>
                                <li><a href="/article/1120.htm"
                                       title="优雅代码风格" target="_blank">优雅代码风格</a>
                                    <span class="text-muted">aoyouzi</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a>
                                    <div>总结了几点关于优雅代码风格的描述: 
 
 代码简单:不隐藏设计者的意图,抽象干净利落,控制语句直截了当。 
 接口清晰:类型接口表现力直白,字面表达含义,API 相互呼应以增强可测试性。 
 依赖项少:依赖关系越少越好,依赖少证明内聚程度高,低耦合利于自动测试,便于重构。 
 没有重复:重复代码意味着某些概念或想法没有在代码中良好的体现,及时重构消除重复。 
 战术分层:代码分层清晰,隔离明确,</div>
                                </li>
                                <li><a href="/article/1247.htm"
                                       title="布尔数组" target="_blank">布尔数组</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%B8%83%E5%B0%94%E6%95%B0%E7%BB%84/1.htm">布尔数组</a>
                                    <div>  
androi中提到了布尔数组; 
  
布尔数组默认的是false,  并且只会打印false或者是true 
  
布尔数组的例子;  根据字符数组创建布尔数组 
		char[] c = {'p','u','b','l','i','c'};
		//根据字符数组的长度创建布尔数组的个数
		boolean[] b = new bool</div>
                                </li>
                                <li><a href="/article/1374.htm"
                                       title="web.xml之welcome-file-list、error-page" target="_blank">web.xml之welcome-file-list、error-page</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/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/error-page/1.htm">error-page</a>
                                    <div>welcome-file-list 
1.定义: 
<welcome-file-list>
    <welcome-file>login.jsp</welcome>
</welcome-file-list> 
 2.作用:用来指定WEB应用首页名称。 
  
error-page1.定义: 
<error-page&g</div>
                                </li>
                                <li><a href="/article/1501.htm"
                                       title="richfaces 4 fileUpload组件删除上传的文件" target="_blank">richfaces 4 fileUpload组件删除上传的文件</a>
                                    <span class="text-muted">sunjing</span>
<a class="tag" taget="_blank" href="/search/clear/1.htm">clear</a><a class="tag" taget="_blank" href="/search/Richfaces+4/1.htm">Richfaces 4</a><a class="tag" taget="_blank" href="/search/fileupload/1.htm">fileupload</a>
                                    <div> 页面代码       
        <h:form id="fileForm">            <rich:</div>
                                </li>
                                <li><a href="/article/1628.htm"
                                       title="技术文章备忘" target="_blank">技术文章备忘</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E6%96%87%E7%AB%A0/1.htm">技术文章</a>
                                    <div>Zookeeper 
http://wenku.baidu.com/view/bab171ffaef8941ea76e05b8.html 
http://wenku.baidu.com/link?url=8thAIwFTnPh2KL2b0p1V7XSgmF9ZEFgw4V_MkIpA9j8BX2rDQMPgK5l3wcs9oBTxeekOnm5P3BK8c6K2DWynq9nfUCkRlTt9uV</div>
                                </li>
                                <li><a href="/article/1755.htm"
                                       title="org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1解决方案" target="_blank">org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1解决方案</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a>
                                    <div>文章摘自:http://blog.csdn.net/yangwawa19870921/article/details/7553181 
  
在编写HQL时,可能会出现这种代码: 
  
select a.name,b.age from TableA a left join TableB b on a.id=b.id 
 如果这是HQL,那么这段代码就是错误的,因为HQL不支持</div>
                                </li>
                                <li><a href="/article/1882.htm"
                                       title="sqlserver按照字段内容进行排序" target="_blank">sqlserver按照字段内容进行排序</a>
                                    <span class="text-muted">bozch</span>
<a class="tag" taget="_blank" href="/search/%E6%8C%89%E7%85%A7%E5%86%85%E5%AE%B9%E6%8E%92%E5%BA%8F/1.htm">按照内容排序</a>
                                    <div>在做项目的时候,遇到了这样的一个需求: 
          从数据库中取出的数据集,首先要将某个数据或者多个数据按照地段内容放到前面显示,例如:从学生表中取出姓李的放到数据集的前面; 
         select * fro</div>
                                </li>
                                <li><a href="/article/2009.htm"
                                       title="编程珠玑-第一章-位图排序" target="_blank">编程珠玑-第一章-位图排序</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/%E7%BC%96%E7%A8%8B%E7%8F%A0%E7%8E%91/1.htm">编程珠玑</a>
                                    <div>

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Random;

public class BitMapSearch {

  </div>
                                </li>
                                <li><a href="/article/2136.htm"
                                       title="Java关于==和equals" target="_blank">Java关于==和equals</a>
                                    <span class="text-muted">chenbowen00</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>关于==和equals概念其实很简单,一个是比较内存地址是否相同,一个比较的是值内容是否相同。虽然理解上不难,但是有时存在一些理解误区,如下情况: 
1、 
 
String a = "aaa"; 
a=="aaa"; 
==> true 
2、 
 
new String("aaa")==new String("aaa</div>
                                </li>
                                <li><a href="/article/2263.htm"
                                       title="[IT与资本]软件行业需对外界投资热情保持警惕" target="_blank">[IT与资本]软件行业需对外界投资热情保持警惕</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/it/1.htm">it</a>
                                    <div> 
      我还是那个看法,软件行业需要增强内生动力,尽量依靠自有资金和营业收入来进行经营,避免在资本市场上经受各种不同类型的风险,为企业自主研发核心技术和产品提供稳定,温和的外部环境... 
 
      如果我们在自己尚未掌握核心技术之前,企图依靠上市来筹集资金,然后使劲往某个领域砸钱,然</div>
                                </li>
                                <li><a href="/article/2390.htm"
                                       title="oracle 数据块结构" target="_blank">oracle 数据块结构</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E5%9D%97/1.htm">块</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%9D%97/1.htm">数据块</a><a class="tag" taget="_blank" href="/search/%E5%9D%97%E7%BB%93%E6%9E%84/1.htm">块结构</a><a class="tag" taget="_blank" href="/search/%E8%A1%8C%E7%9B%AE%E5%BD%95/1.htm">行目录</a>
                                    <div>oracle 数据块是数据库存储的最小单位,一般为操作系统块的N倍。其结构为: 
 
块头--〉空行--〉数据,其实际为纵行结构。 
 
块的标准大小由初始化参数DB_BLOCK_SIZE指定。具有标准大小的块称为标准块(Standard Block)。块的大小和标准块的大小不同的块叫非标准块(Nonstandard Block)。同一数据库中,Oracle9i及以上版本支持同一数据库中同时使用标</div>
                                </li>
                                <li><a href="/article/2517.htm"
                                       title="github上一些觉得对自己工作有用的项目收集" target="_blank">github上一些觉得对自己工作有用的项目收集</a>
                                    <span class="text-muted">dengkane</span>
<a class="tag" taget="_blank" href="/search/github/1.htm">github</a>
                                    <div>github上一些觉得对自己工作有用的项目收集  
   
技能类 
 
 markdown语法中文说明 
  
回到顶部 
   
全文检索 
 
  elasticsearch  
  bigdesk elasticsearch管理插件  
  
回到顶部 
   
nosql 
 
  mapdb 支持亿级别map, list, 支持事务. 可考虑做为缓存使用  
  C</div>
                                </li>
                                <li><a href="/article/2644.htm"
                                       title="初二上学期难记单词二" target="_blank">初二上学期难记单词二</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                                    <div>dangerous 危险的 
panda 熊猫 
lion 狮子 
elephant 象 
monkey 猴子 
tiger 老虎 
deer 鹿 
snake 蛇 
rabbit 兔子 
duck 鸭 
horse 马 
forest 森林 
fall 跌倒;落下 
climb 爬;攀登 
finish 完成;结束 
cinema 电影院;电影 
seafood 海鲜;海产食品 
bank 银行</div>
                                </li>
                                <li><a href="/article/2771.htm"
                                       title="8、mysql外键(FOREIGN KEY)的简单使用" target="_blank">8、mysql外键(FOREIGN KEY)的简单使用</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>一、基本概念 
1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。 
2、外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。 
3、如</div>
                                </li>
                                <li><a href="/article/2898.htm"
                                       title="java循环标签 Foreach" target="_blank">java循环标签 Foreach</a>
                                    <span class="text-muted">shuizhaosi888</span>
<a class="tag" taget="_blank" href="/search/%E6%A0%87%E7%AD%BE/1.htm">标签</a><a class="tag" taget="_blank" href="/search/java%E5%BE%AA%E7%8E%AF/1.htm">java循环</a><a class="tag" taget="_blank" href="/search/foreach/1.htm">foreach</a>
                                    <div>1. 简单的for循环 
	public static void main(String[] args) {
		for (int i = 1, y = i + 10; i < 5 && y < 12; i++, y = i * 2) {

			System.err.println("i=" + i + "    y=" </div>
                                </li>
                                <li><a href="/article/3025.htm"
                                       title="Spring Security(05)——异常信息本地化" target="_blank">Spring Security(05)——异常信息本地化</a>
                                    <span class="text-muted">234390216</span>
<a class="tag" taget="_blank" href="/search/exception/1.htm">exception</a><a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E5%B8%B8%E4%BF%A1%E6%81%AF/1.htm">异常信息</a><a class="tag" taget="_blank" href="/search/%E6%9C%AC%E5%9C%B0%E5%8C%96/1.htm">本地化</a>
                                    <div>异常信息本地化 
  
       Spring Security支持将展现给终端用户看的异常信息本地化,这些信息包括认证失败、访问被拒绝等。而对于展现给开发者看的异常信息和日志信息(如配置错误)则是不能够进行本地化的,它们是以英文硬编码在Spring Security的代码中的。在Spring-Security-core-x</div>
                                </li>
                                <li><a href="/article/3152.htm"
                                       title="DUBBO架构服务端告警Failed to send message Response" target="_blank">DUBBO架构服务端告警Failed to send message Response</a>
                                    <span class="text-muted">javamingtingzhao</span>
<a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/DUBBO/1.htm">DUBBO</a>
                                    <div> 废话不多说,警告日志如下,不知道有哪位遇到过,此异常在服务端抛出(服务器启动第一次运行会有这个警告),后续运行没问题,找了好久真心不知道哪里错了。 
  
 WARN 2015-07-18 22:31:15,272 com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(84)</div>
                                </li>
                                <li><a href="/article/3279.htm"
                                       title="JS中Date对象中几个用法" target="_blank">JS中Date对象中几个用法</a>
                                    <span class="text-muted">leeqq</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Date/1.htm">Date</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E5%90%8E%E4%B8%80%E5%A4%A9/1.htm">最后一天</a>
                                    <div>近来工作中遇到这样的两个需求 
1. 给个Date对象,找出该时间所在月的第一天和最后一天 
2. 给个Date对象,找出该时间所在周的第一天和最后一天 
  
需求1中的找月第一天很简单,我记得api中有setDate方法可以使用 
使用setDate方法前,先看看getDate 
var date = new Date();
console.log(date);
// Sat J</div>
                                </li>
                                <li><a href="/article/3406.htm"
                                       title="MFC中使用ado技术操作数据库" target="_blank">MFC中使用ado技术操作数据库</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/mfc/1.htm">mfc</a>
                                    <div>1.在stdafx.h中导入ado动态链接库 
 
#import"C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","end")2.在CTestApp文件的InitInstance()函数中domodal之前写::CoIniti</div>
                                </li>
                                <li><a href="/article/3533.htm"
                                       title="Android Studio加速" target="_blank">Android Studio加速</a>
                                    <span class="text-muted">rensanning</span>
<a class="tag" taget="_blank" href="/search/android+studio/1.htm">android studio</a>
                                    <div>Android Studio慢、吃内存!启动时后会立即通过Gradle来sync & build工程。 
 
 
(1)设置Android Studio 
a) 禁用插件 
File -> Settings...  Plugins 去掉一些没有用的插件。 
比如:Git Integration、GitHub、Google Cloud Testing、Google Cloud</div>
                                </li>
                                <li><a href="/article/3660.htm"
                                       title="各数据库的批量Update操作" target="_blank">各数据库的批量Update操作</a>
                                    <span class="text-muted">tomcat_oracle</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/sqlite/1.htm">sqlite</a>
                                    <div>MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了。本篇仅记录批量update操作的 
sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了。     注意:下列批量更新语句都是作为一个事务整体执行,要不全部成功,要不全部回滚。   
MSSQL的SQL语句   
 WITH R AS(
  SELECT 'John' as name, 18 as</div>
                                </li>
                                <li><a href="/article/3787.htm"
                                       title="html禁止清除input文本输入缓存" target="_blank">html禁止清除input文本输入缓存</a>
                                    <span class="text-muted">xp9802</span>
<a class="tag" taget="_blank" href="/search/input/1.htm">input</a>
                                    <div>多数浏览器默认会缓存input的值,只有使用ctl+F5强制刷新的才可以清除缓存记录。如果不想让浏览器缓存input的值,有2种方法: 
方法一: 在不想使用缓存的input中添加 autocomplete="off"; eg: <input type="text" autocomplete="off" name</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>