谭浩的博客

Simple is beauty.

分布式系统--了解RPC

远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。

为什么需要RPC

基于socket接口我们也可以编写分布式应用,但是该方法存在着一些缺点。许多的细节需要程序员去处理,比如如何在同一个连接中分离不同的请求?不同机器上不同的方式实现的进程如何从网络读写数据?

正如计算机中其他问题的解决思路一样,我们可以在socket上提供另一层,隐藏一些和实际任务关系不大的细节,这一层也就是RPC。RPC提供易于网络编程的通信,使客户端服务端通信透明化,程序员无需关注网络通信的细节。最终达到让远程过程调用表现为本地调用的目标。

每周分享(1)

本文主要内容是本人这一周的总结,并分享一些个人认为有用的资源。

一句话放在前面,该话来自于HUST心灵之约的邮件最后的一句话(算是一碗心灵鸡汤吧),邮件全文主要是介绍孤独对于人身心的影响。

或许思想上的孤独才是孤独最大的危害,如果一个人的头脑里没有不同的声音,缺少相反的思想,就容易极端地行事

Java序列化与反序列化

介绍

序列化是将一个对象转化为字节流,反序列化则是相反的操作。通过序列化对象可以被存储到数据库中或者通过网络进行传输。本文介绍Java内置的序列化机制。

序列化与反序列化

设计模式 —— 静态代理 VS 动态代理

什么是代理模式?

代理模式是一种结构型模式,当需要控制和管理受保护对象的访问的时候,我们就需要创建一个代理类。代理模式不仅广泛运用在程序世界中,现实生活中也有广泛运用,比如我们通过第三方应用软件购买火车票,通过中介租房,银行卡作为银行账户的代理等等。代理模式中,代理对象和被代理的对象拥有相同的方法,客户端不是直接调用对象方法而是调用代理对象方法,通过代理模式我们可以方便的实现以下功能:

  • 在方法执行前后打印日志
  • 记录方法的执行时间
  • 对方法参数进行检查等等

理解MapReduce

基本介绍

MapReduce是一种编程模型,用于简化集群上的数据处理。用户使用一个 map 函数处理一个键值对产生一系列中间键值对,使用 reduce 函数将相同的中间键的值合并处理。按照此种方式编写的程序可以自动地在多机上并行执行。

Cheat Sheet for Scala

本文翻译自 https://www.coursera.org/learn/progfun1/supplement/Sauv3/cheat-sheet

求值规则

  • Call by value(应用序求值):在调用函数前先求参数的值;先求值参数而后应用
  • Call by name(正则序求值):先求函数,再按需求值参数;完全展开而后归约
1
2
3
4
5
6
7
def example = 2  //调用时求值
val example = 2 //直接求值
lazy val example = 2 //需要时求值

def square(x: Double) //应用序求值
def square(x: => Double) //正则序求值
def myFct(bindings: Int*) = {...} // bindings是一个Int序列

Bash脚本基础

bash操作符基础

shell的类型

在unix系统中,可以通过环境变量SHELL找到shell的类型:

1
$ echo $SHELL # 在我的电脑下,输出结果为/bin/zsh,这就是shell可执行文件的路径。

注意 路径可以是绝对路径,如/bin/zsh从系统根目录开始,也可以是相对路径,从当前目录开始(.)。可以列举当前目录ls ./,列举父目录ls ../