Go 语言实现并发爬虫

目的:

搜索CSDN博客,将搜索到博客,爬取博客名称、博客作者、博客链接、发布时间、阅读量。

输入搜索开始页码、结束页码,对每页搜索结果进行多协程爬取。

实现步骤:

1.  博客主页搜索“区块链”,点击第2页,跳转到第2页。得到搜索结果的第2页的网址 

https://so.csdn.net/so/search/s.do?p=2&q=%E5%8C%BA%E5%9D%97%E9%93%BE&t=blog&domain=&o=&s=&u=&l=&f=&rbg=0

2.找到搜索结果页码规律,p=2,替换2,就可以跳转到相应搜索结果页面。

3. 查看搜索页码的源码,用正则表达式,提取博客url。

4. 根据url,爬取博客详情,将爬取的结果用正则表达式,提取博客名称、博客作者、博客链接、发布时间、阅读量。

5.将爬取的每页的结果保存到一个文件中。

根据以上步骤,可将本程序代码,应用到其他网页。只要找到源码的规律,替换相关的url和正则表达式,即可爬取相关页码内容。

注意:go语言在实现高并发爬取时,要用到channel类型,是go非常特别的一种类型,类似管道,可以实现线程同步、线程间通信。双通道chan类型管道中无数据时会阻塞线程,所以可以监控页面是否爬取完成,页面爬取完成后在chan中放入数据,在主线程中迭代chan,直到全部页码爬取完成,程序结束。

代码如下:代码要从下开始往上看,执行顺序也是这样,执行步骤如上所述,注释也很清楚

package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"regexp"
	"strconv"
	//	"strings"
)

//爬取博主名author,博客名title,博客地址blogSite,发布日期publishTime,浏览量browingTimes

//封装一个函数,爬取一页内容
func SpiderOnePage(url string) (result string, err error) {
	resp, err1 := http.Get(url)
	if err1 != nil {
		err = err1
		fmt.Println("http.Get err1 = ", err1)
		return
	}
	defer resp.Body.Close()

	//读取网页的内容
	buf := make([]byte, 4*1024)

	for {
		n, err2 := resp.Body.Read(buf)
		if n == 0 {
			//如果读取接收,直接break
			if err2 == io.EOF {
				break
				//如果是其他错误,就打印出来
			} else {
				fmt.Println("resp.Body.Read err2 = ", err2)
				break
			}
		}
		result += string(buf[:n]) //读取多少,写多少
	}

	return
}

//获取博客作者Id
func getAuthor(srcResult string) (author string) {
	//原文格式 var username = "ijxr1a64ji53l"
	re := regexp.MustCompile(`var username = "(?s:(.*?))"`)
	if re == nil {
		fmt.Println("regexp.MustCompile err")
	}
	tmpt := re.FindAllStringSubmatch(srcResult, 1)

	for _, data := range tmpt {
		author = data[1]
		break
	}
	return
}

//获取博客title
func getBlogTitle(blogResult string) (title string) {
	// 原文格式 【资讯】福布斯:旅行积分计划是区块链主要目标,对旅行者来说是好消息 - CSDN博客
	re := regexp.MustCompile(`(?s:(.*?)) -`)
	if re == nil {
		fmt.Println("regexp.MustCompile err")
	}
	tempTitle := re.FindAllStringSubmatch(blogResult, -1)

	//
	for _, data := range tempTitle {
		title = data[1]
		break
	}
	return

}

//获取博客发布时间
func getBlogPTime(blogResult string) (publishTime string) {
	//原文格式 <span class="link_postdate">2018年01月30日 16:14:25</span>
	re := regexp.MustCompile(`<span class="link_postdate">(?s:(.*?))</span`)
	if re == nil {
		fmt.Println("regexp.MustCompile err")
	}
	temp := re.FindAllStringSubmatch(blogResult, 1)

	for _, data := range temp {
		publishTime = data[1]
		//如果爬取到内容,则直接返回
		if publishTime != "" {
			return
		}
		break
	}

	//第二种原文格式 <span class="time">2018年01月12日 00:00:00</span>
	re1 := regexp.MustCompile(`<span class="time">(?s:(.*?))</span`)
	if re1 == nil {
		fmt.Println("regexp.MustCompile err")
	}
	temp1 := re1.FindAllStringSubmatch(blogResult, 1)
	var publishTime1 string

	for _, data1 := range temp1 {
		publishTime1 = data1[1]
		break
	}

	publishTime = publishTime + publishTime1

	return

}

//获取博客阅读次数
func getReadTimes(blogResult string) (readTimes string) {
	//原文格式 <span class="link_view" title="阅读次数">5485人阅读</span>
	re := regexp.MustCompile(`<span class="link_view" title="阅读次数">(?s:(.*?))人阅读</span`)
	if re == nil {
		fmt.Println("regexp.MustCompile err")
	}
	temp := re.FindAllStringSubmatch(blogResult, 1)

	for _, data := range temp {
		readTimes = data[1]
		if readTimes != "" {
			return
		}

		break
	}
	//原文原代码第二种格式 <i class="icon iconfont icon-read"></i><span class="txt">428</span></button></li>
	re1 := regexp.MustCompile(`<i class="icon iconfont icon-read"></i><span class="txt">(?s:(.*?))</span`)
	if re1 == nil {
		fmt.Println("regexp.MustCompile err")
	}
	temp1 := re1.FindAllStringSubmatch(blogResult, 1)
	var readTimes1 string
	for _, data1 := range temp1 {
		readTimes1 = data1[1]
		break
	}

	//如第一种匹配不到,则为空,两种格式的结果相加,得到最终结果
	readTimes = readTimes + readTimes1

	return
}

//获取具体博客页码结果
func getBlogResult(srcResult string) (result string) {
	//获取博客网址
	// <a href="https://blog.csdn.net/IJXR1A64JI53L/article/details/78047489"  target=
	re := regexp.MustCompile(`<a href="(?s:(.*?))"  target=`)
	if re == nil {
		fmt.Println("regexp.MustCompile err")
	}
	tmpt := re.FindAllStringSubmatch(srcResult, -1)

	for i, data := range tmpt {

		//按照获取的网址地址规律,取出i=1,4,7,...等的数据
		if i%3 == 1 {
			blogUrl := string(data[1])
			//			fmt.Printf("blogUrl #%d#= #%v#\n", i, blogUrl)
			//获取博客详情
			blogdetail, err := getBlogDetail(blogUrl)
			if err != nil {
				fmt.Println("getBlogDetail err=", err)
				return
			}
			if i > 28 {
				break
			}

			result += blogdetail + "\n"

			//分隔每个博客
			result += "----------------------------------------------------------\n\n"
		}
	}
	return
}

