git命令(因为经常忘记,所以记录下)

-

1.git init
2.git remote add origin -ssh
3.git add .
4.git commit -m “First”
5.git push origin master

在创建密钥时,一定要进入cd /中,然后一直回车就行了,有时会出各种幺蛾子

  • 密钥创建: ssh-keygen -t rsa -C “your_email@example.com”
  • 密钥生成在 ~/.ssh 中,有2个id_rsa与id_rsa.pub,将id_rsa.pub中的key值复制道github中ssh key值就行了
  • 查看远程仓库:$ git remote -v
  • 添加远程仓库:$ git remote add [name] [url]
  • 删除远程仓库:$ git remote rm [name]
  • 拉取远程仓库:$ git pull [remoteName] [localBranchName]
  • 推送远程仓库:$ git push [remoteName] [localBranchName]
  • 查看本地分支:$ git branch
  • 查看远程分支:$ git branch -r
  • 创建本地分支:$ git branch [name] —-注意新分支创建后不会自动切换为当前分支
  • 切换分支:$ git checkout [name]

remoteName 就是git remote add [name] [url]中的name
origin git@github.com:Mrnoknow/mrnoknow.github.io.git (fetch)
origin git@github.com:Mrnoknow/mrnoknow.github.io.git (push)
origin 就是对应的remoteName,也就是remote add [name] 中的name,
localBranchName 就是远程仓库的分支名字

Lambda表达式遍历java集合

-

以下为java 8才能实现

Iterable接口实现

Iterable(不是Iterator,这里需要说:Iterable接口是Collection接口的父接口
新增了一个forEach(Consumer action)默认方法,Collection直接调用改方法而该方法需要函数式
接口(是不是函数式编程,一脸懵逼~可能不是)。
需要说的是:Consumer的accept(T t)方法(是该接口的唯一方法),因为Consumer事函数式接口。

代码如下

1
noknow.forEach(obj->System.out.println("Your name:"+obj));

Iterator(迭代器)接口实现

Iterator新增forEachRemaining(Consumer action)方法
此方法与Iterable接口不同的是集合必须获取Iterator迭代器

代码如下

1
2
Iterator mr=noknow.iterator();
mr.forEachRemaining(obj->System.out.println("Your name:"+obj));

课外扩展:Iterator为快速失败(fail-fast)机制,就是如果有多线程对同一个集合进行操作,如果有
一个线程进行了修改操作,程序就会发生异常,而不会使用修改的值,以此避免共享资源潜在的危险。

JAVA编写一个简易的爬虫(爬取网页链接)

-

这个简易的爬虫需要jsoup包,一个java的第三方包

jsoup包有什么作用(在这个简易的爬虫程序中)?

在这个简易的程序中,所需要的是jsoup包中的

1
2
3
4
5
6
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
这几个类。
主要是解析网页中的标签,直接抽取网页链接

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class DocOperate {
UrlOperate urlGet=new UrlOperate();
public void LinkAcquisition(String url) throws IOException {//链接获取
urlGet.ArrayAdd(url);
System.out.println(url);
Document doc;
try {
doc = Jsoup.connect(url).timeout(5000).get();//解析网页内容,设置连接时间
Elements links = doc.select("a[href]");//获取所有网页链接
for (Element link : links) {

String linkHref = link.attr("abs:href");//获取单个链接
if(linkHref!=""){
//System.out.println(linkHref);
urlGet.LinkedAdd(linkHref);}//添加到待爬取链接
}
LinkRepeatJudgment();//执行链接重复的判断
} catch (Exception e) {//如果出现异常,就直接执行链接重复判断
LinkRepeatJudgment();
e.printStackTrace();
}
}
public void LinkRepeatJudgment() throws IOException {//链接重复判断
if(!urlGet.IsEmpty()){//如果待爬取链接不为空
String url=urlGet.GetUrl();//获取第一个待爬取链接
urlGet.Remove(url);//移除待爬取链接的第一个
if(urlGet.CompareUrl(url)){//如果该链接被爬取,继续执行此方法
//System.out.println(url);
LinkRepeatJudgment();
}else{否则执行链接重复判断

LinkAcquisition(url);}
}else{
System.out.println("game over");
}
}
}

以上是工具类,主要用于抓取网页链接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.ArrayList;
import java.util.LinkedList;
public class UrlOperate {
private LinkedList<String> linked=new LinkedList<String>();//待爬取链接

private ArrayList<String> arry=new ArrayList<String>();//以爬取链接
public void LinkedAdd(String url){//添加待爬取链接
linked.add(url);
}
public void Remove(String url){//爬取链接移除

linked.remove(url);
}
public String GetUrl(){//得到待爬取第一个链接
return linked.getFirst();
}
public boolean IsEmpty(){//判断待爬取链接是否为空
return linked.isEmpty();
}

public LinkedList<String> getHash(){
return linked;
}

public void ArrayAdd(String url){//以爬取链接的添加
arry.add(url);
}
public boolean CompareUrl(String url){//判断将爬取链接是否已存在于以爬取链接中
return arry.contains(url);
}
}

以上代码为网页链接的存取以及判断是否被爬取,对象类。

1
2
3
4
5
6
7
8
9
import java.io.IOException;
public class Spider {
public static void main(String args[]) throws IOException{
String line=null;
String url="http://mrnoknow.github.io/";
DocOperate operate=new DocOperate();
operate.LinkAcquisition(url);
}
}

完成。