Skip to content

Commit e480f92

Browse files
committed
合并笔记
1 parent 3e69b66 commit e480f92

49 files changed

Lines changed: 5593 additions & 7 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.README.md.swp

28 KB
Binary file not shown.

GitHub相关/GitHub基础操作.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
> 虽然以前也有一些git的基础,但是好久不用了,基本也都忘没了,而且以前用图形化界面的工具比较多,最近决定多用用命令行吧,感觉命令行还是挺好用的。
2+
3+
最近在mac上面装了iterm2感觉挺好用的,还支持各种扩展,挺好的。[iterm2下载链接](http://www.iterm2.com/)
4+
5+
----
6+
就不做什么过多的介绍了,github也这么多年了,还是不错的,而且今天打算记录的也是git的命令,等以后会用到更多的命令的时候也会更新这篇博客的。
7+
8+
----
9+
10+
| 命令 | 含义 |
11+
| ------------- |:-------------:|
12+
|git branch | 查看本地所有分支 |
13+
|git status |查看当前状态 |
14+
|git commit | 提交 |
15+
|git branch -a |查看所有的分支 |
16+
|git branch -r |查看远程所有分支 |
17+
|git commit -m "注释"| 提交并加注释|
18+
|git push origin master|将分支推送到服务器上|
19+
|git remote show origin|显示远程库里面的资源|
20+
|git remote -v|查看远程仓库|
21+
|git checkout dev|建立一个新的本地分支|
22+
|git merge origin/dev|将分支dev与当前分支进行合并|
23+
|git checkout dev|切换到本地dev分支|
24+
|git remote show|查看远程库|
25+
|git add .|将修改全部添加进去|
26+
|git rm 文件名|删除指定文件|
27+
|git pull|将本地代码与服务器同步|
28+
|git push origin master|将本地项目提交到服务器中|
29+
|git clone|将代码克隆到本地|
30+
|git checkout [name]|切换分支|
31+
|git push origin --delete [name]|删除远程分支|
32+
----
33+
34+
![github](http://upload-images.jianshu.io/upload_images/2585384-2a10c46f536c94a8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
35+
以上就是总结给自己看的吧,如果大家有什么疑问也可以留言问,我有空也会介绍一下原理和与其它版本控制工具的对比
36+
37+
38+
较为简单的上传本地代码到GitHub:
39+
````
40+
git init
41+
git remote add [shortname] [url]
42+
git pull origin master
43+
git add .
44+
git commit -m "description"
45+
git push origin master
46+
````
47+
48+
```
49+
修改本地用户
50+
51+
git config --global user.name "youname"
52+
git config --global user.email "youeamil@email.com"
53+
```
54+
55+

GitHub相关/img/background.jpg

124 KB
Loading

GitHub相关/img/background2.jpg

390 KB
Loading
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# 封装一些GitHub常用命令
2+
3+
4+
我们在日常的开发过程中,肯定会经常要用到一些代码版本控制工具,其中较为常用的如GitHub,当然GitHub的命令已经比较精简了,不过依照我们每个人的个人习惯不同还是可以进行一些简单的封装的。
5+
6+
## 封装一些适用于**某个项目**的命令
7+
8+
比如说,我最近一直在维护一个开源的[Android笔记的项目](https://github.com/linsir6/AndroidNote),这样我每天可能都会有很多次的提交,每次提交可能输入的都是那么几个命令:
9+
10+
```
11+
cd /Users/mac/WorkSpace/git_android_notes
12+
git pull
13+
git add .
14+
git commit -m "description"
15+
git push origin master
16+
```
17+
18+
虽然命令不是非常复杂,但是每次都需要手动输入,还是很麻烦的,所以如果我们能将其封装成一句命令就非常nice了,例如:
19+
20+
```
21+
push description XXX XXX
22+
```
23+
24+
其实做这样一个封装是非常简单的,但是可以帮我们省很多事情。
25+
如果您对Shell的基本命令还不是很了解,请参考[Shell脚本入门](https://github.com/linsir6/AndroidNote/blob/master/Shell%E8%84%9A%E6%9C%AC%E7%9B%B8%E5%85%B3/%E4%B8%80%E7%AF%87%E6%96%87%E7%AB%A0%E5%AD%A6%E6%87%82Shell%E8%84%9A%E6%9C%AC.md)
26+
27+
我们看一下,shell脚本的代码:
28+
29+
```
30+
cd /Users/mac/WorkSpace/git_android_notes
31+
32+
echo "begin it ..."
33+
34+
git pull
35+
git add .
36+
37+
git commit -m "$*"
38+
39+
echo $*
40+
41+
git push origin master
42+
43+
echo "finish it ..."
44+
```
45+
46+
只要通过这样简单的封装,我们就可以实现我们,一行命令上传脚本的想法啦~
47+
48+
49+
## 封装一些具有普适性的代码
50+
51+
- **进入到工作空间目录**
52+
53+
封装前: ``cd /Users/mac/WorkSpace``
54+
封装后: ``. me``
55+
56+
shell脚本代码:
57+
58+
```
59+
cd ~/WorkSpace
60+
```
61+
62+
----
63+
64+
- **拉取远程仓库代码**
65+
66+
封装前: ``git pull 或 git pull origin XXX``
67+
封装后: ``pull 或 pull XXX``
68+
69+
shell脚本代码:
70+
71+
```
72+
if [ "$1" = "" ]
73+
then
74+
git branch --set-upstream-to=origin/master master
75+
git pull
76+
77+
else
78+
git pull origin $1
79+
fi
80+
```
81+
82+
----
83+
84+
- **提交代码到远程仓库**
85+
86+
封装前:
87+
88+
```
89+
git pull
90+
git add .
91+
git commit -m "description"
92+
git push origin master
93+
```
94+
95+
封装后: ``push master "description"``
96+
97+
shell脚本代码:
98+
99+
```
100+
git pull
101+
git add .
102+
temp=$1
103+
shift
104+
git commit -m "$*"
105+
git push origin $temp
106+
```
107+
108+
----
109+
110+
当然,这里面只介绍了几种简单的封装,大家可以按照自己的需求,进行一些封装~
111+
112+
113+
114+
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
# IOS上架所需要的图标的尺寸
3+
4+
## iocn
5+
6+
1. Icon.png - 57 * 57 iPhone应用图标
7+
2. Icon@2x.png - 114 * 114 iPhone Retina显示应用图标
8+
3. Icon-Small.png - 29 * 29 系统设置和搜索结果图标
9+
4. Icon-Small@2x.png - 58 * 58 iPhone Retina显示屏 系统设置和搜索结果图标
10+
5. app store 上线需要两版图标 1024 * 1024 512 * 512
11+
12+
13+
14+
ios里面的切图:
15+
需要三版,以适应不同的分辨率,命名就是前半部分一样,后面加上@2x就可以。用的时候正常用前半部分名字,系统会根据分辨率自动选择。
16+
17+
如果设计稿是iPhone6: 750 * 1334
18+
19+
那么我们切图,切出来的图直接就是@2x的,我们还需要切出一套@1x的,还需要一套@3x的。
20+
21+
转换关系是,如果一个图在ps的大小是,10px的话(750 * 1334的设计稿)。
22+
23+
那么@1x : 5px @2px : 10px @3px : 15px
24+
25+
26+
27+
28+
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# ArrayList、LinkedList、Vector的异同
2+
3+
我们可以看出ArrayList、LinkedList、Vector都实现了List的接口。
4+
5+
接下来分别看一下三个数据结构的说明:
6+
7+
- 首先是ArrayList
8+
9+
``public class **ArrayList<E>** extends AbstractList<E>
10+
implements List<E>, RandomAccess, Cloneable, Serializable``
11+
12+
List 接口的**大小可变数组**的实现。实现了所有可选列表操作,并**允许包括 null 在内的所有元素**。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了**此类是不同步的**。)
13+
14+
每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。
15+
16+
在添加大量元素前,应用程序可以使用 ensureCapacity 操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。
17+
18+
``List list = Collections.synchronizedList(new ArrayList(...)); ``
19+
20+
此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间发生任意不确定行为的风险。
21+
注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。
22+
23+
- 然后是LinkedList
24+
25+
26+
``public class **LinkedList**<E> extends AbstractSequentialList<E>
27+
implements List<E>, Deque<E>, Cloneable, Serializable``
28+
29+
List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(**包括 null**)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
30+
31+
此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。
32+
33+
所有操作都是按照**双重链接列表**的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。
34+
35+
注意,此实现**不是同步**的。如果多个线程同时访问一个链接列表,而其中至少一个线程从结构上修改了该列表,则它必须 保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过**对自然封装该列表的对象进行同步操作来完成**。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方法来“包装”该列表。最好在创建时完成这一操作,以防止对列表进行意外的不同步访问,如下所示:
36+
37+
``List list = Collections.synchronizedList(new LinkedList(...));``
38+
39+
此类的 iterator 和 listIterator 方法返回的迭代器是快速失败 的:在迭代器创建之后,如果从结构上对列表进行修改,除非通过迭代器自身的 remove 或 add 方法,其他任何时间任何方式的修改,迭代器都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来不确定的时间任意发生不确定行为的风险。
40+
41+
注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何硬性保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。
42+
43+
- 最后是Vector
44+
45+
public class **Vector**<E> extends AbstractList<E>
46+
implements List<E>, RandomAccess, Cloneable, Serializable
47+
48+
Vector 类可以**实现可增长的对象数组**。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。
49+
50+
每个向量会试图通过维护 capacity 和 capacityIncrement 来优化存储管理。capacity 始终至少应与向量的大小相等;这个值通常比后者大些,因为随着将组件添加到向量中,其存储将按 capacityIncrement 的大小增加存储块。应用程序可以在插入大量组件前增加向量的容量;这样就减少了增加的重分配的量。
51+
52+
由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失败的:如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的 remove 或 add 方法之外的任何其他方式),则迭代器将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就完全失败,而不是冒着在将来不确定的时间任意发生不确定行为的风险。Vector 的 elements 方法返回的 Enumeration 不是 快速失败的。
53+
54+
注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测 bug。
55+
56+
从 Java 2 平台 v1.2 开始,此类改进为可以实现 List 接口,使它成为 Java Collections Framework 的成员。与新 collection 实现不同,**Vector 是同步的**
57+
58+
----
59+
60+
- 区别
61+
62+
63+
ArrayList 本质上是一个可改变大小的**数组**.当元素加入时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问.元素顺序存储 ,**随机访问很快,删除非头尾元素慢,新增元素慢而且费资源** ,较适用于无频繁增删的情况 ,比数组效率低,如果不是需要可变数组,可考虑使用数组 ,**非线程安全**.
64+
65+
LinkedList 是一个**双链表**,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList. 适用于 :没有大规模的随机读取,大量的增加/删除操作.**随机访问很慢,增删操作很快**,不耗费多余资源 ,允许null元素,**非线程安全.**
66+
67+
Vector (类似于ArrayList)但其是**同步**的,开销就比ArrayList要大。如果你的程序本身是线程安全的,那么使用ArrayList是更好的选择。
68+
Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%.
69+
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# Des加密算法
2+
3+
> des加密算法,是一个对称的加密算法,目前被广泛应用,所以打算写一个demo。
4+
5+
6+
```
7+
package com.dao;
8+
9+
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
10+
import sun.misc.BASE64Decoder;
11+
import sun.misc.BASE64Encoder;
12+
13+
import javax.crypto.Cipher;
14+
import javax.crypto.SecretKey;
15+
import javax.crypto.SecretKeyFactory;
16+
import javax.crypto.spec.DESKeySpec;
17+
import java.io.IOException;
18+
import java.security.SecureRandom;
19+
20+
/**
21+
* Created by linSir on 2017/6/22.des加密算法
22+
*/
23+
public class Test {
24+
25+
public static void main(String args[]) throws IOException {
26+
27+
28+
//加密
29+
//byte[] result = Test.encrypt(str.getBytes(),password);
30+
//BASE64Encoder base64encoder = new BASE64Encoder();
31+
//String encode=base64encoder.encode(result);
32+
33+
String miwen = "ZraEmkLPeVT1CBGRpcbXTfVRhUWt6riMMh8UoWcVEClwLcCRuJoMmZW+IS5MYshasXVUu1VIFeqE\n" +
34+
"ySjMvDvu4z6GxUR7BVq95mfILIT6kvCLW1rvgJoZGlkXzDW7R+n8R/POzu61cfKejnMnW0HiRmsK\n" +
35+
"CNLB3zf0KYfB5H0x0+GUtXQmtQyG0x5tQSyHSWOdQVyEj7mYFw4h6uFhN94ifgZq8ohpUduWZBgU\n" +
36+
"EN3B4akKt8+oPQPFv1GvrFucOmrfDpyTy+YuLZZ0nlPA5AYTa2TnC++ZPPo62XW4O2EZ0qGXcuO1\n" +
37+
"3zHfq8mmtdQ7DbGN2JIBNLL/EN97o7pHRkVNbB9/eHElf37MghHZWTUfIlvRtSTwaWkW3IR2aWzj\n" +
38+
"GQXrdqErVUdcTvLH2fGnInYU6XAtwJG4mgyZG6OZZ89Yg9iOcWG4GruJvFEa/UQNDmbS+vyvWpP/\n" +
39+
"75zOiDos5s5yeJUcUaJt+SkUR7z5yr7bbK/DHkS5aEvfNI/nL4Z4DrGN++9Uzv34XD4ZTg0csEuL\n" +
40+
"96+LAUKED43iaJUo6wruiZ/7KmpvP5p3ii5p03Z1ymscmTlqUTZ55YFBCz3dZg8OSGIlKj+7uaYF\n" +
41+
"umweL38ksAtVL1wjgWMVF+9oYUie/jf6+mAdmvwiACoGu71ZziWc4tz1UPb27Qx4Qf0h/nItAkuT\n" +
42+
"yLK6+Hx0+GQ2weK2q95kgf8zUs1igyhu1VdMGHbp/Ma3DyJIo6wPgwRlpFedCq0/w7ECGGPHfLUb\n" +
43+
"eNmBK3nCqqN7TABiLfHfzR8mBjjMcJQ1MtGGwZB6H6zAGkcSEQqHgsTbnG6t8GvS06t9eepMn6VG\n" +
44+
"7X+dS4LUS9LpIZ/OgNwxvyxd3vw/dKn9u0OLgvJRGv1EDQ5m0t80qIo6RxHCLmnTdnXKaxxFIhNG\n" +
45+
"caq19CPEthsSFziTHlX/qM5g/yCwbN9+qClQ0z5VI/ZGUAcs9Cz3WjimPGKNyLa+AKgUE7dh4sFr\n" +
46+
"vQGrlRxRom35KRRRd/VE9Goz3EAcQQ1NhiDMYobeoH0as5XkG3hTF2zZyfn/QJZnNwh4GxCLkZPS\n" +
47+
"VKFdg0bpAy3irJouw+IG69DUewM4W4a1u7h8i76pCLLxP5gIYqKqKgm97itSQe8ZV3qbG9gNxMrg\n" +
48+
"aUQ+fCE3TvsP07RdLW9Dn6Mazxnq7wnw9X2Qj9+sTl+hLLKhL+ZlHIJk5wvvmTz6OikBCmYmdEZb\n" +
49+
"Q1Prg0CgHVrFy4JOc9rTCmLnieHBG/xVwI5AOp42NUOk/Ycc7EIuzQ4tKEGS7RjmcpKEUMkog5c5\n" +
50+
"k693mGsn2VUQNeRPmfrcN7Ra+L18fvKMs1ESEjrUR/GpHwg6UcCBfBh8r/B5bYdoV2ik02liSVzX\n" +
51+
"Kt5vzA3ZjC5mvkF/RJJUoCUa6j3xqznjJhmABsN23gOcRh8RRWb8VGI2xD8ErYwuZr5Bf0SSTyTL\n" +
52+
"p6dacHJIz1u6+TEr9OfinHoMzBwXETOkAnPOt/YdwGw8/MM41w==";
53+
54+
BASE64Decoder base64decoder = new BASE64Decoder();
55+
byte[] encodeByte = base64decoder.decodeBuffer(miwen);
56+
57+
58+
//直接将如上内容解密
59+
try {
60+
byte[] decryResult = Test.decrypt(encodeByte, "");
61+
System.out.println("解密后:" + new String(decryResult));
62+
} catch (Exception e1) {
63+
e1.printStackTrace();
64+
}
65+
66+
}
67+
68+
/**
69+
* 加密
70+
*/
71+
public static byte[] encrypt(byte[] datasource, String password) {
72+
try {
73+
SecureRandom random = new SecureRandom();
74+
DESKeySpec desKey = new DESKeySpec(password.getBytes());
75+
//创建一个密匙工厂,然后用它把DESKeySpec转换成
76+
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
77+
SecretKey securekey = keyFactory.generateSecret(desKey);
78+
//Cipher对象实际完成加密操作
79+
Cipher cipher = Cipher.getInstance("DES");
80+
//用密匙初始化Cipher对象
81+
cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
82+
//现在,获取数据并加密
83+
//正式执行加密操作
84+
return cipher.doFinal(datasource);
85+
} catch (Throwable e) {
86+
e.printStackTrace();
87+
}
88+
return null;
89+
}
90+
91+
/*
92+
* 解密
93+
*/
94+
private static byte[] decrypt(byte[] src, String password) throws Exception {
95+
// DES算法要求有一个可信任的随机数源
96+
SecureRandom random = new SecureRandom();
97+
// 创建一个DESKeySpec对象
98+
DESKeySpec desKey = new DESKeySpec(password.getBytes());
99+
// 创建一个密匙工厂
100+
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
101+
// 将DESKeySpec对象转换成SecretKey对象
102+
SecretKey securekey = keyFactory.generateSecret(desKey);
103+
// Cipher对象实际完成解密操作
104+
Cipher cipher = Cipher.getInstance("DES");
105+
// 用密匙初始化Cipher对象
106+
cipher.init(Cipher.DECRYPT_MODE, securekey, random);
107+
// 真正开始解密操作
108+
return cipher.doFinal(src);
109+
}
110+
}
111+
112+
```

0 commit comments

Comments
 (0)