分类目录归档:技术

Android常见布局之线性布局

Android中比较常见的布局有线性布局(LinearLayout),表格布局(TableLayout),相对布局(RelativeLayout)及帧布局(FrameLayout)。

线性布局是将其中的组件按照线性的,以垂直或者水平方向来布局,组件的布局方向可由orientation属性来控制,其具体值有水平(horizontal)及垂直(vertical)。搞清楚布局以后,这玩意就的思考加练习,以各种方式在纸上进行画,或者在心里画,然后编写布局文件来练习,时间长了就自然而然的熟练了。

练习要求:

1、把屏幕分成2部分,上面一部分,下面一部分

2、上面部分分为4列

3、下面部分分为4行

OK,开始练习!(在Eclipse中建立项目测试Layout,修改其res目录下的layout目录中的main.xml文件)

第一步:考虑LinearLayout使用数目,并确定其方向,由于是分为上下两部分,所以最外层layout采用垂直方向布局,里面两个layout分别表示上下;

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout>   <!-- 上面部分 -->
    </LinearLayout>
    <LinearLayout>   <!-- 下面部分 -->
    </LinearLayout>
 </LinearLayout>

第二步:补充内部layout属性及增加组件,这里用TextView组件来填充LinearLayout,不断补充调整,最终布局文件如下:

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">
     <LinearLayout android:orientation="horizontal"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_weight="1">
            <TextView
                 android:text="col1"
                 android:gravity="center_horizontal"
                 android:background="#999999"
                 android:layout_width="wrap_content"
                 android:layout_height="fill_parent" 
                 android:layout_weight="1" />
            <TextView
                 android:text="col2"
                 android:gravity="center_horizontal"
                 android:background="#290fc0"
                 android:layout_width="wrap_content"
                 android:layout_height="fill_parent"
                 android:layout_weight="1" />
            <TextView
                 android:text="col3"
                 android:gravity="center_horizontal"
                 android:background="#999999"
                 android:layout_width="wrap_content"
                 android:layout_height="fill_parent"
                 android:layout_weight="1" />
            <TextView
                 android:text="col4"
                 android:gravity="center_horizontal"
                 android:background="#290fc0"
                 android:layout_width="wrap_content"
                 android:layout_height="fill_parent"
                 android:layout_weight="1" /> 
     </LinearLayout>
     <LinearLayout
         android:orientation="vertical"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_weight="1">
         <TextView
              android:text="row_one"
              android:textSize="15sp"
              android:background="#290fc0"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1" />
         <TextView
              android:text="row_two"
              android:textSize="15sp"
              android:background="#999999"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1" />
         <TextView
              android:text="row_three"
              android:textSize="15sp"
              android:background="#290fc0"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1" />
          <TextView
              android:text="row_four"
              android:textSize="15sp"
              android:background="#999999"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1" />
     </LinearLayout>
</LinearLayout>

运行效果如下图所示:

LinearLayout

神器vim的基本使用

对于比较简短的代码通常会使用文本编辑器进行测试,或者在开始学习的时候常常会用到文本编辑器,回想这么多年下来,从开始的Editplus到Notepad++也用过不少,前段时间接触了一下被称为神器的vi/vim,逐渐被其强大的功能及编辑方式所吸引,所以日常中开始逐渐的使用这个编辑器做一些文本或者代码的编写测试,经过一段时间的使用,可以基本上使用这个编辑器做一些简单的操作,对此进行记录,我使用的是gvim 7.3.46 。

(1)常用到的设置,通过在启动设定中进行常规的设置(通过菜单或者在Vim安装目录下通过修改_vimrc文件)进行设置

不需要备份文件(set nobackup )

打开utf-8不出现乱码(set fileencodings=ucs-bom,utf-8,chines)

显示行号(set nu)

配色方案(:colorscheme borland) 这里我使用borland配色方案,可根据自己喜欢进行设置

(2)常用命令

