android中小说信息抓取展示

1、引言

        这两天打算把以前弄的一个小说阅读软件的爬虫规则更新一下,然后略微修改后准备上线使用,目前只改了一下搜索界面的规则,勉强能用,加载数据方面还需要优化一下,把这一部分发出来给大家看看,感兴趣的可以直接复制去使用。

2、主要代码

2.1、主界面布局



    
        
            
                
            
            
                
                
            
            
        
    
    
    

2.2、ListView布局



    
    
        
        
        
    

2.3、activity界面代码

package xyz.dritrtj.read.ui;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import xyz.dritrtj.read.R;
import xyz.dritrtj.read.data.Title;
import xyz.dritrtj.read.interfaces.Init;
import xyz.dritrtj.read.utils.SetUiSize;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * java中重复使用的变量使用后一定要赋值为空,否则数据可能会出错
 */
public class SearchActivity extends AppCompatActivity implements View.OnClickListener, Init {
    private LinearLayout ll_search;
    private LinearLayout ll_exit;
    private ImageView iv_exit;
    private ImageView iv_circle;
    private EditText et_content;
    private TextView tv_search;
    private ListView lv_search;
    private LinearLayout ll_search_top;
    private WebView wv_search;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);
        initView();
        setViewSize();
        setData();
    }
    @SuppressLint("NonConstantResourceId")
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.tv_search:
                handler.sendEmptyMessage(3);//通知搜索
                break;
            case R.id.ll_exit:
                handler.removeMessages(0);
                finish();
                break;
        }
    }
    @SuppressLint("HandlerLeak")
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 0:
                    if (list.size()>0){
                        lv_search.setAdapter(adapter);
                    }
                    break;
                case 1://通知更新数据,不要用线程更新
                    adapter.notifyDataSetChanged();
                    break;
                case 2://页面加载完成通知可以开始搜索
                {
                    String name=et_content.getText().toString();
                    et_content.setText("");
                    if (!name.equals("")){
                        jsFunction="javascript:function search(data) {\n" +
                                "                var search=document.getElementById('bdcsMain');\n" +
                                "                search.value=''+data;\n" +
                                "                var cls=document.getElementsByClassName('searchBtn');\n" +
                                "                if (cls.length>0){\n" +
                                "                    var now_search=cls[0];\n" +
                                "                    now_search.click();\n" +
                                "                }\n" +
                                "            }";
                        wv_search.loadUrl(jsFunction);
                        //调用 js函数
                        wv_search.loadUrl("javascript:search("+"'"+name+"'"+");");
                    }
                }
                    break;
                case 3://重新刷新页面,准备搜索
                {
                    flag=0;
                    isStart=false;
                    isSearch=true;
                    wv_search.clearCache(true);//清除缓存
                    wv_search.loadUrl("http://www.ibiquzw.info/");//重新加载页面,因为后面会替换掉url
                }
                    break;
                case 4://返回搜索数据
                {
                    jsFunction="javascript:function getTitle() {\n" +
                            "                var uls=document.getElementsByTagName('ul');\n" +
                            "                if(uls.length>0){\n" +
                            "                    ul=uls[1];\n" +
                            "                    var lis=ul.getElementsByTagName('li');\n" +
                            "                    if(lis.length>0){\n" +
                            "                        var now_li;\n" +
                            "                        var as;\n" +
                            "                        var a;\n" +
                            "                        var url;\n" +
                            "                        var name;\n" +
                            "                        var author;\n" +
                            "                        for (var i = 1; i < lis.length && i<21; i++) {\n" +
                            "                            now_li=lis[i];\n" +
                            "                            as=now_li.getElementsByTagName('a');\n" +
                            "                            if(as.length>0){\n" +
                            "                                a=as[0];\n" +
                            "                                url=a.href;\n" +
                            "                                name=a.innerHTML;\n" +
                            "                                a=as[1];\n" +
                            "                                author=a.innerHTML;\n" +
                            "                                window.Android.setTitle(url,name,author);\n" +
                            "                            }\n" +
                            "                        }\n" +
                            "                        window.Android.notice();\n" +
                            "                    }\n" +
                            "                }\n" +
                            "            }";
                    wv_search.loadUrl(jsFunction);
                    //调用 js函数
                    wv_search.loadUrl("javascript:getTitle();");
                }
                    break;
                case 5: //加载简介和封面url页面
                {
                    flag=1;
                    if (list.size()>now_position){
                        wv_search.loadUrl(list.get(now_position).path);
                    }
                }
                    break;
                case 6: //加载简介和封面url
                {
                    if (list.size()>now_position){
                        jsFunction="javascript:function getContent() {\n" +
                                "                var div=document.getElementById('intro');\n" +
                                "                var introduce=div.innerText;\n" +
                                "                window.Android.setContent(introduce);\n" +
                                "                var img_div=document.getElementById('fmimg');\n" +
                                "                var imgs=img_div.getElementsByTagName('img');\n" +
                                "                if (imgs.length>0){\n" +
                                "                    var img=imgs[0];\n" +
                                "                    var url=img.src;\n" +
                                "                    window.Android.getImg(url);\n" +
                                "                }\n" +
                                "            }";
                        wv_search.loadUrl(jsFunction);
                        //调用 js函数
                        wv_search.loadUrl("javascript:getContent();");
                    }
                }
                    break;
            }
        }
    };
    private Content adapter=new Content();
    private List list=new ArrayList();
    private String jsFunction;//js函数
    private boolean isStart;//是否初始化
    private boolean isSearch;//是否搜索
    @Override
    public void initView() {
        View decorView=getWindow().getDecorView();//获取当前界面的DecorView
        int option=View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;//更改文字颜色为深黑色
        decorView.setSystemUiVisibility(option);//设置系统UI元素的可见性
        getWindow().setNavigationBarColor(Color.TRANSPARENT);
        getWindow().setStatusBarColor(Color.parseColor("#ffffff"));//将状态栏设置为白色
        getSupportActionBar().hide();

        ll_exit = findViewById(R.id.ll_exit);
        ll_exit.setOnClickListener(this);
        ll_search = findViewById(R.id.ll_search);
        iv_exit = findViewById(R.id.iv_exit);
        iv_circle = findViewById(R.id.iv_circle);
        et_content = findViewById(R.id.et_content);
        tv_search = findViewById(R.id.tv_search);
        tv_search.setOnClickListener(this);
        ll_search_top = findViewById(R.id.ll_search_top);
        lv_search = findViewById(R.id.lv_search);
        wv_search = findViewById(R.id.wv_search);
        WebSettings settings = wv_search.getSettings();
        settings.setCacheMode(WebSettings.LOAD_NO_CACHE);//设置回退
        settings.setSupportZoom(true);//支持缩放
        settings.setBuiltInZoomControls(true);//出现缩放工具
        settings.setJavaScriptEnabled(true);// 表示webview可以执行服务器端的js代码
        settings.setUserAgentString("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 " +
                "(KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36");
        //自适应屏幕
        settings.setUseWideViewPort(true);
        settings.setLoadWithOverviewMode(true);
        //自动缩放
        settings.setBuiltInZoomControls(true);
        settings.setSupportZoom(true);
        //支持获取手势焦点
        wv_search.requestFocusFromTouch();
        settings.setJavaScriptCanOpenWindowsAutomatically(true);//允许js弹出窗口
        wv_search.addJavascriptInterface(new AndroidAndJs(), "Android");
        wv_search.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                if (url.startsWith("http")){
                    if (!isStart&&isSearch){
                        isStart=true;//阻止加载同时切换状态
                        handler.sendEmptyMessage(2);//开始搜索
                    }
                    if (isStart&&url.startsWith("http://www.ibiquzw.info/search.html?name=")){
                        isStart=false;
                        handler.sendEmptyMessage(4);//返回搜索数据
                    }
                    if (flag==1){//加载简介内容和封面url
                        handler.sendEmptyMessage(6);//设置简介
                    }
                }
            }
        });

    }
    private int now_position;//当前位置
    private int flag;//当前位置
    @Override
    public void setViewSize() {
        SetUiSize.setMarginTopLinear(ll_search,10);
        SetUiSize.setMarginBottomLinear(ll_search,10);
        SetUiSize.setWidthLinear(iv_exit,9);
        SetUiSize.setHeightLinear(iv_exit,16);
        SetUiSize.setMarginHorizontalLinear(iv_exit,25);
        SetUiSize.setMarginVerticalLinear(iv_exit,10);
        SetUiSize.setWidthLinear(iv_circle,19);
        SetUiSize.setHeightLinear(iv_circle,19);
        SetUiSize.setHeightLinear(et_content,34);
        SetUiSize.setTextViewSize(et_content,20);
        SetUiSize.setTextViewSize(tv_search,20);
        SetUiSize.setMarginHorizontalLinear(tv_search,10);
        GradientDrawable drawable = (GradientDrawable) ll_search_top.getBackground();
        int size= (int) (20/SetUiSize.displayWidthDp*SetUiSize.displayWidth);
        //两个参数表示一个角,按照左上角,右上角,右下角,左下角的顺序用两个相同的数据表示
        drawable.setCornerRadii(new float[]{size,size,size,size,size,size,size,size});
    }
    @Override
    public void setData() {
        et_content.setOnEditorActionListener((v, actionId, event) -> {
            if ((actionId == EditorInfo.IME_ACTION_UNSPECIFIED ||
                    actionId == EditorInfo.IME_ACTION_SEARCH) && event != null){
                list.clear();
                handler.sendEmptyMessage(3);//发消息搜索
            }
            return false;
        });
        lv_search.setOnItemClickListener((parent, view, position, id) -> {
//            Intent intent=new Intent(SearchActivity.this,ReadActivity.class);
//            intent.putExtra("url",list.get(position).path);//章节页面
//            intent.putExtra("name",list.get(position).name);//书名
//            intent.putExtra("author",list.get(position).author);//作者
//            intent.putExtra("code","0");//表示是搜索来源
//            intent.putExtra("imagePath",list.get(position).imagePath);//表示图片路径
//            startActivity(intent);
        });
        wv_search.clearCache(true);
        wv_search.loadUrl("http://www.ibiquzw.info/");
    }

    private class Content extends BaseAdapter{
        @Override
        public int getCount() {
            return list.size();
        }
        @Override
        public Object getItem(int position) {
            return list.get(position);
        }
        @Override
        public long getItemId(int position) {
            return position;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Holder holder;
            if (convertView==null){
                convertView=View.inflate(SearchActivity.this,
                        R.layout.item_search,null);
                holder=new Holder();
                holder.iv_search_name= convertView.
                        findViewById(R.id.iv_search_name);
                SetUiSize.setWidthLinear(holder.iv_search_name,95);
                SetUiSize.setHeightLinear(holder.iv_search_name,136);
                SetUiSize.setMarginTopLinear(holder.iv_search_name,20);
                SetUiSize.setMarginHorizontalLinear(holder.iv_search_name,20);
                holder.ll_item_search=convertView.
                        findViewById(R.id.ll_item_search);
                SetUiSize.setMarginTopLinear(holder.ll_item_search,20);
                holder.tv_search_title=convertView.
                        findViewById(R.id.tv_search_title);
                SetUiSize.setTextViewSize(holder.tv_search_title,20);
                SetUiSize.setMarginTopLinear(holder.tv_search_title,5);
                holder.tv_search_author=convertView.
                        findViewById(R.id.tv_search_author);
                SetUiSize.setTextViewSize(holder.tv_search_author,15);
                SetUiSize.setMarginTopLinear(holder.tv_search_author,5);
                holder.tv_search_introduction=convertView.
                        findViewById(R.id.tv_search_introduction);
                SetUiSize.setTextViewSize(holder.tv_search_introduction,15);
                SetUiSize.setMarginTopLinear(holder.tv_search_introduction,10);
                convertView.setTag(holder);
            }else {
                holder= (Holder) convertView.getTag();
            }
            Title title = list.get(position);
            holder.tv_search_title.setText(title.name);//书名
            holder.tv_search_author.setText("作者:"+title.author);//作者
            if (title.refresh){
                if (title.introduction.equals("")){
                    holder.tv_search_introduction.setText("暂无简介");//简介
                }else {
                    holder.tv_search_introduction.setText(title.introduction);//简介
                }
                holder.tv_search_introduction.setVisibility(View.VISIBLE);//显示简介
            }else {
                holder.tv_search_introduction.setVisibility(View.INVISIBLE);//隐藏简介
            }
            if (title.isLoad){
                holder.iv_search_name.setImageBitmap(title.bitmap);//图片
                holder.iv_search_name.setVisibility(View.VISIBLE);//显示图片
            }else {
                holder.iv_search_name.setVisibility(View.INVISIBLE);//隐藏图片
                if (holder.iv_search_name.getDrawable()==null){
                    holder.iv_search_name.setBackgroundResource(R.drawable.empty);
                    holder.iv_search_name.setVisibility(View.VISIBLE);//显示图片
                }
            }
            if (title.isEmpty){
                holder.iv_search_name.setBackgroundResource(R.drawable.empty);
                holder.iv_search_name.setVisibility(View.VISIBLE);//显示图片
            }
            return convertView;
        }
    }
    private class Holder{
        public TextView tv_search_title;
        public TextView tv_search_author;
        public TextView tv_search_introduction;
        public ImageView iv_search_name;
        public LinearLayout ll_item_search;
    }
    private ExecutorService service_constriction = Executors.newFixedThreadPool(4);
    private ExecutorService serviceImg = Executors.newFixedThreadPool(8);
    /**
     * 加载图片数据
     * @param position
     * @param img_url
     */
    private void load_img(int position,String img_url){
        serviceImg.execute(() -> {
            Title title=list.get(position);
            try {
                //加载图片
                URL url = new URL(img_url);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.connect();
                //发请求读取返回的数据并封装为bitmap
                int responseCode = connection.getResponseCode();
                if(responseCode==200) {
                    InputStream is = connection.getInputStream();//图片文件流
                    //将is封装为bitmap
                    Bitmap bitmap = BitmapFactory.decodeStream(is);
                    is.close();
                    if(bitmap!=null) {
                        title.bitmap=bitmap;
                        title.isLoad=true;
                    }else {
                        title.isEmpty=true;
                    }
                    handler.sendEmptyMessage(1);
                }
            } catch (Exception e) {
//                throw new RuntimeException(e);
            }
        });
    }
    private Title title;
    private class AndroidAndJs{
        /**
         * 用于获取百度网盘共享目录数据
         * @param url 当前小说url,已经包含前缀
         * @param name 书名
         * @param author 作者
         */
        @JavascriptInterface
        public void setTitle(String url,String name,String author) {
            title=new Title();
            title.name=name;
            title.path=url;
            title.author=""+author;
            list.add(title);
            if (list.size()==1){
                handler.sendEmptyMessage(0);//直接设置数据
            }
            handler.sendEmptyMessage(1);//更新数据
        }
        /**
         * 接收加载完成的通知,收到该通知就开始加载图片和简介
         */
        @JavascriptInterface
        public void notice() {
            handler.sendEmptyMessage(5);//通知加载简介和封面图片url
        }
        /**
         * 加载简介内容
         */
        @JavascriptInterface
        public void setContent(String introduce) {
            if (list.size()>now_position){
                list.get(now_position).refresh=true;
                list.get(now_position).introduction=""+introduce;
            }
        }
        /**
         * 加载图片url
         */
        @JavascriptInterface
        public void getImg(String url) {
            if (list.size()>now_position){
                list.get(now_position).imagePath=""+url;
                load_img(now_position,url);
                now_position++;
                handler.sendEmptyMessage(1);
                handler.sendEmptyMessage(5);
            }
        }
    }
}</code></pre> 
  <h2>3、效果展示</h2> 
  <p style="text-align:center;"><a href="http://img.e-com-net.com/image/info8/7391a141233a46e8ab40febdac57b588.jpg" target="_blank"><img alt="android中小说信息抓取展示_第1张图片" src="http://img.e-com-net.com/image/info8/7391a141233a46e8ab40febdac57b588.jpg" width="525" height="904" style="border:1px solid black;"></a></p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1759793934495739904"></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">你可能感兴趣的:(android,爬虫,小说阅读)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1884433239314067456.htm"
                           title="requests 模块" target="_blank">requests 模块</a>
                        <span class="text-muted">dme.</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E5%AD%A6%E4%B9%A0dme/1.htm">爬虫学习dme</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>在python中requests模块常用于爬虫本文将会讲述requests常用函数的用法。1.requests.get()/requests.post()1.基本语法#首先导入requests#pipinstallrequestsimportrequests#这里以百度为例url="https://www.baidu.com/"resp=requests.get(url)#requests.pos</div>
                    </li>
                    <li><a href="/article/1884432609660956672.htm"
                           title="Python学习第十天--处理CSV文件和JSON数据" target="_blank">Python学习第十天--处理CSV文件和JSON数据</a>
                        <span class="text-muted">無量空所</span>
