【Go】为什么 Go 语言把类型声明放在后面?

关于类型,官网上有一段仔细地介绍了一下函数指针的部分,现在的设计比起 C 的语法,清晰很多。

也就是说,类型放在后面是为了更加清晰易懂。Rob Pike 曾经在 Go 官方博客解释过这个问题(查看原文:Go’s Declaration Syntax),简略翻译如下(水平有限翻译的不对的地方见谅):

引言

Go语言新人常常会很疑惑为什么这门语言的声明语法(declaration syntax)会和传统的C家族语言不同。在这篇博文里,我们会进行一个比较,并做出解答。

C 的语法

首先,先看看 C 的语法。C 采用了一种聪明而不同寻常的声明语法。声明变量时,只需写出一个带有目标变量名的表达式,然后在表达式里指明该表达式本身的类型即可。比如:

1
int x;

上面的代码声明了 x 变量,并且其类型为 int——即,表达式 xint 类型。一般而言,为了指明新变量的类型,我们得写出一个表达式,其中含有我们要声明的变量,这个表达式运算的结果值属于某种基本类型,我们把这种基本类型写到表达式的左边。所以,下述声明:

1
2
int *p;
int a[3];

【Machine Learning】机器学习:简明入门指南

本文是一篇转载自伯乐在线的译文,英文原文是这里:Machine Learning is Fun! — by Adam Geitgey

在听到人们谈论机器学习的时候,你是不是对它的涵义只有几个模糊的认识呢?你是不是已经厌倦了在和同事交谈时只能一直点头?让我们改变一下吧!

本指南的读者对象是所有对机器学习有求知欲但却不知道如何开头的朋友。我猜很多人已经读过了“机器学习” ——维基百科词条,倍感挫折,以为没人能给出一个高层次的解释。本文就是你们想要的东西。

本文目标在于平易近人,这意味着文中有大量的概括。但是谁在乎这些呢?只要能让读者对于ML更感兴趣,任务也就完成了。

【Android】使用shape的同时,动态替换shape的颜色属性

在实现布局的时候,有些按钮形状相同,只是颜色有差异,如果使用自定义shape实现了其中一种按钮,有没有可能不需要再为其他每个颜色都写一个shape文件呢?

一、问题

比如以下这三个按钮:

三个样式相同的按钮

为第一个灰色按钮自定义背景如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:color="@color/gray">

<corners
android:radius="60dip"/>
<stroke
android:width="0dp"
android:color="@color/gray" />
<solid
android:color="@color/gray" />
</shape>

然后,如果再为每个颜色的按钮都写一个shape背景也太麻烦,重用性太差。

BAT人才体系的职位层级、薪酬、晋升标准

互联网圈有这么一句话:百度的技术,阿里的运营,腾讯的产品。那么代表互联网三座大山的BAT,内部人才体系有什么区别呢?可以先看看这个话题百度、腾讯和阿里内部的级别和薪资待遇是什么样的?

★ 腾讯 ★

1、职级

腾讯职级体系分6级,最低1级,最高6级。同时按照岗位又划分为四大通道,内部也叫“族”,比如:

产品/项目通道,简称P族
技术通道,简称T族
市场通道,简称M族
职能通道,简称S族

以T族为例,分别为:

  • T1:助理工程师 (一般为校招新人)

  • T2:工程师

  • T3:高级工程师 3-1相当于阿里的p6+到p7(能力强可能到p7)

  • T4:专家工程师

  • T5:科学家

  • T6:首席科学家

【Android】dip和px之间到底如何转换

在Android xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。

但是在代码中,如何处理呢?很多控件的方法中都只提供了设置px的方法,例如setPadding,并没有提供设置dp的方法。这个时候,如果需要设置dp的话,就要将dp转换成px了。

一、名词介绍

1. PPI = Pixels per inch,每英寸上的像素数,即 “像素密度”

  • xhdpi: 2.0

  • hdpi: 1.5

  • mdpi: 1.0 (baseline)

  • ldpi: 0.75

下图是Android官网dpi的定义(其实在计算机中dpi就是ppi,不明白可以看这里 dpi与ppi区别):