ESC 这个是很常用的,可在vim不同模式间进行转换,可在浏览模式、编辑模式、命令输入模式间快速转换,任何时候按ESC键回到浏览模式。

h,j,k,l 键,分别代表左,下,上,右移动方向键(在浏览模式中适用)

在浏览模式中输入:可进入命令输入模式。

命令:q,退出vim,如当前文本有修改则提示不退出

命令:q!,强制退出vim,如当前文档有修改则放弃保存

命令:wq,保存后退出vim

命令:w, 保存当前的修改

命令:w + filename 可保存当前文本到指定的filename中

命令:num 可跳转至指定的num行

命令:/find str或 :?find str 可查找find str的文本,然后可使用n向下查找,使用N向上查找

在浏览模式中进入编辑模式,i,I,a,A,o,O,i在光标所在前插入文本,I在光标所在行首插入文本,a在光标所在后插入文本,A在光标所在行末插入文本,o在光标所在行下添加一行,O在光标所在行上添加一行。

在浏览模式有一些常用到对文本进行操作的快捷命令

dd 删除当前行,n+dd 删除当前行下n行,比如3dd将删除当前行向下3行

x  删除当前光标所在后的字符,X删除当前光标所在前的字符

yy 复制当前行,n+yy复制当前行下n行

p 粘贴

u 撤销

^ 移动光标到行首

$ 移动光标到行尾

gg 返回文件首行 G 到文件末行行首

Ctrl + f 向后一页

Ctrl + d 向后半页

Ctrl + b 向前一页

Ctrl + u 向前半页

这些都是经常使用的命令,通过这些命令就可以简单的使用vim进行文本的编辑了,这个东西就是一个熟练的活,随着使用时间的增加会越来越熟练,其效率也会越来越高,给我的感觉vim作为比较强悍的编辑器来讲确实在效率上能让人提高很多,其合理的利用了键盘上几乎所有的命令,让你的双手可以在键盘上优雅的跳动,这种全盘操控的感觉让人确实很爽!

 

Eclipse 4 Java常用快捷键

关闭当前打开的编辑窗口(Ctrl + W)

关闭所有已打开的编辑窗口(Ctrl + Shift + W )

格式化代码(Ctrl + Shift + F )

Import 包 (Ctrl + Shift + O)

删除当前行(Ctrl + D)

对选中的文件重命名(Alt + Shift + R)

快速浏览当前类成员变量及方法 (Ctrl + O)

快速定位下一个当前选中的内容所在 (Ctrl + K)

保存当前(Ctrl + S)

查看更多的快捷键(Ctrl + Shift + L )

 

修改快捷键 Window -> Preferences -> General -> Keys  然后修改!

互联网企业提供的产品服务不应该强制频繁的推荐

现在有越来越多的人使用互联网产品(服务),而作为互联网产品(服务)的企业的营销中往往会采用病毒营销的方式来推进自己的产品或者服务,而电子邮件作为病毒营销的一种很频繁的被别人使用,所以现在几乎每个人的Email中每天都会有很多的垃圾邮件,这种是通常的方式,应该把这样的方式称之为纯粹的用邮件来进行营销,这样的方式一般采用 购买行业邮件数据及群发工具,然后开始群发,根据群发用户的各项操作进行统计分析,然后改善邮件内容或者标题等等,然后周而复始的发送,已取得期望的营销效果。

还有另外一种情况,这里我觉得有必要说说,现在提供互联网产品(服务)的企业,往往首先会要求使用者进行注册,然后通过注册这个过程,多数企业都会跟用户有一个基于Email的交互,一般用于激活帐号或者验证帐号,在前端时间帐号泄密的一些列事情的推动下,以后会有更多的企业都会跟用户之间有一个这样的交互。一般用户在这样的互联网产品(服务)上注册表明其就本次而言,该产品(服务)对其产生了价值,所以才会有这样一个互动,就这次互动本身大多数公司就把其当作是一个激活也好验证也好的一个过程,这样就挺好,明确完成了这个交互的需求,完成这个过程应该到此就结束了。

