git使用技巧

这几天开始工作了,工作中使用了git进行项目管理,这才发现原来我以前所知道的git使用那只是一点皮毛。

写一些这几天用到的一些git技巧喽,以后有的话继续更新啦。

git status 查看当前的状态,那些文件修改了,那些文件创建还没有add的。

git add . 添加所有的修改

或者

git add 文件名或者文件路径,添加指定的

git stash 将没有commit的部分文件放到暂存栈去,这样从服务器pull文件的时候不会有问题。

git stash pop 是将暂存栈的东西拿回来
git stash clear 将暂存栈中的东西清空,要慎用,这样你放在暂存中的修改都将丢失

git reset 将所有git add 的撤销

将其他的分支中的某个修改合并到当前分支

  1. git cherry-pick sha1(用gitk 在那个分支上面可以看到)
  2. git reset –soft 合并当前分支和cherry过来的分支。两个分支的代码都保留 如果参数用 hard 那么本地的将会被抹掉
  3. git commit –ammend
    这样就完成了

修改两次前的提交

  1. git rebase -i HEAD~2
  2. 修改那个提交的状态,即把pick改为edit
  3. 回去修改文件
  4. git commit –amend
  5. git rebase –continue
    这样也就ok了

git里面很多东西很有用,好吧,以后好好学习。

Android图像开源视图:SmartImageView

项目需要,开发中需要加载图片,自己要写图片从网上下载的方法,还要写缓存,等等。

在网上找到一个开源项目,smartImageVIew,支持从URL和通讯录中获取图像,可以替代Android标准的ImageView。

特征:

根据URL地址装载图像;
支持装载通讯录中的图像;
支持异步装载;
支持缓存;

这个是作者的项目主页,有使用方法。

http://loopj.com/android-smart-image-view/

下载作者的jar包导入项目后,在xml中加入控件

<com.loopj.android.image.SmartImageView android:id="@+id/my_image" />    

代码里找到该控件

SmartImageView myImage = (SmartImageView) this.findViewById(R.id.my_image); 

使用控件

通过url加载图片

myImage.setImageUrl("http://www.awesomeimages.com/myawesomeimage.jpg");   

加载通讯录的图片

myImage.setImageContact(contactAddressBookId);  

github上面有源码,需要的可以看看:

https://github.com/loopj/android-smart-image-view    

Java中HashMap和HashTable的区别

HashMap 是Hashtable 的轻量级实现(非线程安全的实现),他们都完成了Map 接口,主要区别在于HashMap 允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap 允许将null 作为一个entry 的key 或者value,而Hashtable 不允许。

HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和containsKey。因为contains方法容易让人引起误解。

Hashtable 继承自Dictionary 类,而HashMap 是Java1.2 引进的Map interface 的一个实现。

最大的不同是,Hashtable 的方法是Synchronize 的,而HashMap 不是,在多个线程访问Hashtable 时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

Hashtable 和HashMap 采用的hash/rehash 算法都大概一样,所以性能不会有很大的差异。

Java中Collection和Collections的区别

前几天去一个公司参加面试遇到这个问题,Java中Collection和Collections的区别,当时不会,回来从网上找到,现在记录一下。

1、java.util.Collection 是一个 集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack└Set

2、java.util.Collections 是一个包装类。它包含有各种有关集合操作的 静态多态方法。此类 不能实例化 ,就像一个 工具类,服务于Java的Collection框架。

import java.util.ArrayList;      
import java.util.Collections;      
import java.util.List;      
public class TestCollections {      
    public static void main(String args[]) {     
        //注意List是实现Collection接口的       
        List list = new ArrayList();      
        double array[] = { 112, 111, 23, 456, 231 };      
        for (int i = 0; i < array.length; i++) {      
            list.add(new Double(array[i]));      
        }      
        Collections.sort(list);      
        for (int i = 0; i < array.length; i++) {      
            System.out.println(list.get(i));      
        }      
        // 结果:23.0 111.0 112.0 231.0 456.0      
    }      
}

Linux下SVN的使用

今天在新浪sae上搭建了个人博客,新浪sae采用svn的方式进行代码管理,之前在windows下面做svn操作都是采用TortoiseSVN,今天正好开机到了linux下面,那么好吧,就用svn传我的wordpress到sae中去。

首先,安装svn。

sudo apt-get install subversion

ubuntu下面安装svn,就是这么简单。
<!– more –>
可以通过man svn查看使用手册。

下面介绍一些常用命令:
1.检出文件(checkout)。
使用命令:

svn co http://{svn repository url} /destination

然后系统会用当前的用户名登录,提示输入密码,如果第一次密码输入错误,会提示你输入用户名;输入正确后,就可以检出文件了。

2、Ubuntu SVN提交文件(commit)。
进入需要更新的目录,输入命令:

svn commit -m path-to-commit

,其中path-to-commit可以为空,成功后会提示更新后的版本号。

3、更新文件(update)。

svn update

,在要更新的目录运行这个命令就可以了。

4、查看日志(log)。

svn log path

5.删除文件

svn delete svn://xxx.com/test.php -m “delete test file”

或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种简写:svn (del, remove, rm)

更多使用方法,自己查看手册吧。

intent和intent过滤以及匹配规则

在Android系统中打开Activity,Service, BroadCast 都需要使用到Intent(意图),那么作为一个开发者就需要知道怎么使用Intent,知道怎么通过Intent的匹配规则打开其他的组件,或者给其他组件提供访问接口。因此在这里总结一下Intent和Intent的匹配规则。

Intent使用示例

显式使用Intent

Intent intent = new Intent(context, XXXActivity.class);
intent.putExtra(Intent.EXTRA_TEXT, "string text");

隐式使用

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parser("http://blog.isming.me"));

AndroidManifest定义IntentFilter规则
xml
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

以上是简单的Intent示例,下面看Intent里面有那些东西,以及Intent的解析规则.

Intent的成员

action 动作,比如上面的隐式Intent,就是传递了一个View的动作.

data 数据,通过Intent发送的数据, 上面的隐式意图就是通过Uri解析出来数据

category 标签

type 类型 上面的隐式意图就是通过Uri来解析出来类型,即MIME type.

component 组件,即要打开的组件的信息,包名+类名.上面的显式意图就是设置要打开的组件。其他隐式意图也是通过各种参数来最终获取组件。

extras 附加数据,在Intent中附加传递的数据.

IntentFilter

IntentFilter,刚刚的一个xml配置的intentFilter,同时也可以在代码中配置。通过IntentFilter可以过滤掉不需要的一些隐式意图,必须有action 和category,还可以附加data规则,包含(data type 和data scheme+authority+path),通常一个Url包含://:/,可以通过设置data规则只有在指定的格式才能打开页面。

比如:

<intent-filter>
    <data android:mimeType="image/*" />
    ...
</intent-filter>

上面这个就只有数据是图片的时候才可以打开。

<intent-filter>
    <data android:scheme="http" />
    ...
</intent-filter>

上面这个规则则只允许数据是http的网址可以。

参考资料:

http://developer.android.com/guide/components/intents-filters.html

http://developer.android.com/reference/android/content/IntentFilter.html