func getBlogDetail(blogUrl string) (blogDetail string, err error) {

	//获取具体博客页码结果
	blogPage, err2 := SpiderOnePage(blogUrl) //得到页面全部内容
	if err2 != nil {
		err = err2
		fmt.Println("blogResult SpiderOnePage(blogUrl) err2 = ", err2)
		return
	}

	//根据得到的页面全部内容,提取博客详情
	//获取博客title
	title := getBlogTitle(blogPage)
	//	fmt.Println("getBlogTitle title = ", title)
	blogDetail = "title=" + title + "\n"

	//获取博客作者Id
	author := getAuthor(blogPage)
	//	fmt.Printf("blogAuthor = #%v#\n", author)
	blogDetail += "author =" + author + "\n"

	blogDetail += "blogUrl =" + blogUrl + "\n"

	//获取博客发布时间
	publishTime := getBlogPTime(blogPage)
	//	fmt.Println("getBlog publishTime = ", publishTime)
	blogDetail += "publishTime =" + publishTime + "\n"

	//获取博客阅读量
	readTimes := getReadTimes(blogPage)
	//	fmt.Println("getBlog readTimes = ", readTimes)
	blogDetail += "readTimes =" + readTimes + "\n"

	return
}

//爬取博客内容,得到每一页的结果
func GetBlog(url string) (result string, err error) {
	//获取搜索的页面内容
	srcResult, err1 := SpiderOnePage(url)
	if err1 != nil {
		err = err1
		return
	}

	//爬取搜索的页面
	result = getBlogResult(srcResult)

	fmt.Println("getBlogResult result= \n", result)

	return
}

func SpiderPage(i int, page chan int) {
	//搜索返回得到的网址为三部分,中间部分为页码
	urlHead := "https://so.csdn.net/so/search/s.do?p="
	urlEnd := "&q=%E5%8C%BA%E5%9D%97%E9%93%BE&t=blog&domain=&o=&s=&u=&l=&f=&rbg=0"
	url := urlHead + strconv.Itoa(i) + urlEnd
	fmt.Println("url=", url)
	//爬取博客内容,得到每一页的结果
	result, err := GetBlog(url)
	if err != nil {
		fmt.Println("StartSpider err=", err)
		return
	}

	//把爬取的内容写入到文件

	fileName := "csdn区块链博客" + strconv.Itoa(i) + ".txt"
	f, err := os.Create(fileName)
	if err != nil {
		fmt.Println("os.Create err ", err)
		return
	}

	f.WriteString(result)
	defer f.Close()
	page <- i
}

//在csdn博客主页输入区块链,进行搜索
func StartSpider(startPage, endPage int) {
	//for循环,遍历每一页的地址
	page := make(chan int)
	for i := startPage; i <= endPage; i++ {
		go SpiderPage(i, page) //并发的爬取每一页内容
	}
	for i := startPage; i <= endPage; i++ {
		fmt.Printf("第%d个网页爬取完成\n", <-page)
	}

}

func main() {
	var startPage, endPage int
	fmt.Println("请输入爬取的第一页")
	fmt.Scan(&startPage)
	fmt.Println("请输入爬取的最后一页")
	fmt.Scan(&endPage)
	StartSpider(startPage, endPage)
}</code></pre> 
  <p><br></p> 
  <p>执行结果:</p> 
  <p>命令行输入开始和结束页码</p> 
  <p><a href="http://img.e-com-net.com/image/info8/e1e46b514eaa4e07bf5a15c139d044c6.png" target="_blank"><img src="http://img.e-com-net.com/image/info8/e1e46b514eaa4e07bf5a15c139d044c6.png" alt="Go 语言实现并发爬虫_第1张图片" width="892" height="233" style="border:1px solid black;"></a><br></p> 
  <p>输出结果</p> 
  <p><a href="http://img.e-com-net.com/image/info8/3b0080a208274f3e82fdbde972935ac8.png" target="_blank"><img src="http://img.e-com-net.com/image/info8/3b0080a208274f3e82fdbde972935ac8.png" alt="Go 语言实现并发爬虫_第2张图片" width="627" height="519" style="border:1px solid black;"></a><br></p> 
  <p><br></p> 
  <p>用Notepad++打开的爬取搜索第3页的结果:</p> 
  <p><a href="http://img.e-com-net.com/image/info8/120004bde6ad481799a642fb7cd2f615.png" target="_blank"><img src="http://img.e-com-net.com/image/info8/120004bde6ad481799a642fb7cd2f615.png" alt="Go 语言实现并发爬虫_第3张图片" width="632" height="385" style="border:1px solid black;"></a><br></p> 
  <p><br></p> 
  <p><br></p> 
  <p>生成的文件:</p> 
  <p><a href="http://img.e-com-net.com/image/info8/875d755c68664a9ab1a83ade69462326.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/875d755c68664a9ab1a83ade69462326.jpg" alt="Go 语言实现并发爬虫_第4张图片" width="650" height="257" style="border:1px solid black;"></a><br></p> 
  <p><br></p> 
  <p>得到的结果为key-value结果,后续可将其储存到数据库,或者用其他方式调用。</p> 
  <p>后面将推出将爬取结果保存到数据库的博客。</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1292947114900398080"></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">你可能感兴趣的:(Go)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1903118021145194496.htm"
                           title="oceanbase与mysql性能对比_金融业分布式数据库:TDSQL、HotDB、OceanBase等原理、POC性能对比及选择是......" target="_blank">oceanbase与mysql性能对比_金融业分布式数据库:TDSQL、HotDB、OceanBase等原理、POC性能对比及选择是......</a>
                        <span class="text-muted">高中物理宋老师</span>

                        <div>本帖最后由Amygo于2020-3-1501:33编辑1、分布式的实现,是通过中间件实现分布式,还是源码级别引入分布式算法实现的?解答:(1)分布式数据库是至少由计算节点、存储节点、管理平台、备份还原程序四个部分组成,从数据库系统理论知识上说分成:全局自治和场地自治,也粗略认为:全局可理解为计算节点、场地可理解为存储节点(2)这个问题的标题“中间件实现分布式还是源码级别引入分布式算法”这个说法存在</div>
                    </li>
                    <li><a href="/article/1903106668137345024.htm"
                           title="PyCharm v2024.3.5 强大的Python IDE工具 支持M、Intel芯片" target="_blank">PyCharm v2024.3.5 强大的Python IDE工具 支持M、Intel芯片</a>
                        <span class="text-muted">2401_89264762</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a><a class="tag" taget="_blank" href="/search/pycharm/1.htm">pycharm</a>
                        <div>PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。应用介绍PyCharm是由JetBrains打造的一款PythonIDE,VS2010的重构插件Resharper就是出自</div>
                    </li>
                    <li><a href="/article/1903089766316961792.htm"
                           title="基于python+django的旅游信息网站-旅游景点门票管理系统源码+运行步骤" target="_blank">基于python+django的旅游信息网站-旅游景点门票管理系统源码+运行步骤</a>
                        <span class="text-muted">冷琴1996</span>
