JasonWang's Blog

JasonWang's Blog

从HTTP到HTTPS

HTTP 自从上世纪90年代随着WEB的诞生而出现的,是所有WEB应用的基础。随着网络购物、电子商务、网上银行等逐渐普及,HTTP本身存在信息窃听与身份伪装等问题,已很难满足人们对于可信安全的通信环境的需求了。如何确保用户隐私与数据不被非法获取,这是HTTPS(HTTP Secure )需要解决的问题。使用HTTPS协议的网站,一般都以https开头而不是http,如:https://tools.ietf.org/html/rfc2246

那么,从数据安全的角度来看,HTTP有哪些不足了?

  • HTTP本身不具备加密功能,因此请求与响应都没有经过加密,而使用的是不加密的明文,因此内容可能会被窃听;
  • 通信时不会验证通信方(client/server)的身份,任何人都可以发送请求,而服务器对于所有请求也照单全收,因此客户端与服务端都有可能被伪装;
  • 在传输数据时,报文可能被篡改或者攻击,无法保证报文的完整性(integrity);这种在请求与数据传输过程中,被攻击者拦截并篡改的攻击方式被称为中间人攻击(Man-in-the-middle attack );
《人类简史》札记

作为文化的中国,其实已经灭亡了。。。为什么中国人在这一百多年,老是把传统和现代,把西方文化和中国文化对立起来,为什么我们不能像欧洲那样把传统和现代的关系处理的那么好?

粟宪庭

history in book

Java中的垃圾回收机制

Java将所有运行时的分配的对象保存到堆(heap)中,虚拟机通过诸如new,newarray,anewarray以及multianewarray等指令来分配对象,但并不会在代码中显式的释放这些内存区域,而是由虚拟机中自带的内存回收器(Garbage Collection,以下简称GC)来负责内存分配、压缩以及回收。GC的主要任务就是找到堆中那些不再被引用的内存对象,将其回收用于分配新的对象;同时,GC还要负责压缩堆内存分片,减少内存碎片,确保新的对象有足够的连续空间可以使用。GC让开发人员不用再担心内存释放的问题,提升了开发效率;在另外一个方面,GC使开发人员不用再担心错误的释放了某个对象,确保了程序的完整性。但使用GC的一个潜在弊端是,GC在收集内存时会增加程序负担,减低程序运行效率。

接下来,就来看看Java虚拟机中常用的垃圾回收算法。

垃圾收集算法

任何垃圾收集算法都需要做如下几件事情:

  • 检测需要回收的对象;
  • 回收“垃圾”对象所占用的内存,将这些内存提供给程序使用;
  • 对内存进行去碎片化处理;
Java虚拟机入门

Java诞生于互联网兴盛的上世纪90年代,为了在不同终端设备上运行Java程序,其在设计之初,就考虑到了语言的可移植性,确保编写完后,可以在任何平台上运行。随着互联网时代的来临,Java因其平台无关性(platform independence), 安全性(security)、网络可移动性(network mobility)以及内存自动管理(Garbage Collection)等特征而得到了广泛的应用。那么, Java的这些特性究竟是如何实现的?相比早前的C/C++等编译型语言,Java程序首先被编译成一个个包含了字节码(bytecode)的.class文件,运行时,.class文件被加载Java虚拟机(Java Virtual Machine)上执行。实际上,任何其他语言只要能够编译成JVM能够识别的bytecode, JVM都可以执行

如何用JobScheduler进行任务调度

Android从5.0开始添加了一个任何调度服务JobSchedulerService,APP可以通过该服务进行各种任务的调度,如定时任务,与服务器同步资源,下载特定信息等。由于JobScheduler通过收集各个应用的调度任务,采用批处理的方式,允许多个任务同时运行,可以让设备具有更长的睡眠时间, 从而延长了电池使用。这篇文章,主要从应用与原理两个方面讲述分析JobScheduler

Circuit Switching & Packet Switching

通信网络中的两个节点需要交换数据,通常有两种数据传输方式: Circuit Switching (CS, 链路交换)以及Packet Switching (PS, 分组交换)。链路交换早在19世纪便在电讯行业中使用了。对于CS网络,呼叫方(caller)首先需要与被被叫方(callee)建立一个专用的链接,通信才可能进行,双方通信期间,需要占用一定的频带或者时间资源,通信结束,资源才会释放,如果网络出现拥塞,无法分配资源,则通信失败 。下图是链路交换网络通信示意图:

CS

Android 动画

Android为开发者提供了强大的动画功能,常见的有属性动画(property animation)、视觉动画(view anmiation)以及可绘制对象动画(Drawable Animation),属性动画可以用于任何对象(视图对象或者非视图对象)的任何属性,而视觉动画则只能用于可视对象的某些属性,如颜色,大小,以及旋转等;可绘制对象动画利用一系列Drawable资源创建连续的帧动画。

GSM短信的发送与接收

GSM中,短消息(SMS,Short Message Service)有两种发送模式,一个是文本模式(所有字符都以可读的字符发送),一种是PDU模式。文本模式下,SMS字符都依照GSM 03.38标准中的默认的7-bit字符表进行编码(表格如下):

GSM3.38 charsets

在PDU(Protocol Data Unit)模式下,SMS通过编码成特定的二进制串发送出去,在该模式下,PDU数据不仅包含了消息字符,还包括很多元数据,比如短信中心地址(SMSC),字符编码格式以及时间戳等。根据ETSI标准(GSM 03.40 & GSM 03.38), 单条短信采用7-bit编码时最长可达160个字符,若采用8-bit字符编码则最多包含140个字符,而对于中文、韩文以及日文等东亚文字通常需要16-bit编码,则实际上能发送的文本长度只有70个字符,因此发送长短信时,需要将长短信分割成多个单一的短信(每条短信的长度不超过160个字符)。

Java Annotation

在Java中,Annotation(注解)是一种可添加到源码中的句法元数据(Java annotation),类、方法、变量、参数以及包都可以进行注解。

注解主要有如下几个用途:

  • 为编译器提供信息: 编译器使用annotation来检测错误或者消除警告;
  • 编译或者部署时处理: 可以利用注解信息产生代码,XML文件等;
  • 运行时处理: 可在运行时检查注解,产生相应的代码;
如何在Android中查看进程状态

在Android开发调试过程中,常需要使用ps指令用于获取当前系统进程的快照信息(如果想要获取进程动态信息,则需要使用top命令)。通过ADB SHELL连接上手机后,输入adb shell命令进入shell控制台, 输入ps即可查看当前系统所有进程信息:

ps all process

avatar
JasonWang
生命短暂,莫空手而归