<a class="tag" taget="_blank" href="/search/python%E5%AD%A6%E4%B9%A0/1.htm">python学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>CSV:简化的电子表格,被保存为纯文本文件JSON:是一种数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,以JavaScript源代码的形式将信息保存在纯文本文件中一、csv模块CSV文件中的每行代表电子表格中的一行,逗号分隔了该行中的单元格。但并非CSV文件中的每个逗号都表示两个单元格之间的分界。CSV文件也有自己的转义字符,允许逗号和其他字符作为值的一部分。所以总是应该使用csv模块</div>
                    </li>
                    <li><a href="/article/1884418603072155648.htm"
                           title="flutter开发工程师面试(偏android)" target="_blank">flutter开发工程师面试(偏android)</a>
                        <span class="text-muted">孤独的跑者2024</span>
<a class="tag" taget="_blank" href="/search/flutter%E5%B7%A5%E4%BD%9C%E7%AC%94%E5%BD%95/1.htm">flutter工作笔录</a>
                        <div>android:点击桌面APP的图片,APP是如何启动的,谈谈APP启动流程及优化说说常见的性能优化(启动优化、卡顿优化、耗电优化、网络优化等等)android是单线程还是多线程线程通信多进程通信方式android图形绘制机制说说你对MVC、MVP、MVVM的理解android事件分发机制android消息机制android如何自定义控件Activity生命周期说下Activity的四种启动模式、</div>
                    </li>
                    <li><a href="/article/1884415705122664448.htm"
                           title="Qwen-VL论文解读" target="_blank">Qwen-VL论文解读</a>
                        <span class="text-muted">dream_home8407</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>Qwen-VL:用于理解、定位、文本阅读等的通用视觉-语言模型摘要在本文中,我们介绍了Qwen-VL系列,这是一组大规模的视觉-语言模型(LVLMs),旨在感知和理解文本和图像。从Qwen-LM开始,我们通过精心设计的(i)视觉受体,(ii)输入-输出接口,(iii)3阶段训练管道,以及(iv)多语言多模态清洗语料库,赋予其视觉能力。除了传统的图像描述和问答,我们还通过图像-标题-框元组的对齐实现</div>
                    </li>
                    <li><a href="/article/1884412680329031680.htm"
                           title="python爬虫框架Scrapy简介" target="_blank">python爬虫框架Scrapy简介</a>
                        <span class="text-muted">码农~明哥</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a>
                        <div>当你写了很多个爬虫程序之后,你会发现每次写爬虫程序时,都需要将页面获取、页面解析、爬虫调度、异常处理、反爬应对这些代码从头至尾实现一遍,这里面有很多工作其实都是简单乏味的重复劳动。那么,有没有什么办法可以提升我们编写爬虫代码的效率呢?答案是肯定的,那就是利用爬虫框架,而在所有的爬虫框架中,Scrapy应该是最流行、最强大的框架。Scrapy概述Scrapy是基于Python的一个非常流行的网络爬虫</div>
                    </li>
                    <li><a href="/article/1884411540266872832.htm"
                           title="flutter面试题及答案,Android架构师必备框架技能核心笔记" target="_blank">flutter面试题及答案,Android架构师必备框架技能核心笔记</a>
                        <span class="text-muted">2401_84415652</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/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>常规电话面试1JAVA基础思想:设计模式与面向对象2安卓View绘制流程3常规的组件问题4事件分发机制5多线程和安全问题6安卓性能优化和兼容问题:性能优化回答具体面试1线程池原理2线程安全有多少种实现方式3图片加载框架原理4Http协议原理5Okhttp原理6各种内存优化7垃圾回收机制原理8谈谈对同步请求和异步请求的理解9怎么保证同步和异步10Intentservise,底层原理实现11Handl</div>
                    </li>
                    <li><a href="/article/1884403971267817472.htm"
                           title="【Python学习】网络爬虫-获取京东商品评论并制作柱状图" target="_blank">【Python学习】网络爬虫-获取京东商品评论并制作柱状图</a>
                        <span class="text-muted">西攻城狮北</span>