<a class="tag" taget="_blank" href="/search/Python%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/1.htm">Python系统设计</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/%E6%97%85%E6%B8%B8/1.htm">旅游</a>
                        <div>该系统是基于python+django开发的旅游景点门票管理系统。是给师弟做的课程作业。大家学习过程中,遇到问题可以在github咨询作者。学习过程问题可以留言哦演示地址前台地址:http://travel.gitapp.cn后台地址:http://travel.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https://github.com/</div>
                    </li>
                    <li><a href="/article/1903089639758032896.htm"
                           title="50个常见的python毕业设计/课程设计(源码+文档)" target="_blank">50个常见的python毕业设计/课程设计(源码+文档)</a>
                        <span class="text-muted">冷琴1996</span>
<a class="tag" taget="_blank" href="/search/Python%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/1.htm">Python系统设计</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>计算机课程设计/毕业设计指南,为计算机相关专业毕业生提供源码、数据库安装、远程调试等相关服务,提供功能讲解视频。下面是50个基于python/django/vue的毕业设计/课程设计。1.网上商城系统这是一个基于python+vue开发的商城网站,平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。前台功能包括:首页、商品</div>
                    </li>
                    <li><a href="/article/1903073749503111168.htm"
                           title="基于python+django+mysql的小区物业管理系统源码+运行步骤" target="_blank">基于python+django+mysql的小区物业管理系统源码+运行步骤</a>
                        <span class="text-muted">冷琴1996</span>
<a class="tag" taget="_blank" href="/search/Python%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/1.htm">Python系统设计</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>该系统是基于python+django开发的小区物业管理系统。适用场景:大学生、课程作业、毕业设计。学习过程中,如遇问题可以在github给作者留言。主要功能有:业主管理、报修管理、停车管理、资产管理、小区管理、用户管理、日志管理、系统信息。源码学习技术。演示地址http://wuye.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https:/</div>
                    </li>
                    <li><a href="/article/1903072364141277184.htm"
                           title="Android Camera 架构" target="_blank">Android Camera 架构</a>
                        <span class="text-muted">2501_90226133</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>二、CameraApp层简述三、CameraFramework层简述四、CameraHal3子系统五、下面需要梳理的重点-正在进行一.AndroidCamera整体架构简述自Android8.0之后大多机型采用CameraAPI2HAL3架构,先盗改谷歌的一张图,读完整部代码后再看这张图,真的是很清晰,很简洁,很到位.原图:https://source.android.google.cn/devi</div>
                    </li>
                    <li><a href="/article/1903070846642089984.htm"
                           title="适合阅读源码的 Java 优质开源框架、库盘点(初级友好项目、中级进阶项目、高级深入项目)" target="_blank">适合阅读源码的 Java 优质开源框架、库盘点(初级友好项目、中级进阶项目、高级深入项目)</a>
                        <span class="text-muted">我命由我12345</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE/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%E6%BA%90/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/java-ee/1.htm">java-ee</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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/intellij-idea/1.htm">intellij-idea</a>
                        <div>一、初级友好项目1、JUnit5基本介绍:JUnit5是单元测试框架,代码简洁,适合学习测试驱动开发(TDD)和设计模式GitHub地址:https://github.com/junit-team/junit5特点:代码量适中,模块化设计,适合学习测试框架的实现原理2、Guava基本介绍:Guava是Google核心库,包含集合、缓存、字符串处理等工具类GitHub地址:https://githu</div>
                    </li>
                    <li><a href="/article/1903066026782814208.htm"
                           title="EL1242 Digital Electronics" target="_blank">EL1242 Digital Electronics</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>AcademicYear:2024/25AssessmentIntroduction:Course:BEng(Hons)ElectronicEngineeringModuleCode:EL1242ModuleTitle:DigitalElectronicsTitleoftheBrief:PrototypingofAPrimarySmartHomeSystemTypeofassessment:Cou</div>
                    </li>
                    <li><a href="/article/1903064281851686912.htm"
                           title="golang--进制转换" target="_blank">golang--进制转换</a>
                        <span class="text-muted">IT艺术家-rookie</span>
<a class="tag" taget="_blank" href="/search/Golang/1.htm">Golang</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a>
                        <div>16进制转十进制floats:="3f663200"i,err:=strconv.ParseUint(s,16,32)iferr!=nil{return}f:=math.Float32frombits(uint32(i))//==>0.89920044或s:="3f663200"varfloatfb,err:=hex.DecodeString(s)iferr!=nil{return}buf:=by</div>
                    </li>
                    <li><a href="/article/1903062644412182528.htm"
                           title="golang-嵌套结构体" target="_blank">golang-嵌套结构体</a>
                        <span class="text-muted">lmryBC49</span>
<a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>结构体嵌套golang中没有类,他通过结构体来实现其他编程语言中类的相关功能。具名结构体基本语法基本语法golang的结构体嵌套特别简单。type结构体类型1struct{字段类型1字段类型2}//这样就实现了结构体的嵌套type结构体类型2struct{字段类型1字段类型2字段结构体类型1}举例packagestruct_knowledgeimport"fmt"typeWorkerstruct{</div>
                    </li>
                    <li><a href="/article/1903061510767308800.htm"
                           title="Golang-Queue 项目常见问题解决方案" target="_blank">Golang-Queue 项目常见问题解决方案</a>
                        <span class="text-muted">施余牧</span>

                        <div>Golang-Queue项目常见问题解决方案queueQueueisaGolanglibraryforspawningandmanagingaGoroutinepool项目地址:https://gitcode.com/gh_mirrors/queu/queue项目基础介绍Golang-Queue是一个使用Go语言编写的库,用于创建和管理Goroutine池。该库允许根据机器有限的CPU数量创建多个</div>
                    </li>
                    <li><a href="/article/1903060498388152320.htm"
                           title="nextjs 实现rag知识库检索增强的ai问答app" target="_blank">nextjs 实现rag知识库检索增强的ai问答app</a>
                        <span class="text-muted">*goliter *</span>