对于用户:激活或者验证完,可以使用该产品(服务)了,如果使用良好,以后肯定会成为该企业的一个长久用户,产生长久效益;

对于企业:有了经过验证的用户数据了,可以进行产品或服务的推荐了;

我想更多的是企业考虑如何提供更好的能够满足用户的产品,这才是正道,只有具有核心价值的产品(服务)才能留住更多的用户。对于产品或服务的推荐呢,应该是变相的电子邮件营销,应该对自身拥有的用户行为数据进行挖掘有选择性的推荐,而不是像现在很多企业强制性的频繁的推荐,几乎每天都能收到大量的邮件推荐这个推荐哪个,如果确实是所需要的推荐,那么双方皆大欢喜,可现在我自身每天收到的确不是我想要看到,时间久了,也就厌烦了,以前可能使用这个企业的产品(服务)现在也就不会使用了,直接设为垃圾邮件,OK,以后就不会再想起这个了,这样也就意味着失去了一个本来可能成为活跃的用户。

我想是不是在推荐的时候考虑以下几点:

1、应该让用户选择是不是接收推荐(就像软件有更新了要让用户选择是不是更新),或者有很方便设置不接收推荐的选项;

2、是不是考虑适当的周期推荐一次(有重大活动或者里程碑的节点,或者是固定的周期,每天都推或每天推几次容易让人厌烦);

3、是不是根据用户行为数据进行精确的推荐,大而全的推荐在很容易让人淹没在信息中而不知所措;

互联网给人带来方便的同时,其爆炸式的信息洪流也很容易让人淹没在网络中,往往大半天过去了,在网上翻腾不到自己所需的东西,所以精确的推荐在以后会是越来越多的人所需要的,但是这个推荐应该是真实的,有效的,用户认可的。

两道考察面试人员的笔试题

对于约来面试的人员我一般情况都以相互聊天为主,通过聊天交流使得双方有一个初步的了解,同时大都也能通过交流了解到对方的对于开发的一些看法及自己是否有兴趣或者有志于在此行业内工作,也能了解到从业的经历及项目经验,乃至于期望。但有时我也会突然随机的在纸上写一些基础的代码来检查一下来参加面试的人员基础知识,今天首先出了一题,初始写下的代码如下:

using System;
public class SimpleBase
{
  int i = 0;
  bool b = true;
  if(b & (i++ > 0))
  {
    Console.WriteLine("i = {0}", i);
  }
}

问题:1.这段程序能正常编译吗?

2.如能正常编译,编译后生成的SimpleBase.exe执行后的结果是什么?

3.如果能够正常编译,将if语句中的(i++>0)更改为(i++ == 0)后执行结果又是什么?

4.如果能够正常编译,将if语句中的&更改为&&后执行结果又是什么?

5.为什么?

这个题应该算是比较简单的吧,很遗憾的是未能取得我想要的结果,话说Java更熟悉一些,于是有了第二道题,相对我还算是比较耐心的吧!

public class SimpleBase {
  public static void main(String[] args) {
    byte b = 0;
    int i = 0;
    long l = 0;
    float f = 0.2;
  }
}

问题:这段程序能正常编译吗?如果不能请说出其错误的地方。

到这里整个面试过程也就结束了!写下这篇日志,予以记录,也是给自己提个醒,其实随着在这行工作的时间增长,感觉基础确实是有必要掌握的。

另外再说几句,假如是参加研发工程师/软件工程师/程序员诸如此类的身临代码第一线的人,感觉实在是需要对这些基础予以掌握,毕竟这些是每一门语言学习中基本都会经历到的,在IT行业其实还有很多其他的岗位则相对于这些可以忽视,例如需求工程师、系统分析师、产品经理、项目经理等。依据自身的职位申请,请做相应的准备。