<a class="tag" taget="_blank" href="/search/Python%E5%AE%9E%E7%94%A8%E6%A1%88%E4%BE%8B/1.htm">Python实用案例</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E4%BA%AC%E4%B8%9C/1.htm">京东</a><a class="tag" taget="_blank" href="/search/%E8%AF%84%E8%AE%BA/1.htm">评论</a><a class="tag" taget="_blank" href="/search/%E6%9F%B1%E7%8A%B6%E5%9B%BE/1.htm">柱状图</a>
                        <div>一、实现目标获取京东网站上商品的评论统计数据,并使用该数据制作了一个简单的柱状图。二、实现步骤2.1网页分析首先打开链接https://www.jd.com/。在搜索框中输入巧克力关键词后,点击第一件商品打开商品网页,找到商品评价,在商品评价模块能够看到用户选择的评论标签。由于该商品的全部用户评论有50万+,数据量较大。我们需要收集商品特点,所以我们选择对评价标签进行分析。打开https://it</div>
                    </li>
                    <li><a href="/article/1884402330300903424.htm"
                           title="爬虫实战--- (6)链家房源数据爬取与分析可视化" target="_blank">爬虫实战--- (6)链家房源数据爬取与分析可视化</a>
                        <span class="text-muted">rain雨雨编程</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E5%AE%9E%E6%88%98%E7%B3%BB%E5%88%97/1.htm">爬虫实战系列</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                        <div>文章持续跟新,可以微信搜一搜公众号[rain雨雨编程],第一时间阅读,涉及数据分析,机器学习,Java编程,爬虫,实战项目等。目录前言1.爬取目标2.所涉及知识点3.步骤分析(穿插代码讲解)步骤一:发送请求步骤二:获取数据步骤三:解析数据步骤四:保存数据4.爬取结果5.完整代码6数据可视化前言今天我将为大家分享一个非常实用的Python项目——链家房源数据的爬取与分析可视化。在这篇文章中,我们将分</div>
                    </li>
                    <li><a href="/article/1884398041360822272.htm"
                           title="clean code阅读笔记——如何命名?" target="_blank">clean code阅读笔记——如何命名?</a>
                        <span class="text-muted">HilariousDog</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E8%B4%A8%E9%87%8F/1.htm">代码质量</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a>
                        <div>命名的原则1.“小处诚实非小事“有个词叫做”以小见大“。以建筑作喻,宏大建筑中最细小的部分,比如关不紧的门、未铺平的地板,甚至时凌乱的桌面,都会将整个大局的魅力毁灭殆尽,这就是整洁代码之所系。2.有意义的命名选个好名字,省下来的时间比花掉的多。一旦发现有更好的名字,就换掉旧的名字。2.1名副其实变量、函数和类的名字应该告诉读者:它为什么存在、它做什么事、它应该怎么用。如果名称需要注释来补充,那就不</div>
                    </li>
                    <li><a href="/article/1884387063063703552.htm"
                           title="【Innodb阅读笔记】之 二进制文件" target="_blank">【Innodb阅读笔记】之 二进制文件</a>
                        <span class="text-muted">꧁瀟洒辵1恛꧂</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>一、什么是二进制文件二进制文件记录了对mySQL数据库执行修改的所有操作,不包括select和show这类操作,因为这类操作对数据库本身没有修改。但是,当执行修改操作,数据库没有发生变化,这类操作也会写入二进制文件中。通过配置参数log-bin开启二进制日志。如:#配置文件写入开启二进制指定文件名称为:mysql-bin#log-bin#不指定名称默认使用主机名log-bin=mysql-bin#</div>
                    </li>
                    <li><a href="/article/1884380759280644096.htm"
                           title="知网爬虫,作者、摘要、题目、发表期刊等主要内容的获取" target="_blank">知网爬虫,作者、摘要、题目、发表期刊等主要内容的获取</a>
                        <span class="text-muted">大懒猫软件</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>爬取知网内容的详细过程爬取知网内容需要考虑多个因素,包括网站的结构、反爬虫机制等。以下是一个详细的步骤和代码实现,帮助你使用Python爬取知网上的论文信息,包括作者、摘要、题目、发表期刊等主要内容。1.数据准备首先,需要准备一些基础数据,如知网的URL、请求头等。2.模型构建使用requests库发送HTTP请求,使用BeautifulSoup库解析HTML内容。如果遇到动态加载的内容,可以使用</div>
                    </li>
                    <li><a href="/article/1884359445119561728.htm"
                           title="java爬虫jsoup_Java爬虫框架Jsoup学习记录" target="_blank">java爬虫jsoup_Java爬虫框架Jsoup学习记录</a>
                        <span class="text-muted">weixin_33638349</span>

                        <div>Jsoup的作用当你想获得某网页的内容,可以使用此框架做个爬虫程序,爬某图片网站的图片(先获得图片地址,之后再借助其他工具下载图片)或者是小说网站的小说内容我使用Jsoup写出的一款小说下载器,小说下载器Jsoup导入1.使用gradle导入compile'org.jsoup:jsoup:1.11.1'2.第三方包导入Jsoup使用1.获得Document本地html文件或者使用javaIO流,则</div>
                    </li>
                    <li><a href="/article/1884355152291360768.htm"
                           title="python爬虫之bs4解析和xpath解析" target="_blank">python爬虫之bs4解析和xpath解析</a>
                        <span class="text-muted">A.way30</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/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/xpath/1.htm">xpath</a>
                        <div>bs4解析原理:1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中2.通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取如何实例化BeautifulSoup对象:frombs4importBeautifulSoupBeautifulSoup(参数一,参数二)参数一为文件描述符,参数二为解析器,一般为’lxml’一对象的实例化:1.将本地的h</div>
                    </li>
                    <li><a href="/article/1884354647011946496.htm"
                           title="Java简单爬虫 jsoup工具包" target="_blank">Java简单爬虫 jsoup工具包</a>
                        <span class="text-muted">ax阿楠</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/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/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>首先导入一个爬虫的工具包:jsoup-1.13.1.jar//测试爬虫的网址(爬取王者荣耀英雄的网址)staticStringurl="https://pvp.qq.com/web201605/herolist.shtml";//文件存放的地址staticStringpath="D://爬虫测试/";publicstaticvoidgetImgs(Stringurl){//加载对应网址上的Html</div>
                    </li>
                    <li><a href="/article/1884348589359034368.htm"
                           title="Python网页爬虫爬取豆瓣Top250电影数据——Xpath数据解析_爬虫电影(1)" target="_blank">Python网页爬虫爬取豆瓣Top250电影数据——Xpath数据解析_爬虫电影(1)</a>
                        <span class="text-muted">2401_84009626</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/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/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>2.3.2通过xpath方法按层级查找数据定位好之后,我们就可以用etree对象的xpath方法解析xpath表达式,查找到相应的数据。定位到电影的标题所在标签,右键复制它的xpath://\*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]中文标题就在a标签下的第1个span标签中span[1],然后我们通过/text</div>
                    </li>
                    <li><a href="/article/1884348591519100928.htm"
                           title="Python网页爬虫爬取豆瓣Top250电影数据——Xpath数据解析_爬虫电影" target="_blank">Python网页爬虫爬取豆瓣Top250电影数据——Xpath数据解析_爬虫电影</a>
                        <span class="text-muted">2401_84009698</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/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/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>#获取中文电影标题title_cn=data.xpath('//\*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')而在a标签下的第二个span标签中包含的文本内容是电影的英文标题,所以我们只需要将span[1]改成span[2]就可以获取到电影的英文标题。#获取英文电影标题title_en=data.</div>
                    </li>
                    <li><a href="/article/1884346322304167936.htm"
                           title="java爬虫工具Jsoup学习" target="_blank">java爬虫工具Jsoup学习</a>
                        <span class="text-muted">Future_yzx</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>目录前言一、基本使用二、爬取豆瓣电影的案例三、Jsoup能做什么?四、Jsoup相关概念五、Jsoup获取文档六、定位选择元素七、获取数据八、具体案例前言JSoup是一个用于处理HTML的Java库,它提供了一个非常方便类似于使用DOM,CSS和jquery的方法的API来提取和操作数据。一、基本使用org.jsoupjsoup1.13.1二、爬取豆瓣电影的案例publicclassDouBan{</div>
                    </li>
                    <li><a href="/article/1884340392938237952.htm"
                           title="python中append函数什么意思_在python中append()函数的作用是什么" target="_blank">python中append函数什么意思_在python中append()函数的作用是什么</a>
                        <span class="text-muted">魔都财观</span>

                        <div>在python中append()函数的作用是什么发布时间:2020-07-1014:07:51来源:亿速云阅读:103作者:清晨这篇文章将为大家详细讲解有关在python中append()函数的作用是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python中的append()方法用于在列表末尾添加新的对象。append()方法语法:list.append(</div>
                    </li>
                    <li><a href="/article/1884334971905175552.htm"
                           title="【外文原版书阅读】《机器学习前置知识》1.线性代数的重要性,初识向量以及向量加法" target="_blank">【外文原版书阅读】《机器学习前置知识》1.线性代数的重要性,初识向量以及向量加法</a>
                        <span class="text-muted">Icomi_</span>
<a class="tag" taget="_blank" href="/search/807.%E3%80%8A%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%89%8D%E7%BD%AE%E7%9F%A5%E8%AF%86%E3%80%8B/1.htm">807.《机器学习前置知识》</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%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><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>目录编辑编辑1.Chapter2WhyLinearAlgebra?2.Chapter3WhatIsaVector?个人主页:Icomi大家好,我是Icomi,本专栏是我阅读外文原版书《BeforeMachineLearning》对于文章中我认为能够增进线性代数与机器学习之间的理解的内容的一个输出,希望能够帮助到各位更加深刻的理解线性代数与机器学习。若各位对本系列内容感兴趣,可以给我点个关注跟进内容</div>
                    </li>
                    <li><a href="/article/1884315042376118272.htm"
                           title="数字钱包:合法还是违法?" target="_blank">数字钱包:合法还是违法?</a>
                        <span class="text-muted">fofee2020</span>
<a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a>
                        <div>⚠️在开篇就跟大家说一下,以免有没有耐心阅读完全篇的伙伴断章取义,造成误解。数字钱包本身并不违法,就是用来存储和管理数字货币的工具。数字钱包是一种数字资产管理工具,可以用于存储、发送和接收数字货币,但是在使用数字钱包时需要注意以下几点:首先,需要遵守反洗钱法律法规。数字钱包可以被用于非法活动,如洗钱、走私等,因此需要遵守反洗钱法律法规,如实名制、KYC等。其次,需要遵守税收法律法规。数字货币的交易</div>
                    </li>
                    <li><a href="/article/1884310252959100928.htm"
                           title="[译]Flutter用WebView插件webview_flutter" target="_blank">[译]Flutter用WebView插件webview_flutter</a>
                        <span class="text-muted">Web_boom</span>
<a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/framework/1.htm">framework</a><a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/webview/1.htm">webview</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                        <div>本文翻译自pub:webview_flutter|FlutterPackage(flutter-io.cn)译时版本:webview_flutter3.0.0用于Flutter的WebView提供WebView组件的Flutter插件。在iOS上WebView组件基于WKWebView;在Android上WebView组件基于WebView。用法添加webview_flutter依赖到pubspe</div>
                    </li>
                    <li><a href="/article/1884305830841479168.htm"
                           title="安卓(Android)平台上的MVVM架构:关键知识点、优劣分析及实践示例" target="_blank">安卓(Android)平台上的MVVM架构:关键知识点、优劣分析及实践示例</a>
                        <span class="text-muted">洪信智能</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%8D%93%E5%BC%80%E5%8F%91/1.htm">安卓开发</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>摘要本文旨在探讨安卓平台上广泛应用的Model-View-ViewModel(MVVM)架构模式的核心概念、主要优点与潜在不足,并通过实际示例代码阐明其在实际项目中的应用方式。MVVM作为一款推动关注点分离和提高软件质量的架构方案,在安卓应用开发中起着至关重要的作用。一、安卓MVVM架构核心知识点1.1、架构组成1.1.1、Model层承载业务逻辑与数据实体,独立于UI并与ViewModel进行交</div>
                    </li>
                    <li><a href="/article/1884305198051028992.htm"
                           title="android mvvm框架搭建_轻松搭建基于JetPack组件的MVVM框架" target="_blank">android mvvm框架搭建_轻松搭建基于JetPack组件的MVVM框架</a>
                        <span class="text-muted">weixin_39962285</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/mvvm%E6%A1%86%E6%9E%B6%E6%90%AD%E5%BB%BA/1.htm">mvvm框架搭建</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/studio/1.htm">studio</a><a class="tag" taget="_blank" href="/search/mvvm%E6%A8%A1%E6%9D%BF%E7%94%9F%E6%88%90/1.htm">mvvm模板生成</a><a class="tag" taget="_blank" href="/search/javassm%E6%A1%86%E6%9E%B6%E9%A1%B9%E7%9B%AE%E5%AE%9E%E4%BE%8B/1.htm">javassm框架项目实例</a>
                        <div>原文链接:轻松搭建基于JetPack组件的MVVM框架-掘金Brickgithubgitee介绍辅助android开发者搭建基于JetPack组件构建MVVM框架的注解处理框架。通过注解自动生成ViewModel的Factory类、lazy方法等;支持在项目的任意位置注入ROOM的dao层接口与Retrofit库中的api接口。特点android开发者可以将brick理解为一个轻量级的注入框架,使</div>
                    </li>
                    <li><a href="/article/1884302922494308352.htm"
                           title="Android架构组件中的MVVM" target="_blank">Android架构组件中的MVVM</a>
                        <span class="text-muted">小村学长毕业设计</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>Android架构组件中的MVVM(Model-View-ViewModel)模式是一种广泛应用的设计模式,它通过将应用程序分为三个主要部分(Model、View、ViewModel)来分离用户界面和业务逻辑,从而提高代码的可维护性、可扩展性和可测试性。下面将详细介绍MVVM模式在Android开发中的实战应用,包括基本概念、实现步骤、优势以及一个实际案例。一、MVVM模式基本概念MVVM是Mod</div>
                    </li>
                    <li><a href="/article/1884296116665643008.htm"
                           title=".NET MAUI 教程:入门与配置" target="_blank">.NET MAUI 教程:入门与配置</a>
                        <span class="text-muted">束慧可Melville</span>

                        <div>.NETMAUI教程:入门与配置项目地址:https://gitcode.com/gh_mirrors/ma/maui1.项目的目录结构及介绍在.NETMulti-platformAppUI(简称.NETMAUI)项目中,目录结构通常如下:YourProject/├──Android/│└──...//Android平台相关的代码和资源├──iOS/│└──...//iOS平台相关的代码和资源├─</div>
                    </li>
                    <li><a href="/article/1884294980609044480.htm"
                           title="创建MAUI .NET 应用程序的详细教程" target="_blank">创建MAUI .NET 应用程序的详细教程</a>
                        <span class="text-muted">Tnp____</span>
<a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/.NET/1.htm">.NET</a>
                        <div>MAUI(多平台应用程序用户界面)是一个用于创建跨平台应用程序的开发框架。它是基于.NET平台的最新技术,可以让开发人员使用一个共享的代码库构建并运行在多个操作系统上的应用程序,如Android、iOS、Windows等。本文将详细介绍如何创建一个基于MAUI.NET的应用程序,并提供相应的源代码。步骤1:安装开发环境和工具首先,确保你的系统中已经安装了以下工具:.NET6SDK:前往Micros</div>
                    </li>
                    <li><a href="/article/1884291952271224832.htm"
                           title="MyMvvmMaster:Android应用开发的MVVM架构解决方案" target="_blank">MyMvvmMaster:Android应用开发的MVVM架构解决方案</a>
                        <span class="text-muted">不胖的羊</span>

                        <div>本文还有配套的精品资源,点击获取简介:MyMvvmMaster.zip是一个集成MVVM架构、RxJava2、Retrofit和ARouter的Android应用框架压缩包,旨在简化开发流程,增强代码的可读性和可维护性。本框架通过DataBinding库实现数据和UI的双向绑定,利用RxJava2优化异步编程,Retrofit简化网络请求处理,ARouter管理模块间路由,从而提供一个高效、模块化</div>
                    </li>
                    <li><a href="/article/1884287161369423872.htm"
                           title="linux监听tcp端口数据包,linux tcpdump抓包" target="_blank">linux监听tcp端口数据包,linux tcpdump抓包</a>
                        <span class="text-muted">weixin_39615741</span>
<a class="tag" taget="_blank" href="/search/linux%E7%9B%91%E5%90%ACtcp%E7%AB%AF%E5%8F%A3%E6%95%B0%E6%8D%AE%E5%8C%85/1.htm">linux监听tcp端口数据包</a>
                        <div>8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?tcpdump是在命令行下运行的常用数据包分析器。它允许用户显示通过计算机所连接的网络传输或接收的TCP/IP和其他数据包。根据BSD许可分发,tcpdump是免费软件。tcpdump适用于大多数类Unix操作系统:Linux,Solaris,BSD,macOS,HP-UX,Android和AIX等。在这些系统中,tcpd</div>
                    </li>
                    <li><a href="/article/1884277194780372992.htm"
                           title="python、JAVA等多种语言演示免费获取股票数据(实时数据、历史数据、CDMA、KDJ等指标数据)配有股票数据API接口说明文档说明" target="_blank">python、JAVA等多种语言演示免费获取股票数据(实时数据、历史数据、CDMA、KDJ等指标数据)配有股票数据API接口说明文档说明</a>
                        <span class="text-muted">Eumenides_max</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><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/%E8%82%A1%E7%A5%A8API%E6%8E%A5%E5%8F%A3/1.htm">股票API接口</a><a class="tag" taget="_blank" href="/search/%E8%82%A1%E7%A5%A8%E6%95%B0%E6%8D%AE%E6%8E%A5%E5%8F%A3/1.htm">股票数据接口</a>
                        <div>近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据中挖掘出有价值的信息,为我们的投资策略提供有力的支持。在寻找数据的过程中,我尝试了多种途径,包括自编网易股票页面爬虫、申万行业数据爬虫,以及同花</div>
                    </li>
                    <li><a href="/article/1884271270619574272.htm"
                           title="MacOS系统搭建Appium自动化测试环境" target="_blank">MacOS系统搭建Appium自动化测试环境</a>
                        <span class="text-muted">xiangzhihong8</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/macos/1.htm">macos</a><a class="tag" taget="_blank" href="/search/appium/1.htm">appium</a>
                        <div>一、Appium简介1.1什么是APPiumAPPium是一个开源测试自动化框架,适用于原生、混合或移动Web应用程序的自动化测试工具。APPium使用WebDriver协议驱动iOS、Android等应用程序。APPium具有如下特点:支持多平台(Android、iOS等)。支持多语言(python、java、ruby、js、c#等)。APPium是跨平台的,可以用在OSX,Windows以及L</div>
                    </li>
                                <li><a href="/article/3.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/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a>
                                    <div>首先从使用enum实现单例说起。 
 
为什么要用enum来实现单例? 
这篇文章( 
http://javarevisited.blogspot.sg/2012/07/why-enum-singleton-are-better-in-java.html)阐述了三个理由: 
1.enum单例简单、容易,只需几行代码: 
 

public enum Singleton {
	INSTANCE;</div>
                                </li>
                                <li><a href="/article/130.htm"
                                       title="CMake 教程" target="_blank">CMake 教程</a>
                                    <span class="text-muted">aigo</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a>
                                    <div>转自:http://xiang.lf.blog.163.com/blog/static/127733322201481114456136/ 
  
CMake是一个跨平台的程序构建工具,比如起自己编写Makefile方便很多。 
介绍:http://baike.baidu.com/view/1126160.htm 
本文件不介绍CMake的基本语法,下面是篇不错的入门教程: 
http:</div>
                                </li>
                                <li><a href="/article/257.htm"
                                       title="cvc-complex-type.2.3: Element 'beans' cannot have character" target="_blank">cvc-complex-type.2.3: Element 'beans' cannot have character</a>
                                    <span class="text-muted">Cb123456</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Webgis/1.htm">Webgis</a>
                                    <div>  cvc-complex-type.2.3: Element 'beans' cannot have character 
    Line 33 in XML document from ServletContext resource [/WEB-INF/backend-servlet.xml] is i</div>
                                </li>
                                <li><a href="/article/384.htm"
                                       title="jquery实例:随页面滚动条滚动而自动加载内容" target="_blank">jquery实例:随页面滚动条滚动而自动加载内容</a>
                                    <span class="text-muted">120153216</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a>
                                    <div><script language="javascript">
$(function (){
	var i = 4;$(window).bind("scroll", function (event){
		//滚动条到网页头部的 高度,兼容ie,ff,chrome
		var top = document.documentElement.s</div>
                                </li>
                                <li><a href="/article/511.htm"
                                       title="将数据库中的数据转换成dbs文件" target="_blank">将数据库中的数据转换成dbs文件</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/dbs/1.htm">dbs</a>
                                    <div>旗正规则引擎通过数据库配置器(DataBuilder)来管理数据库,无论是Oracle,还是其他主流的数据都支持,操作方式是一样的。旗正规则引擎的数据库配置器是用于编辑数据库结构信息以及管理数据库表数据,并且可以执行SQL 语句,主要功能如下。 
1)数据库生成表结构信息: 
        主要生成数据库配置文件(.conf文</div>
                                </li>
                                <li><a href="/article/638.htm"
                                       title="在IBATIS中配置SQL语句的IN方式" target="_blank">在IBATIS中配置SQL语句的IN方式</a>
                                    <span class="text-muted">357029540</span>
<a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a>
                                    <div>在使用IBATIS进行SQL语句配置查询时,我们一定会遇到通过IN查询的地方,在使用IN查询时我们可以有两种方式进行配置参数:String和List。具体使用方式如下: 
 
1.String:定义一个String的参数userIds,把这个参数传入IBATIS的sql配置文件,sql语句就可以这样写: 
 
 
 
<select id="getForms" param</div>
                                </li>
                                <li><a href="/article/765.htm"
                                       title="Spring3 MVC 笔记(一)" target="_blank">Spring3 MVC 笔记(一)</a>
                                    <span class="text-muted">7454103</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/JSF/1.htm">JSF</a>
                                    <div>    
     自从 MVC 这个概念提出来之后 struts1.X  struts2.X   jsf 。。。。。 
这个view 层的技术一个接一个! 都用过!不敢说哪个绝对的强悍! 
要看业务,和整体的设计! 
 
     最近公司要求开发个新系统!</div>
                                </li>
                                <li><a href="/article/892.htm"
                                       title="Timer与Spring Quartz 定时执行程序" target="_blank">Timer与Spring Quartz 定时执行程序</a>
                                    <span class="text-muted">darkranger</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a>
                                    <div>有时候需要定时触发某一项任务。其实在jdk1.3,java sdk就通过java.util.Timer提供相应的功能。一个简单的例子说明如何使用,很简单: 1、第一步,我们需要建立一项任务,我们的任务需要继承java.util.TimerTask package com.test; import java.text.SimpleDateFormat; import java.util.Date; </div>
                                </li>
                                <li><a href="/article/1019.htm"
                                       title="大端小端转换,le32_to_cpu 和cpu_to_le32" target="_blank">大端小端转换,le32_to_cpu 和cpu_to_le32</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80%E7%9B%B8%E5%85%B3/1.htm">C语言相关</a>
                                    <div>大端小端转换,le32_to_cpu 和cpu_to_le32   字节序  
http://oss.org.cn/kernel-book/ldd3/ch11s04.html 
        小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高级的平台以另一种方式(大端)</div>
                                </li>
                                <li><a href="/article/1146.htm"
                                       title="Nginx负载均衡配置实例详解" target="_blank">Nginx负载均衡配置实例详解</a>
                                    <span class="text-muted">avords</span>

                                    <div>[导读] 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。负载均衡先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解  负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。 
负载均衡 
先来简单了解一下什么是负载均衡</div>
                                </li>
                                <li><a href="/article/1273.htm"
                                       title="乱说的" target="_blank">乱说的</a>
                                    <span class="text-muted">houxinyou</span>
<a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91/1.htm">敏捷开发</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a>
                                    <div>从很久以前,大家就研究框架,开发方法,软件工程,好多!反正我是搞不明白!   
这两天看好多人研究敏捷模型,瀑布模型!也没太搞明白.    
不过感觉和程序开发语言差不多,   
瀑布就是顺序,敏捷就是循环.    
瀑布就是需求、分析、设计、编码、测试一步一步走下来。而敏捷就是按摸块或者说迭代做个循环,第个循环中也一样是需求、分析、设计、编码、测试一步一步走下来。   
  
也可以把软件开发理</div>
                                </li>
                                <li><a href="/article/1400.htm"
                                       title="欣赏的价值——一个小故事" target="_blank">欣赏的价值——一个小故事</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%89%E6%95%88%E8%BE%85%E5%AF%BC/1.htm">有效辅导</a><a class="tag" taget="_blank" href="/search/%E6%AC%A3%E8%B5%8F/1.htm">欣赏</a><a class="tag" taget="_blank" href="/search/%E6%AC%A3%E8%B5%8F%E7%9A%84%E4%BB%B7%E5%80%BC/1.htm">欣赏的价值</a>
                                    <div>  第一次参加家长会,幼儿园的老师说:"您的儿子有多动症,在板凳上连三分钟都坐不了,你最好带他去医院看一看。"  回家的路上,儿子问她老师都说了些什么,她鼻子一酸,差点流下泪来。因为全班30位小朋友,惟有他表现最差;惟有对他,老师表现出不屑,然而她还在告诉她的儿子:"老师表扬你了,说宝宝原来在板凳上坐不了一分钟,现在能坐三分钟。其他妈妈都非常羡慕妈妈,因为全班只有宝宝</div>
                                </li>
                                <li><a href="/article/1527.htm"
                                       title="包冲突问题的解决方法" target="_blank">包冲突问题的解决方法</a>
                                    <span class="text-muted">bingyingao</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><a class="tag" taget="_blank" href="/search/exclusions/1.htm">exclusions</a><a class="tag" taget="_blank" href="/search/%E5%8C%85%E5%86%B2%E7%AA%81/1.htm">包冲突</a>
                                    <div>包冲突是开发过程中很常见的问题: 
其表现有: 
1.明明在eclipse中能够索引到某个类,运行时却报出找不到类。 
2.明明在eclipse中能够索引到某个类的方法,运行时却报出找不到方法。 
3.类及方法都有,以正确编译成了.class文件,在本机跑的好好的,发到测试或者正式环境就 
抛如下异常: 
 
java.lang.NoClassDefFoundError: Could not in</div>
                                </li>
                                <li><a href="/article/1654.htm"
                                       title="【Spark七十五】Spark Streaming整合Flume-NG三之接入log4j" target="_blank">【Spark七十五】Spark Streaming整合Flume-NG三之接入log4j</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Stream/1.htm">Stream</a>
                                    <div>先来一段废话: 
实际工作中,业务系统的日志基本上是使用Log4j写入到日志文件中的,问题的关键之处在于业务日志的格式混乱,这给对日志文件中的日志进行统计分析带来了极大的困难,或者说,基本上无法进行分析,每个人写日志的习惯不同,导致日志行的格式五花八门,最后只能通过grep来查找特定的关键词缩小范围,但是在集群环境下,每个机器去grep一遍,分析一遍,这个效率如何可想之二,大好光阴都浪费在这上面了</div>
                                </li>
                                <li><a href="/article/1781.htm"
                                       title="sudoku solver in Haskell" target="_blank">sudoku solver in Haskell</a>
                                    <span class="text-muted">bookjovi</span>
<a class="tag" taget="_blank" href="/search/sudoku/1.htm">sudoku</a><a class="tag" taget="_blank" href="/search/haskell/1.htm">haskell</a>
                                    <div>这几天没太多的事做,想着用函数式语言来写点实用的程序,像fib和prime之类的就不想提了(就一行代码的事),写什么程序呢?在网上闲逛时发现sudoku游戏,sudoku十几年前就知道了,学生生涯时也想过用C/Java来实现个智能求解,但到最后往往没写成,主要是用C/Java写的话会很麻烦。 
  
现在写程序,本人总是有一种思维惯性,总是想把程序写的更紧凑,更精致,代码行数最少,所以现</div>
                                </li>
                                <li><a href="/article/1908.htm"
                                       title="java apache ftpClient" target="_blank">java apache ftpClient</a>
                                    <span class="text-muted">bro_feng</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>最近使用apache的ftpclient插件实现ftp下载,遇见几个问题,做如下总结。 
1. 上传阻塞,一连串的上传,其中一个就阻塞了,或是用storeFile上传时返回false。查了点资料,说是FTP有主动模式和被动模式。将传出模式修改为被动模式ftp.enterLocalPassiveMode();然后就好了。 
 
看了网上相关介绍,对主动模式和被动模式区别还是比较的模糊,不太了解被动模</div>
                                </li>
                                <li><a href="/article/2035.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/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ 
 
 
 
 


package design.pattern;

/*
 * 工厂方法模式:使一个类的实例化延迟到子类
 * 某次,我在工作不知不觉中就用到了工厂方法模式(称为模板方法模式更恰当。2012-10-29):
 * 有很多不同的产品,它</div>
                                </li>
                                <li><a href="/article/2162.htm"
                                       title="面试记录语" target="_blank">面试记录语</a>
                                    <span class="text-muted">chenyu19891124</span>
<a class="tag" taget="_blank" href="/search/%E6%8B%9B%E8%81%98/1.htm">招聘</a>
                                    <div>或许真的在一个平台上成长成什么样,都必须靠自己去努力。有了好的平台让自己展示,就该好好努力。今天是自己单独一次去面试别人,感觉有点小紧张,说话有点打结。在面试完后写面试情况表,下笔真的好难,尤其是要对面试人的情况说明真的好难。 
今天面试的是自己同事的同事,现在的这个同事要离职了,介绍了我现在这位同事以前的同事来面试。今天这位求职者面试的是配置管理,期初看了简历觉得应该很适合做配置管理,但是今天面</div>
                                </li>
                                <li><a href="/article/2289.htm"
                                       title="Fire Workflow 1.0正式版终于发布了" target="_blank">Fire Workflow 1.0正式版终于发布了</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/workflow/1.htm">workflow</a><a class="tag" taget="_blank" href="/search/Google/1.htm">Google</a>
                                    <div>Fire Workflow 是国内另外一款开源工作流,作者是著名的非也同志,哈哈.... 
 官方网站是 http://www.fireflow.org 
 
 经过大家努力,Fire Workflow 1.0正式版终于发布了 
 
 正式版主要变化: 
1、增加IWorkItem.jumpToEx(...)方法,取消了当前环节和目标环节必须在同一条执行线的限制,使得自由流更加自由 
2、增加IT</div>
                                </li>
                                <li><a href="/article/2416.htm"
                                       title="Python向脚本传参" target="_blank">Python向脚本传参</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a><a class="tag" taget="_blank" href="/search/%E4%BC%A0%E5%8F%82/1.htm">传参</a>
                                    <div>如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢? 
需要模块:sys 
参数个数:len(sys.argv) 
脚本名:    sys.argv[0] 
参数1:     sys.argv[1] 
参数2:     sys.argv[</div>
                                </li>
                                <li><a href="/article/2543.htm"
                                       title="管理用户分组的命令gpasswd" target="_blank">管理用户分组的命令gpasswd</a>
                                    <span class="text-muted">dongwei_6688</span>
<a class="tag" taget="_blank" href="/search/passwd/1.htm">passwd</a>
                                    <div>NAME:  gpasswd - administer the /etc/group file 
SYNOPSIS: 
 gpasswd group 
 gpasswd -a user group 
 gpasswd -d user group 
 gpasswd -R group 
 gpasswd -r group 
 gpasswd [-A user,...] [-M user,...] g</div>
                                </li>
                                <li><a href="/article/2670.htm"
                                       title="郝斌老师数据结构课程笔记" target="_blank">郝斌老师数据结构课程笔记</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.htm">数据结构与算法</a>
                                    <div><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</div>
                                </li>
                                <li><a href="/article/2797.htm"
                                       title="yii2 cgridview加上选择框进行操作" target="_blank">yii2 cgridview加上选择框进行操作</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/GridView/1.htm">GridView</a>
                                    <div>页面代码
<?=Html::beginForm(['controller/bulk'],'post');?>
<?=Html::dropDownList('action','',[''=>'Mark selected as: ','c'=>'Confirmed','nc'=>'No Confirmed'],['class'=>'dropdown',])</div>
                                </li>
                                <li><a href="/article/2924.htm"
                                       title="linux mysql" target="_blank">linux mysql</a>
                                    <span class="text-muted">fypop</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>enquiry mysql version in centos linux 
yum list installed | grep mysql 
yum -y remove mysql-libs.x86_64 
enquiry mysql version in yum repositoryyum list | grep mysql oryum -y list mysql* 
install mysq</div>
                                </li>
                                <li><a href="/article/3051.htm"
                                       title="Scramble String" target="_blank">Scramble String</a>
                                    <span class="text-muted">hcx2013</span>
<a class="tag" taget="_blank" href="/search/String/1.htm">String</a>
                                    <div>Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively. 
Below is one possible representation of s1 = "great":</div>
                                </li>
                                <li><a href="/article/3178.htm"
                                       title="跟我学Shiro目录贴" target="_blank">跟我学Shiro目录贴</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/%E8%B7%9F%E6%88%91%E5%AD%A6shiro/1.htm">跟我学shiro</a>
                                    <div>历经三个月左右时间,《跟我学Shiro》系列教程已经完结,暂时没有需要补充的内容,因此生成PDF版供大家下载。最近项目比较紧,没有时间解答一些疑问,暂时无法回复一些问题,很抱歉,不过可以加群(334194438/348194195)一起讨论问题。 
  
  
----广告-----------------------------------------------------</div>
                                </li>
                                <li><a href="/article/3305.htm"
                                       title="nginx日志切割并使用flume-ng收集日志" target="_blank">nginx日志切割并使用flume-ng收集日志</a>
                                    <span class="text-muted">liyonghui160com</span>

                                    <div>  
   nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。第二步向nginx主</div>
                                </li>
                                <li><a href="/article/3432.htm"
                                       title="Oracle死锁解决方法" target="_blank">Oracle死锁解决方法</a>
                                    <span class="text-muted">pda158</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div> select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.</div>
                                </li>
                                <li><a href="/article/3559.htm"
                                       title="java之List排序" target="_blank">java之List排序</a>
                                    <span class="text-muted">shiguanghui</span>
<a class="tag" taget="_blank" href="/search/list%E6%8E%92%E5%BA%8F/1.htm">list排序</a>
                                    <div>   在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。   你能够使用java.util.Collections类中的sort()方法对List元素进行排序。你既可以给方法传递</div>
                                </li>
                                <li><a href="/article/3686.htm"
                                       title="servlet单例多线程" target="_blank">servlet单例多线程</a>
                                    <span class="text-muted">utopialxw</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a>
                                    <div>转自http://www.cnblogs.com/yjhrem/articles/3160864.html 
和   http://blog.chinaunix.net/uid-7374279-id-3687149.html 
Servlet 单例多线程 
Servlet如何处理多个请求访问?Servlet容器默认是采用单实例多线程的方式处理多个请求的:1.当web服务器启动的</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>