Thrift引言Thrift是一个跨语言的RPC框架(Remote Procedure Call),用于服务之间的通信。它把过程封装到一个函数中,它可以让不同编程语言无缝结合,使得调用者像调用本地服务一样方便。
Thrift优势
开发速度快:用户只需编写IDL,编译器自动生成服务端骨架和客户端桩(Stubs)
接口维护简单:只需维护IDL
学习成本低:面向对象风格
支持多种语言:Java、Python、C++等
稳定且广泛使用:Hadoop
架构Thrift自顶向下可分为5层
传输层(Transport Layer):负责从网络中读取数据和写入数据,定义了具体的网络传输协议,例如TCP/IP
协议层(Protocol Layer):定义了数据传输格式,负责网络传输数据的序列化和反序列化,例如JSON、XML、二进制数据等
处理层(Processor Layer):由具体的接口描述语言IDL生成,封装了具体的底层网络传输和序列化方式,委托给用户实现的Handler处理
服务层(Server Layer):整合上述组件,提供具体的网络IO模型(单线程/多线程 ...
SSH 和 SCP1. SSH 登录基本用法远程登录服务器
123# ssh 用户名@IP地址或域名ssh user@hostname [-p 22] # 22 是 ssh 默认端口
第一次登录时会有安全提醒,输入 yes 缺人要远程登录服务器,之后输入密码即可登录成功。登录成功之后会将服务器的信息记录到 ~/.ssh/known_hosts 文件中,下次登录的时候就不会再显示安全提示了。
配置别名登录在 .ssh/ 目录下创建 config 文件
设置服务器别名、User、HostName,可以为多个服务器设置别名。
12345678Host myserver HostName IP地址或域名 User 用户名Host myserver2 HostName IP地址或域名 User 用户名
之后再 ssh 连接服务器的时候就不用之前输入用户名@HostName 那么麻烦了,直接使用别名登录 ssh myserver,输入密码登录。
免密登录使用密钥可以免密登录,每次输入密码很麻烦对不对~
先生成密钥
12ssh-keygen
生成的密钥会放在 ~/.ss ...
shell语法概论终端可以看做逐条执行的shell脚本,Linux默认使用bash,脚本文件第一行必须为
12#! /bin/bash
可通过两种方式执行shell脚本
解释器执行:bash xxx.sh
作为可执行文件执行
添加执行权限chmod +x xxx.sh
执行./xxx.sh
注释单行注释:类似python,用#注释
多行注释:
1234:<<EOF...EOF
其中EOF可替换成任意字符串,例如abc
变量定义变量
定义不需要$,而且=两边不能有空格。字符串可用单引号、双引号或不用引号描述,例如下边三种变量声明都是正确的。
1234name1='abc'name2="abc"name3=abc
引用变量
需要用$,可用{}限定变量名边界,实现字符串与变量混合表示
12echo ${name1}defg # 输出abcdefg
只读变量
声明前加上readonly或declare -r
123readonly name1declare -r name2
删除变 ...
tmux 和 vimtmuxtmux 优势
不需要本地编译器,只需要终端编译器
不用担心断网,自动恢复现场
分屏
结构:tmux 允许有多个 session,一个 session 允许有多个 window,一个 window 允许有多个 pane
修饰键:ctrl a
通常修饰键的使用规则是,按下并释放后,再按其它键,而不是同时按下。
键盘操作
操作
快捷键
说明
新建 session
tmux
在终端中输入,不能在 tmux 中嵌套
左右分屏
修饰键 %
把当前 pane 拆分成左右两部分
上下分屏
修饰键 "
把当前 pane 拆分成上下两部分
关闭当前 pane
ctrl d
如果没有 pane,则关闭 window;如果没有 window,则关闭 session
选择相邻 pane
修饰键 方向键
选择界面汇中相邻的 pane
调整分割线
修饰键 方向键(同时按下)
调整 pane 分割线位置
全屏
修饰键 z
将当前 pane 全屏/取消全屏
挂起 session
修饰键 d
将当前 session 移至后台
...
Linux
未读常用命令总结1. 命令行常用快捷键查找
Ctrl + r:在命令行中查找之前输入过的命令,回车直接执行,可以通过多次按 Ctrl + r 继续向前查找。
移动
Ctrl + a:光标移动到行头
Ctrl + e:光标移动到行尾
Alt + f:移动光标到单词的末尾,再次按移动到后一个单词的末尾(以单词为单位移动)
Alt + b:移动光标到单词的开头,再次按移动到前一个单词的开头(以单词为单位移动)
删除
Ctrl + u:删除当前光标位置之前的命令
Ctrl + k:删除当前光标位置之后的命令
Alt + d:删除后边的一个单词
Alt + Backspace:删除前边的一个单词
Ctrl + y:删除之后的命令可以通过 Ctrl + y 找回
其他
Ctrl + c:终止当前输入,切换到下一行
Ctrl + Insert:鼠标选中
Tab:命令智能补全
Up、Down:上下方向键切换历史命令
参考链接:
https://www.cnblogs.com/cocowool/p/move-cursor-quick-in-bash.html
2. Linux 常用命令
ls:查 ...
Linux
未读管道、环境变量及其常用命令1. 管道 |管道简介管道可以连接多条命令,并将前一个命令的标准输出 stdout 作为下一个命令的标准输入 stdin。当我们可以把一个任务分解成多条命令的时候,管道操作非常常用。
注意:
管道命令仅处理标准输出 stdout,忽略错误 stderr
管道右边的命令必须能够接收标准输入 stdin,才能将当前命令的标准输出传给它。
管道命令与文件重定向类似,最主要的区别:
文件重定向左边是命令,右边是文件,将左边命令的标准输出输出到文件中。
管道左右两遍都是命令,且左边要有 stdout 右边要能够接收 stdout。
管道可以接多条命令,ps -aux | grep "java",而文件重定向将左边一条命令的输出重定向到指定的文件。
示例1、统计当前目录下所有 python 文件总行数
12find . -name "*.py" | xargs cat | wc -l
find:查找当前目录下所有后缀名是 .py 的文件
xargs:将 find 的输出结果作为参数传给 cat 命令,即查看这些 .py ...
GitGit 简介Git 是一个版本控制工具,可以记录我们每次提交到 Git 中的版本,便于版本控制,以及还有一个重要的功能就是协作开发。
Git 的版本控制是基于树结构的,开始状态只有根节点(空节点),之后每提交一个版本就会在根节点下添加一个节点,同时 HEAD 指针会指向这个节点。默认是在 master 分支上操作,可以创建其他分支多人协作开发,比如 dev 分支,在 dev 分支上开发完成之后再合并到 master 分支上。
Git 命令1. Git 配置配置全局用户名和邮箱用于唯一标识一个用户
123git config --global user.name tonngwgit config --global user.email xxx@qq.com
配置的信息会存在家目录下 ~/.gitconfig 文件中不使用 --global 的话则当前信息只在此项目中生效
2. 快速开始首先创建一个项目文件夹,比如 project,想让 git 管理这个文件夹里的所有内容。
第一步:git init
进入 project 文件夹,初始化 git 仓库 git init
ls -a ...
🔺设计模式
创建型设计模式(5种)1. Simple Factory(简单工厂)简单工厂模式属创建型模式,但不属于23种设计模式之一。
定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。 在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被成为静态工厂方法(Static Factory Method)。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152/* *简单工厂模式 */public class SimpleFactory { public static void main(String[] args) { Product productA = Factory.createProduct("A"); productA.info(); Product productB ...
嵌入式原理振荡周期、状态周期、机器周期、指令周期的关系什么是嵌入式关键字: 受限受限的设备 资源受限 成本受限 性能受限
嵌入式系统有什么CPU运算器,控制器
内存寄存器1.累加器 A也叫 ACC。用作累加(加减乘除都可以变化为加法)
2.寄存器 B作为执行乘法和除法操作而设置的
3.特殊寄存器(如 P1.0,p0.1 等)4.PSW(*)
CY(PSW.7):进位标志位
AC(PSW.6):辅助进位标志位,当低四位向高四位进位或借位时,AC 置为 1
F0 (PSW.5): 标志位
RS1、RS0:用于选择工作寄存区
OV(PSW.2) : 溢出标志位,溢出则置 0
PSW.1 位:该位是保留位
P(PSW.0):奇偶标志位:奇偶标志位对串行口通讯中的数据传输有重要的意义,常用奇偶检验的方法来检验数据传输的可靠性
程序状态寄存器 PSW 的格式
注意:(ODO).5 =>D5 考试中遇到要能分辨
D7<—————————————————–D0
D7
D6
D5
D4
D3
D2
D1
D0
CY
AC
F0
RS1
RS0
OV
-——
P
工 ...
算法思路希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成多个组。所有距离为的记录分在同一组内,并对每一组内的记录进行直接插入排序。然后,取重复上述分组和排序的工作。当到达=1 时,所有记录在统一组内排好序。
图解
算法特性希尔排序的特性总结:希尔排序是对直接插入排序的优化。直接插入排序的特定就是数据越有序,速度越快。
当 gap > 1 时都是预排序,目的是让数组更接近于有序。当 gap == 1 时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。
时间复杂度:希尔排序的时间复杂度不好计算,因为 gap 的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定: 有学者通过大量的试验统计,得出结果为:O(n1.25) - O(1.6*n1.25)
空间复杂度:O(1)
稳定性:不相邻的元素也会进行位置交换,是不稳定。
算法实现C++123456789101112131415161718192021222324252627282 ...