同时也注意,是dpi,不是dip。

dpi是Dots Per Inch,每英寸点数。(一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。是现实概念)。

dip是Device Independent Pixels,设备独立像素。(又称设备无关像,是人为抽象概念 )。

官方dpi定义

2. dp = 也就是dip(device independent pixels),设备独立像素。

以160PPI屏幕为标准,则1dp=1px,在不同的像素密度的设备上会自动适配,比如:

  • 在320x480分辨率,像素密度为160,1dp=1px
  • 在480x800分辨率,像素密度为240,1dp=1.5px

    计算公式:1dp*像素密度/160 = 实际像素数

3. sp = scaled pixels,放大像素,它是安卓的字体单位

主要用于字体显示best for textsize。根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知 Android 默认使用 sp 作为字号单位。

【Android】Monkey压力测试与停止

一、Monkey 是什么?

Monkey测试是Android自动化测试的一种手段。该工具用于进行压力测试,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出现的问题。

二、Monkey命令

1). 标准的monkey 命令
[adb shell] monkey [options] < eventcount > , 例如:

adb shell monkey -v 500

产生500次随机事件,作用在系统中所有activity(其实也不是所有的activity,而是包含 Intent.CATEGORY_LAUNCHER 或Intent.CATEGORY_MONKEY 的activity)。
上面只是一个简单的例子,实际情况中通常会有很多的options 选项.

2). 四大类

  • 常用选项
  • 事件选项
  • 约束选项
  • 调试选项

具体的命令解释可以看这里:android 压力测试命令monkey详解

【Android】App应用崩溃(Crash-Force Close)之后如何让它自动重启?

英文原文: Auto Restart application after Crash/Force Close in Android.

手机上的Android应用,经常会出现“Force Close”的错误,这种情况一般是因为代码中没有正确获取到Exceptions。那么如果想让App在出现这种错误崩溃Crash以后自动重启,我们该怎么办呢?

这篇教程我们将学到如何自动处理Exception,并且了解在App Crash以后如何自动重启。

其实方法很简单,这里我们需要用到 Thread.setDefaultUncaughtExceptionHandler(),当应用崩溃的时候代码就会自动调用 uncaughtException() 这个方法。

【SVN】使用patch命令保存更改

使用svn管理工程代码时,有些时候的更改尚未整理好,需要暂时搁置,转而进行下一个任务,此时就需要将当前的更改(diff)暂时保存下来,忙完其他的任务之后再继续进行。但是如果不进行commit,怎么保存当前的更改呢?答案是使用 patch 命令!

一、生成patch文件

1
2
svn diff > patchFile 			// 整个工程的变动生成patch
svn diff FILE_NAME > patchFile // 某个文件单独变动的patch

二、svn回滚

1
2
3
svn revert FILE 				// 单个文件回滚
svn revert DIR --depth=infinity // 整个目录进行递归回滚
svn revert . --depth=infinity // 当前目录进行递归回滚

【Java】按位存储:使用int存储boolean数组

有一种场景,比如App设置页中会有一组开关选项,这个时候保存这些开关的状态,如果每个按钮都对应一个boolean值的话,太大材小用显得鸡肋,频繁读取SharedPreferences 存取效率自然快不过一次读取。

首先,敲定每个boolean值存储的位置

1
2
3
4
5
private int mBroadcastCustomValue = 0;   //用来存储的int值
public static final int BROADCAST_TYPE_CUSTOM_BASE = 1;
public static final int BROADCAST_TYPE_CUSTOM_TRAFFIC = 1 << 1;
public static final int BROADCAST_TYPE_CUSTOM_CAMERA = 1 << 2;
public static final int BROADCAST_TYPE_CUSTOM_SAFE = 1 << 3;

一、添加Add

1
2
3
4
5
6
private void addLevel(int level){
mBroadcastCustomValue |= level; //add
}

//调用方式如下
addLevel(BROADCAST_TYPE_CUSTOM_BASE);

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 iTimeTraveler All Rights Reserved.

访客数 : | 访问量 :