<a class="tag" taget="_blank" href="/search/web%E5%BC%80%E5%8F%91%E5%AD%A6%E4%B9%A0/1.htm">web开发学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>AI-Chat-一个基于LLM大语言模型的知识库问答系统项目源码:https://github.com/goliter/ai-chat项目简介AI-Chat是一个基于Next.js和React开发的现代化大语言模型的知识库问答系统。该平台提供了简易的对话界面,支持上传文件进行知识库的构建,让用户在与大语言模型进行问答时给与大模型知识库内的相关内容。主要功能上传文件构建属于自己的知识库支持doc,t</div>
                    </li>
                    <li><a href="/article/1903057600530935808.htm"
                           title="TensorFlow深度学习实战项目:从入门到精通" target="_blank">TensorFlow深度学习实战项目:从入门到精通</a>
                        <span class="text-muted">点我头像干啥</span>
<a class="tag" taget="_blank" href="/search/Ai/1.htm">Ai</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/tensorflow/1.htm">tensorflow</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>引言深度学习作为人工智能领域的一个重要分支,近年来取得了显著的进展。TensorFlow作为Google开源的深度学习框架,因其强大的功能和灵活的架构,成为了众多开发者和研究者的首选工具。本文将带领大家通过一个实战项目,深入理解TensorFlow的使用方法,并掌握深度学习的基本流程。1.TensorFlow简介1.1TensorFlow是什么?TensorFlow是一个开源的机器学习框架,由Go</div>
                    </li>
                    <li><a href="/article/1903056341367320576.htm"
                           title="golang-方法" target="_blank">golang-方法</a>
                        <span class="text-muted">lmryBC49</span>
<a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>方法概述方法是给类型增加的,通过类型实例.方法名()调用。例如我们用自定义类型保存了整数,我们想给该类型的变量都增加一个方法可以直接判断该数是不是奇数。packagemethod_knowledgeimport"fmt"//案例1:给Myint自定义类型添加奇数判断方法typeMyintintfunc(aMyint)IsOdd(){if(a%2==0){fmt.Println("a不是奇数")}e</div>
                    </li>
                    <li><a href="/article/1903055329441148928.htm"
                           title="快速入手-基于Django的mysql操作(四)" target="_blank">快速入手-基于Django的mysql操作(四)</a>
                        <span class="text-muted">神奇侠2024</span>
