二叉树的遍历
准备工作
我们定义一个树的结点的结构体如下,
123456789101112struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int val) : val(val), left(nullptr), right(nullptr) {} TreeNode(int val, TreeNode *left) : val(val), left(left), right(nullptr) {} TreeNode(int val, TreeNode *left, TreeNode *right) : val(val), left(left), right(right) {}};
定义一系列调试输出函数
12345678910111213141516171819202122232425262728293031// 美化输出一颗二叉树void output(TreeNode *root) ...
创造一块虚拟硬盘
/dev/zero讲解
在Linux中,文件/dev/zero是在逻辑上存放了无限大小的0x00数据。
我们可以写一段简单的Python脚本验证,
1234f = open('/dev/zero')f.read(1)f.read(10)f.read(100)
如下图,可以发现输出结果全是字节为0的二进制数据。
注意:read中参数表示一次读取多少字节数据,如果你不传入参数,即使用默认参数-1,就表示一次性完整读取整个文件并加载到内存中,然而/dev/zero是逻辑上的文件,拥有无限大小,永远也读不完。所以,如果你直接使用f.read()那么你可以看到电脑内存将飙升,直到内存不足死机。[doge]
创造虚拟硬盘
现在,我们需要创建一块虚拟硬盘,虚拟硬盘本质上就是一个文件,把这个文件当作一块硬盘,进行原始的读写硬盘操作,所以创建一块虚拟硬盘就是创建一个一定大小的文件。我们现在有一个目标,就是创建一块100M大小的文件,内容全部填充为0x00。
在Linux中,使用cat命令可以读取文件并输出到终端,使用>操作符可以使终端输出重定向到指定文件的输入。
我们使用 ...
Android-ConstraintLayout实战
需求分析
使用ConstraintLayout,完成以下布局的设计
实施
整体边距约束
对最外层ConstraintLayout添加属性,实现整体的内边距
android:padding=“20dp”
第一个标题
设置尺寸自适应,字号30sp,加粗显示后
设置该控件位于父容器左上角,即
Start与父容器的Start对齐
app:layout_constraintStart_toStartOf=“parent”
Top与父容器的Top对齐
app:layout_constraintTop_toTopOf=“parent”
123456789<TextView android:id="@+id/third_text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" android:textStyle ...
Android-LinearLayout实战
需求分析
使用LinearLayout实现如下布局,
实施
定义形状
矩形的左下右上设置圆角半径50dp
创建drawable/half_circle_rect.xml
12345<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:topRightRadius="50dp" android:bottomLeftRadius="50dp"/></shape>
定义布局
分析可得,最外层LinearLayout使用水平方向排列,且宽度比为1:1
左右两侧LinearLayout使用垂直方向排列,宽度比分别为1:1:1与1:2
所有的子元素均有一定外边距,且最外层布 ...
Android-RelativeLayout实战
需求分析
实现如下图所示的效果
需要设置字体大小,对齐方式,组件间隔,按钮样式
最外层布局具有一个整体的内边距
当点击按钮时,背景色改为红色,字体颜色改为黄色
当输入框捕获焦点时(点击时),要求其边框为加粗的蓝色圆角框,否则要求其边框为细的灰色圆角框
仅使用相对布局实现
布局实施
整体内边距
设置最外层RelativeLayout的paddingHorizontal边距
android:paddingHorizontal=“10dp”
确定退出文字设计
最顶端有一个居中的“你确定要退出吗?”文本显示,使用TextView来实现
设置TextView的尺寸适应内容,文本内容,文字大小,加粗显示,水平居中,
由于相对布局需要知道其兄弟组件名,赋予其id为text1
12345678<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="你确定要退出吗?& ...
操作系统45讲-2
main函数调用之前的代码
编写如下的汇编入口代码, entry.asm
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596;彭东 @ 2021.01.09MBT_HDR_FLAGS EQU 0x00010003MBT_HDR_MAGIC EQU 0x1BADB002 ;多引导协议头魔数MBT_HDR2_MAGIC EQU 0xe85250d6 ;第二版多引导协议头魔数global _start ;导出_start符号extern main ;导入外部的main函数符号[section .start.text] ;定义.start.text代码节[bits 32] ;汇编成32位代码_start: jmp _entryALIGN 8mbt_hdr: ...
操作系统45讲-1
代码编写
写个HelloWorld
123456#include <stdio.h>int main(int argc, char const *argv[]){ printf("hello world!\n"); return 0;}
代码编译
程序的编译过程如下图,
根据源文件生成预处理文件 HelloWorld.i
1gcc -E HelloWorld.c -o HelloWorld.i
根据预处理文件生成汇编文件 HelloWorld.s
1gcc -S HelloWorld.i -o HelloWorld.s
根据汇编文件生成目标文件 HelloWorld.o
1gcc -c HelloWorld.s -o HelloWorld.o
根据目标文件生成可执行文件
1gcc HelloWorld.o -o HelloWorld
代码执行
运行可执行文件
1./HelloWorld
代码反编译
反编译可执行文件
反编译可执行文件 HelloWorld.dump
1objdump -d HelloWorld ...
Manjaro中zsh在vscode下乱码
在Manjaro下,vscode使用zsh产生乱码,如下图所示,
打开设置,搜索terminal font
找到设置项Terminal › Integrated: Font Family
设置为NotoSansMono Nerd Font
如下图即可显示正常
Linux下优雅地通过docker-easyconnect实现内网访问
在Linux下用过EasyConnect的小伙伴应该知道,EasyConnect在Linux环境下相当难用。笔者之前在Ubuntu20.04下安装EasyConnect打开后闪退。
闪退问题主要是系统库太新了,而EasyConnect还没升级依赖库。网上有解决方案,但是打开后还是有一定概率闪退。而且连接成功后,莫名其妙导致电脑只能访问EasyConnect内网环境,外网无法访问。
最近,更换到Manjaro 21后,通过yay安装软件真香,但是只有EasyConnect安装失败,于是便探索出一个方法。
EasyConnect In Docker
使用容器化技术,将EasyConnect封印在Docker中运行。
该项目Github主页如下,docker-easyconnect
电脑安装Docker后,通过如下命令即可一键运行docker-easyconnect镜像
1docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -p 127.0.0.1:1080:1080 -p 127.0.0.1: ...
淘宝架构的演进
本文作为朱栩老师的上课笔记
原文如下,
淘宝技术架构演进之路 - 云+社区 - 腾讯云 (tencent.com)
基本概念
分布式系统
一个系统的多个模块在不同服务器上部署
高可用
系统中部分节点失效,其他节点能够代替它继续完成服务,可认为系统具有高可用性。
集群
一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务。
负载均衡
请求发送到系统时,通过某些方式把请求均匀分发到多个节点上,使系统中每个节点能够均匀的处理请求负载,则可认为系统是负载均衡的。
代理
正向代理
系统内访问外部网络时,通过一个统一的代理服务器把请求转发出去,从外部看来该请求就是代理服务器发出的,此时代理服务器实现了正向的代理。
反向代理
外部请求进入系统时,代理服务器把该请求转发到系统内的某个服务器,从外部看来,该请求的处理者就是代理服务器,此时代理服务器实现了反向代理。
架构演进
架构0 单机架构
一个非常普通,非常简单的单机架构,只有一台服务器主机,Tomcat与数据库放在同一台服务器上。
随着用户数的增长,单机应对并发读写数据库的场景成为瓶颈。
单机架 ...