<a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a>
                        <div>1、数据的增删改查defadd(request):UserInfo.objects.create(username="admin",password="1234561",age=18)UserInfo.objects.create(username="admin2",password="1234562",age=19)UserInfo.objects.create(username="admin3</div>
                    </li>
                    <li><a href="/article/1903053565023285248.htm"
                           title="基于python+django的家教预约网站-家教信息管理系统源码+运行步骤" target="_blank">基于python+django的家教预约网站-家教信息管理系统源码+运行步骤</a>
                        <span class="text-muted">冷琴1996</span>
<a class="tag" taget="_blank" href="/search/Python%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/1.htm">Python系统设计</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>该系统是基于python+django开发的家教预约网站。是给师妹做的课程作业。大家在学习过程中,遇到问题可以在github给作者留言。共同学习进步哦效果演示前台地址:http://jiajiao.gitapp.cn后台地址:http://jiajiao.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https://github.com/geee</div>
                    </li>
                    <li><a href="/article/1903047001994489856.htm"
                           title="python基于Django的旅游景点数据分析及可视化的设计与实现 7blk7" target="_blank">python基于Django的旅游景点数据分析及可视化的设计与实现 7blk7</a>
                        <span class="text-muted">qq2295116502</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                        <div>目录项目介绍技术栈具体实现截图Scrapy爬虫框架关键技术和使用的工具环境等的说明解决的思路开发流程爬虫核心代码展示系统设计论文书写大纲详细视频演示源码获取项目介绍大数据分析是现下比较热门的词汇,通过分析之后可以得到更多深入且有价值的信息。现实的科技手段中,越来越多的应用都会涉及到大数据随着大数据时代的到来,数据挖掘、分析与应用成为多个行业的关键,本课题首先介绍了网络爬虫的基本概念以及技术实现方法</div>
                    </li>
                    <li><a href="/article/1903046245459488768.htm"
                           title="Vscode niuhe 插件使用教程 - xorm 代码生成" target="_blank">Vscode niuhe 插件使用教程 - xorm 代码生成</a>
                        <span class="text-muted">诗意地回家</span>
<a class="tag" taget="_blank" href="/search/niuhe/1.htm">niuhe</a><a class="tag" taget="_blank" href="/search/%E6%8F%92%E4%BB%B6/1.htm">插件</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%BE%91%E5%99%A8/1.htm">编辑器</a>
                        <div>官方教程已经上线,请访问:http://niuhe.zuxing.net本文相关项目:vue3-element-admin基于niuhe插件的管理后台模板niuhe-mdbookniuhe插件示例项目在日常开发中,新增数据库表时通常需要编写大量重复的增删改查代码。为提高开发效率,niuhe插件0.3.4版本新增Xorm基础代码生成功能,可自动生成:数据库表对应的Golang模型结构体基础CURD操</div>
                    </li>
                    <li><a href="/article/1903042214976614400.htm"
                           title="【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 RESTful API 设计:从上手到骨折" target="_blank">【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 RESTful API 设计:从上手到骨折</a>
                        <span class="text-muted">Foyo Designer</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/restful/1.htm">restful</a><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/Async/1.htm">Async</a><a class="tag" taget="_blank" href="/search/CrossOrigin/1.htm">CrossOrigin</a>
                        <div>点击此处查看合集https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link一、开篇整活儿咱今儿个唠唠Spr</div>
                    </li>
                    <li><a href="/article/1903041709474902016.htm"
                           title="【深度学习】 PyTorch一文详解" target="_blank">【深度学习】 PyTorch一文详解</a>
                        <span class="text-muted">Nerous_</span>
<a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/pytorch/1.htm">pytorch</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/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>“PyTorchisadeeplearningframeworkthatprioritizessimplicityandflexibility,makingitthego-tochoiceforbothresearchersanddevelopers.”—Anonymous1.PyTorch简介1.1PyTorch的背景与发展PyTorch是由Facebook人工智能研究院(FAIR)开发的一个开</div>
                    </li>
                    <li><a href="/article/1903032001913483264.htm"
                           title="对比与详解:QR 分解、奇异值分解(SVD)与 Schur 分解及其他可产生正交基的方法" target="_blank">对比与详解:QR 分解、奇异值分解(SVD)与 Schur 分解及其他可产生正交基的方法</a>
                        <span class="text-muted">DuHz</span>
<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/%E4%BF%A1%E5%8F%B7%E5%A4%84%E7%90%86/1.htm">信号处理</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%9F%A9%E9%98%B5/1.htm">矩阵</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E4%B8%8E%E9%80%9A%E4%BF%A1/1.htm">信息与通信</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/1.htm">线性代数</a>
                        <div>对比与详解:QR分解、奇异值分解(SVD)与Schur分解及其他可产生正交基的方法在数值线性代数与矩阵分析中,常见的能产生正交(或酉)矩阵的分解方法包括QR分解、奇异值分解(SVD)、Schur分解等。这些方法虽然都会产生一个(或多个)正交矩阵,但它们在适用范围、分解形式、计算重点和应用场景等方面各不相同。本文将尽量对这些分解方法进行系统地介绍与对比。1.正交矩阵(Orthogonal/Unita</div>
                    </li>
                    <li><a href="/article/1903030608171429888.htm"
                           title="绕过 reCAPTCHA V2/V3:Python、Selenium 指南" target="_blank">绕过 reCAPTCHA V2/V3:Python、Selenium 指南</a>
                        <span class="text-muted">qq_33253945</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%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/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>前言验证码(CAPTCHA)技术已经存在许多年,尽管它的有效性一直备受争议,但许多网站仍然依赖它来保护资源。尤其是Google推出的reCAPTCHA系列,一直是验证码领域的佼佼者。本文将详细介绍如何绕过reCAPTCHAV2和V3,并提供实用的代码示例。详情请见:解决验证码recaptcha、cloudflare、incapsula1.什么是reCAPTCHA?reCAPTCHA是Google推</div>
                    </li>
                    <li><a href="/article/1902998815984644096.htm"
                           title="docker compose部署dragonfly" target="_blank">docker compose部署dragonfly</a>
                        <span class="text-muted">java初学者分享</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>整个工具的代码都在Gitee或者Github地址内gitee:solomon-parent:这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodbgithub:GitHub-ZeroNing/solomon-parent:这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、rei</div>
                    </li>
                    <li><a href="/article/1902998563961499648.htm"
                           title="SpringBoot整合通用xxl-job,自动注册任务" target="_blank">SpringBoot整合通用xxl-job,自动注册任务</a>
                        <span class="text-muted">java初学者分享</span>
<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/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>整个工具的代码都在Gitee或者Github地址内gitee:solomon-parent:这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodbgithub:GitHub-ZeroNing/solomon-parent:这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、rei</div>
                    </li>
                    <li><a href="/article/1902998436681150464.htm"
                           title="SpringBoot整合阿里云、腾讯云、minio、百度云、华为云、天翼云、金山云、七牛云、移动云、网易数帆等等有关于S3协议下文分布式对象存储接口" target="_blank">SpringBoot整合阿里云、腾讯云、minio、百度云、华为云、天翼云、金山云、七牛云、移动云、网易数帆等等有关于S3协议下文分布式对象存储接口</a>
                        <span class="text-muted">java初学者分享</span>
<a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E4%BA%91/1.htm">阿里云</a><a class="tag" taget="_blank" href="/search/%E8%85%BE%E8%AE%AF%E4%BA%91/1.htm">腾讯云</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E4%BA%91/1.htm">华为云</a>
                        <div>前提:在可运行的SpringBoot的项目内引用以下JAR包整个工具的代码都在Gitee或者Github地址内gitee:solomon-parent:这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodbgithub:GitHub-ZeroNing/solomon-parent:这个项目主要是总结了工作上遇到</div>
                    </li>
                    <li><a href="/article/1902998437507428352.htm"
                           title="SpringBoot整合多租户MongoBD" target="_blank">SpringBoot整合多租户MongoBD</a>
                        <span class="text-muted">java初学者分享</span>
<a class="tag" taget="_blank" href="/search/SaaS%E5%A4%9A%E7%A7%9F%E6%88%B7%E4%B8%93%E6%A0%8F/1.htm">SaaS多租户专栏</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/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                        <div>前提:在可运行的SpringBoot的项目内引用以下JAR包整个工具的代码都在Gitee或者Github地址内gitee:solomon-parent:这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodbgithub:GitHub-ZeroNing/solomon-parent:这个项目主要是总结了工作上遇到</div>
                    </li>
                    <li><a href="/article/1902996420210782208.htm"
                           title="2025年水利工程与水动力学国际会议(ICWCEH 2025)" target="_blank">2025年水利工程与水动力学国际会议(ICWCEH 2025)</a>
                        <span class="text-muted">国际学术会议-杨老师</span>
<a class="tag" taget="_blank" href="/search/EI/1.htm">EI</a><a class="tag" taget="_blank" href="/search/%E4%BC%9A%E8%AE%AE/1.htm">会议</a><a class="tag" taget="_blank" href="/search/%E6%B0%B4%E5%88%A9%E5%B7%A5%E7%A8%8B/1.htm">水利工程</a><a class="tag" taget="_blank" href="/search/%E6%B0%B4%E5%8A%A8%E5%8A%9B%E5%AD%A6/1.htm">水动力学</a><a class="tag" taget="_blank" href="/search/%E5%9B%BD%E9%99%85%E4%BC%9A%E8%AE%AE/1.htm">国际会议</a>
                        <div>2025年水利工程与水动力学国际会议2025InternationalConferenceonWaterConservancyEngineeringandHydrodynamics一、大会信息会议名称:2025年水利工程与水动力学国际会议会议简称:ICWCEH2025收录检索:提交EiCompendex,CPCI,CNKI,GoogleScholar等大会地点:中国·大理审稿通知:投稿后2-3日内</div>
                    </li>
                    <li><a href="/article/1902994025263198208.htm"
                           title="2. 猜数字游戏" target="_blank">2. 猜数字游戏</a>
                        <span class="text-muted">老实人y</span>
<a class="tag" taget="_blank" href="/search/Rust%E5%B0%8F%E7%99%BD%E5%88%9D%E5%AD%A6/1.htm">Rust小白初学</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>目录创建一个新项目处理一次猜测生成一个秘密数字使用crate来增加更多功能Cargo.lock文件确保构建是可重现的更新crate到一个新版本生成一个随机数比较猜测的数字和神秘数字使用循环来允许多次猜测猜测正确后退出处理无效输入最终代码程序会随机生成一个1到100之间的整数。接着它会提示玩家猜一个数并输入,然后指出猜测是大了还是小了。如果猜对了,它会打印祝贺信息并退出。创建一个新项目project</div>
                    </li>
                    <li><a href="/article/1902971961462550528.htm"
                           title="写leetcode常用的库函数和常量" target="_blank">写leetcode常用的库函数和常量</a>
                        <span class="text-muted">xsh219</span>
<a class="tag" taget="_blank" href="/search/golang%E5%B0%8F%E7%9F%A5%E8%AF%86%E7%82%B9/1.htm">golang小知识点</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a>
                        <div>在Go中刷LeetCode,以下是一些常用的标准库函数和数据类型的最大值、最小值:✅常用标准库函数数学与排序math包math.Max(x,y):返回两个float64类型数中的较大值。math.Min(x,y):返回两个float64类型数中的较小值。math.Abs(x):取绝对值。math.Pow(x,y):计算x^y。math.Sqrt(x):计算平方根。sort包sort.Ints(sl</div>
                    </li>
                    <li><a href="/article/1902961741793390592.htm"
                           title="常用的数据结构有哪些?在Go语言中如何定义其实例?" target="_blank">常用的数据结构有哪些?在Go语言中如何定义其实例?</a>
                        <span class="text-muted">开心码农1号</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">算法与数据结构</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/go/1.htm">go</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a>
                        <div>常见的数据结构有:数组、链表、栈、队列、图、哈希表;1、数组用于存储和处理一组固定大小、相同类型的数据,如存储学生成绩、数组排序等。Go语言中的数组长度是固定的,在声明时需要指定长度。特点:数据元素类型相同:数组中的所有元素都具有相同的数据类型;内存地址连续:数组在内存中是连续存储的;随机访问高效:由于数组的内存地址连续,并且元素类型相同,因此可以通过索引快速访问数组中的任意元素。无论要访问数组中</div>
                    </li>
                                <li><a href="/article/86.htm"
                                       title="linux系统服务器下jsp传参数乱码" target="_blank">linux系统服务器下jsp传参数乱码</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a>
                                    <div>在一次解决乱码问题中, 发现jsp在windows下用js原生的方法进行编码没有问题,但是到了linux下就有问题, escape,encodeURI,encodeURIComponent等都解决不了问题 
但是我想了下既然原生的方法不行,我用el标签的方式对中文参数进行加密解密总该可以吧。于是用了java的java.net.URLDecoder,结果还是乱码,最后在绝望之际,用了下面的方法解决了</div>
                                </li>
                                <li><a href="/article/213.htm"
                                       title="Spring 注解区别以及应用" target="_blank">Spring 注解区别以及应用</a>
                                    <span class="text-muted">BlueSkator</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>1. @Autowired 
@Autowired是根据类型进行自动装配的。如果当Spring上下文中存在不止一个UserDao类型的bean,或者不存在UserDao类型的bean,会抛出 BeanCreationException异常,这时可以通过在该属性上再加一个@Qualifier注解来声明唯一的id解决问题。 
  
2. @Qualifier 
当spring中存在至少一个匹</div>
                                </li>
                                <li><a href="/article/340.htm"
                                       title="printf和sprintf的应用" target="_blank">printf和sprintf的应用</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/sprintf/1.htm">sprintf</a><a class="tag" taget="_blank" href="/search/printf/1.htm">printf</a>
                                    <div><?php
printf('b: %b <br>c: %c <br>d: %d <bf>f: %f', 80,80, 80, 80);
echo '<br />';
printf('%0.2f <br>%+d <br>%0.2f <br>', 8, 8, 1235.456);

printf('th</div>
                                </li>
                                <li><a href="/article/467.htm"
                                       title="config.getInitParameter" target="_blank">config.getInitParameter</a>
                                    <span class="text-muted">171815164</span>
<a class="tag" taget="_blank" href="/search/parameter/1.htm">parameter</a>
                                    <div>web.xml 
 
 <servlet>
  	<servlet-name>servlet1</servlet-name>
  	<jsp-file>/index.jsp</jsp-file>
  	<init-param>
  		<param-name>str</param-name>
</div>
                                </li>
                                <li><a href="/article/594.htm"
                                       title="Ant标签详解--基础操作" target="_blank">Ant标签详解--基础操作</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/ant/1.htm">ant</a>
                                    <div>        Ant的一些核心概念: 
        build.xml:构建文件是以XML 文件来描述的,默认构建文件名为build.xml。        project:每个构建文</div>
                                </li>
                                <li><a href="/article/721.htm"
                                       title="[简单]代码片段_数据合并" target="_blank">[简单]代码片段_数据合并</a>
                                    <span class="text-muted">53873039oycg</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a>
                                    <div>        合并规则:删除家长phone为空的记录,若一个家长对应多个孩子,保留一条家长记录,家长id修改为phone,对应关系也要修改。 
        代码如下: 
       </div>
                                </li>
                                <li><a href="/article/848.htm"
                                       title="java 通信技术" target="_blank">java 通信技术</a>
                                    <span class="text-muted">云端月影</span>
<a class="tag" taget="_blank" href="/search/Java+%E8%BF%9C%E7%A8%8B%E9%80%9A%E4%BF%A1%E6%8A%80%E6%9C%AF/1.htm">Java 远程通信技术</a>
                                    <div>在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇blog中我们将来</div>
                                </li>
                                <li><a href="/article/975.htm"
                                       title="string与StringBuilder 性能差距到底有多大" target="_blank">string与StringBuilder 性能差距到底有多大</a>
                                    <span class="text-muted">aijuans</span>

                                    <div>  
        之前也看过一些对string与StringBuilder的性能分析,总感觉这个应该对整体性能不会产生多大的影响,所以就一直没有关注这块! 
        由于学程序初期最先接触的string拼接,所以就一直没改变过自己的习惯! 
        </div>
                                </li>
                                <li><a href="/article/1102.htm"
                                       title="今天碰到 java.util.ConcurrentModificationException 异常" target="_blank">今天碰到 java.util.ConcurrentModificationException 异常</a>
                                    <span class="text-muted">antonyup_2006</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/IBM/1.htm">IBM</a>
                                    <div>今天改bug,其中有个实现是要对map进行循环,然后有删除操作,代码如下: 

Iterator<ListItem> iter = ItemMap.keySet.iterator();
while(iter.hasNext()){
ListItem it = iter.next();
//...一些逻辑操作
ItemMap.remove(it);
}
 
结果运行报Con</div>
                                </li>
                                <li><a href="/article/1229.htm"
                                       title="PL/SQL的类型和JDBC操作数据库" target="_blank">PL/SQL的类型和JDBC操作数据库</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/PL%2FSQL%E8%A1%A8/1.htm">PL/SQL表</a><a class="tag" taget="_blank" href="/search/%E6%A0%87%E9%87%8F%E7%B1%BB%E5%9E%8B/1.htm">标量类型</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%A0%87/1.htm">游标</a><a class="tag" taget="_blank" href="/search/PL%2FSQL%E8%AE%B0%E5%BD%95/1.htm">PL/SQL记录</a>
                                    <div>PL/SQL的标量类型: 
   字符,数字,时间,布尔,%type五中类型的 
--标量:数据库中预定义类型的变量
--定义一个变长字符串 
v_ename varchar2(10); 

--定义一个小数,范围 -9999.99~9999.99 
v_sal number(6,2); 

--定义一个小数并给一个初始值为5.4 :=是pl/sql的赋值号 
</div>
                                </li>
                                <li><a href="/article/1356.htm"
                                       title="Mockito:一个强大的用于 Java 开发的模拟测试框架实例" target="_blank">Mockito:一个强大的用于 Java 开发的模拟测试框架实例</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a>
                                    <div>Mockito框架: 
        Mockito是一个基于MIT协议的开源java测试框架。         Mockito区别于其他模拟框架的地方主要是允许开发者在没有建立“预期”时验证被测系统的行为。对于mock对象的一个评价是测试系统的测</div>
                                </li>
                                <li><a href="/article/1483.htm"
                                       title="精通Oracle10编程SQL(10)处理例外" target="_blank">精通Oracle10编程SQL(10)处理例外</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a>
                                    <div>/*
 *处理例外
 */
--例外简介
--处理例外-传递例外
declare
   v_ename emp.ename%TYPE;
begin
   SELECT ename INTO v_ename FROM emp
      where empno=&no;
   dbms_output.put_line('雇员名:'||v_ename);
exceptio</div>
                                </li>
                                <li><a href="/article/1610.htm"
                                       title="【Java】Java执行远程机器上Linux命令" target="_blank">【Java】Java执行远程机器上Linux命令</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/linux%E5%91%BD%E4%BB%A4/1.htm">linux命令</a>
                                    <div>Java使用ethz通过ssh2执行远程机器Linux上命令, 
  
封装定义Linux机器的环境信息 
  
package com.tom;


import java.io.File;

public class Env {
    private String hostaddr; //Linux机器的IP地址
    private Integer po</div>
                                </li>
                                <li><a href="/article/1737.htm"
                                       title="java通信之Socket通信基础" target="_blank">java通信之Socket通信基础</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/socket/1.htm">socket</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a>
                                    <div>正处于网络环境下的两个程序,它们之间通过一个交互的连接来实现数据通信。每一个连接的通信端叫做一个Socket。一个完整的Socket通信程序应该包含以下几个步骤: 
①创建Socket; 
②打开连接到Socket的输入输出流; 
④按照一定的协议对Socket进行读写操作; 
④关闭Socket。 
  
Socket通信分两部分:服务器端和客户端。服务器端必须优先启动,然后等待soc</div>
                                </li>
                                <li><a href="/article/1864.htm"
                                       title="angular.bind" target="_blank">angular.bind</a>
                                    <span class="text-muted">boyitech</span>
<a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/angular.bind/1.htm">angular.bind</a><a class="tag" taget="_blank" href="/search/AngularJS+API/1.htm">AngularJS API</a><a class="tag" taget="_blank" href="/search/bind/1.htm">bind</a>
                                    <div>angular.bind   描述:           上下文,函数以及参数动态绑定,返回值为绑定之后的函数. 其中args是可选的动态参数,self在fn中使用this调用。    使用方法:            angular.bind(se</div>
                                </li>
                                <li><a href="/article/1991.htm"
                                       title="java-13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。" target="_blank">java-13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>
import java.util.ArrayList;
import java.util.List;


public class KickOutBadGuys {

	/**
	 * 题目:13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。
	 * Maybe you can find out </div>
                                </li>
                                <li><a href="/article/2118.htm"
                                       title="Redis.conf配置文件及相关项说明(自查备用)" target="_blank">Redis.conf配置文件及相关项说明(自查备用)</a>
                                    <span class="text-muted">Kai_Ge</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a>
                                    <div>   Redis.conf配置文件及相关项说明 
# Redis configuration file example
 
# Note on units: when memory size is needed, it is possible to specifiy
# it in the usual form of 1k 5GB 4M and so forth:
#
</div>
                                </li>
                                <li><a href="/article/2245.htm"
                                       title="[强人工智能]实现大规模拓扑分析是实现强人工智能的前奏" target="_blank">[强人工智能]实现大规模拓扑分析是实现强人工智能的前奏</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                                    <div> 
 
     真不好意思,各位朋友...博客再次更新... 
 
     节点数量太少,网络的分析和处理能力肯定不足,在面对机器人控制的需求方面,显得力不从心.... 
 
     但是,节点数太多,对拓扑数据处理的要求又很高,设计目标也很高,实现起来难度颇大... 
 </div>
                                </li>
                                <li><a href="/article/2372.htm"
                                       title="记录一些常用的函数" target="_blank">记录一些常用的函数</a>
                                    <span class="text-muted">dai_lm</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>
public static String convertInputStreamToString(InputStream is) {

	StringBuilder result = new StringBuilder();

	if (is != null)
		try {
			InputStreamReader inputReader = new InputStreamRead</div>
                                </li>
                                <li><a href="/article/2499.htm"
                                       title="Hadoop中小规模集群的并行计算缺陷" target="_blank">Hadoop中小规模集群的并行计算缺陷</a>
                                    <span class="text-muted">datamachine</span>
<a class="tag" taget="_blank" href="/search/mapreduce/1.htm">mapreduce</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E5%B9%B6%E8%A1%8C%E8%AE%A1%E7%AE%97/1.htm">并行计算</a>
                                    <div>注:写这篇文章的初衷是因为Hadoop炒得有点太热,很多用户现有数据规模并不适用于Hadoop,但迫于扩容压力和去IOE(Hadoop的廉价扩展的确非常有吸引力)而尝试。尝试永远是件正确的事儿,但有时候不用太突进,可以调优或调需求,发挥现有系统的最大效用为上策。 
 
-----------------------------------------------------------------</div>
                                </li>
                                <li><a href="/article/2626.htm"
                                       title="小学4年级英语单词背诵第二课" target="_blank">小学4年级英语单词背诵第二课</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>egg  蛋 
twenty 二十 
any 任何 
well 健康的,好 
  
twelve 十二 
farm 农场 
every 每一个 
back 向后,回 
  
fast 快速的 
whose 谁的 
much 许多 
flower 花 
  
watch 手表 
very 非常,很 
sport 运动 
Chinese 中国的 
  </div>
                                </li>
                                <li><a href="/article/2753.htm"
                                       title="自己实践了github的webhooks, linux上面的权限需要注意" target="_blank">自己实践了github的webhooks, linux上面的权限需要注意</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/github/1.htm">github</a><a class="tag" taget="_blank" href="/search/webhook/1.htm">webhook</a>
                                    <div>环境, 阿里云服务器 
  
1. 本地创建项目, push到github服务器上面 
  
2. 生成www用户的密钥 
sudo -u www ssh-keygen -t rsa -C "xxx@xx.com" 
  
  
3. 将密钥添加到github帐号的SSH_KEYS里面 
  
3. 用www用户执行克隆, 源使</div>
                                </li>
                                <li><a href="/article/2880.htm"
                                       title="Java冒泡排序" target="_blank">Java冒泡排序</a>
                                    <span class="text-muted">蕃薯耀</span>
<a class="tag" taget="_blank" href="/search/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F/1.htm">冒泡排序</a><a class="tag" taget="_blank" href="/search/Java%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F/1.htm">Java冒泡排序</a><a class="tag" taget="_blank" href="/search/Java%E6%8E%92%E5%BA%8F/1.htm">Java排序</a>
                                    <div>冒泡排序 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
蕃薯耀 2015年6月23日 10:40:14 星期二 
http://fanshuyao.iteye.com/</div>
                                </li>
                                <li><a href="/article/3007.htm"
                                       title="Excle读取数据转换为实体List【基于apache-poi】" target="_blank">Excle读取数据转换为实体List【基于apache-poi】</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a>
                                    <div>1.依赖apache-poi 
  
2.支持xls和xlsx 
  
3.支持按属性名称绑定数据值 
  
4.支持从指定行、列开始读取 
  
5.支持同时读取多个sheet 
  
6.具体使用方式参见org.cpframework.utils.excelreader.CP_ExcelReaderUtilTest.java 
比如: 
Str</div>
                                </li>
                                <li><a href="/article/3134.htm"
                                       title="3个处于草稿阶段的Javascript API介绍" target="_blank">3个处于草稿阶段的Javascript API介绍</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>原文: 
http://www.sitepoint.com/3-new-javascript-apis-may-want-follow/?utm_source=html5weekly&utm_medium=email 
 
 
  本文中,介绍3个仍然处于草稿阶段,但应该值得关注的Javascript API. 
 
1) Web Alarm API 
  &</div>
                                </li>
                                <li><a href="/article/3261.htm"
                                       title="6个创建Web应用程序的高效PHP框架" target="_blank">6个创建Web应用程序的高效PHP框架</a>
                                    <span class="text-muted">lampcy</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                    <div>以下是创建Web应用程序的PHP框架,有coder bay网站整理推荐: 
1. CakePHP 
CakePHP是一个PHP快速开发框架,它提供了一个用于开发、维护和部署应用程序的可扩展体系。CakePHP使用了众所周知的设计模式,如MVC和ORM,降低了开发成本,并减少了开发人员写代码的工作量。 
2. CodeIgniter 
CodeIgniter是一个非常小且功能强大的PHP框架,适合需</div>
                                </li>
                                <li><a href="/article/3388.htm"
                                       title="评"救市后中国股市新乱象泛起"谣言" target="_blank">评"救市后中国股市新乱象泛起"谣言</a>
                                    <span class="text-muted">nannan408</span>

                                    <div>首先来看百度百家一位易姓作者的新闻: 
 

    三个多星期来股市持续暴跌,跌得投资者及上市公司都处于极度的恐慌和焦虑中,都要寻找自保及规避风险的方式。面对股市之危机,政府突然进入市场救市,希望以此来重建市场信心,以此来扭转股市持续暴跌的预期。而政府进入市场后,由于市场运作方式发生了巨大变化,投资者及上市公司为了自保及为了应对这种变化,中国股市新的乱象也自然产生。

首先,中国股市这两天</div>
                                </li>
                                <li><a href="/article/3515.htm"
                                       title="页面全屏遮罩的实现 方式" target="_blank">页面全屏遮罩的实现 方式</a>
                                    <span class="text-muted">Rainbow702</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E9%81%AE%E7%BD%A9/1.htm">遮罩</a><a class="tag" taget="_blank" href="/search/mask/1.htm">mask</a>
                                    <div>之前做了一个页面,在点击了某个按钮之后,要求页面出现一个全屏遮罩,一开始使用了position:absolute来实现的。当时因为画面大小是固定的,不可以resize的,所以,没有发现问题。 
最近用了同样的做法做了一个遮罩,但是画面是可以进行resize的,所以就发现了一个问题,当画面被reisze到浏览器出现了滚动条的时候,就发现,用absolute 的做法是有问题的。后来改成fixed定位就</div>
                                </li>
                                <li><a href="/article/3642.htm"
                                       title="关于angularjs的点滴" target="_blank">关于angularjs的点滴</a>
                                    <span class="text-muted">tntxia</span>
<a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a>
                                    <div>  
angular是一个新兴的JS框架,和以往的框架不同的事,Angularjs更注重于js的建模,管理,同时也提供大量的组件帮助用户组建商业化程序,是一种值得研究的JS框架。 
  
Angularjs使我们可以使用MVC的模式来写JS。Angularjs现在由谷歌来维护。 
  
这里我们来简单的探讨一下它的应用。 
  
首先使用Angularjs我</div>
                                </li>
                                <li><a href="/article/3769.htm"
                                       title="Nutz--->>反复新建ioc容器的后果" target="_blank">Nutz--->>反复新建ioc容器的后果</a>
                                    <span class="text-muted">xiaoxiao1992428</span>
<a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/IOC/1.htm">IOC</a><a class="tag" taget="_blank" href="/search/nutz/1.htm">nutz</a>
                                    <div>问题: 
public class DaoZ { 
  
  public static Dao dao() { // 每当需要使用dao的时候就取一次 
    Ioc ioc = new NutIoc(new JsonLoader("dao.js")); 
    return ioc.get(</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>