首页 文章 精选 留言 我的

精选列表

搜索[源码学习],共10000篇文章
优秀的个人博客,低调大师

学习python

Python循环嵌套 利用for、while语句的连用进行python的循环 For m in list1: Fornin list2: …… …… While experion: While expersion : Statement(s) Statement(s) Python break语句 break在python中的应用和C/C++中的应用是一样的,break用来终止循环语句。 Break用于while和for循环中,当使用嵌套循环时,break语句将停止执行最深层的循环,并开始执行下一行代码。 Python continue语句 Continue语句跳出本次循环,break跳出整个循环 Contiune语句用来告诉python跳出当前循环的剩余语句,然后继续进行下一轮循环。 Python pass语句 pass是空语句,是为了保持程序结构的完整性。 Python日期和时间 Python可以通过time和calender模组来处理时间,详细可以查看模组表 python函数 定义一个函数 函数代码块以def关键词开头,后接函数标识符名称和圆括号()。 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数内容以冒号起始,并且缩进。 Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。 语法 1 2 3 4 deffunctionname(parameters): "函数_文档字符串" function_suite return[expression] 所有的参数(自变量)在python里都是按引用传递,如果调用函数,修改参数,原始的参数也会被改变 参数在调用函数时使用的正式参数类型: 必备参数(参数必须以正确的顺序传入函数,调用的数量和声明时的一样)、命名参数(调用方式参数的命名确定传入的参数值,可以跳过不传参数或者乱传参数)、缺省参数(调用时缺省参数的值没有传入,则被认为时默认值)、不定长参数(处理比当初声明时更多的参数) 不定长参数: deffunctionname([formal_args,]*var_args_tuple): "函数_文档字符串" function_suite return[expression] 加了星号(*)的变量名会存放所有未命名的变量参数。 匿名函数 用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。 Lambda函数能接收任何数量的参数但只能返回一个表达式的值,同时只能不能包含命令或多个表达式。 匿名函数不能直接调用print,因为lambda需要一个表达式。 lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目 的是调用小函数时不占用栈内存从而增加运行效率。 Return语句 函数的返回值:return语句【表达式】推出函数,向调用方返回一个表达式 变量的作用域:常用的全局变量和局部变量(C/C++中一样) 局部变量和全局变量定义的位置不同,局部变量定义在函数内部,全局变量定义在函数外 Python模块:模块让你更够更加有逻辑的去组织你的代码段 模块能定义函数、类、变量,也可以包含执行代码 模块通过import语句进行调用 一个模块只会被导入一次,不管你执行对少次import FromAimportB:要导入模块A的B函数

优秀的个人博客,低调大师

Laravel学习

Laravel是个很强大的PHP框架,它剔除了开发中Web开发中比较痛苦的过程,提供了验证(authentication),路由(routing),Session和缓存(caching)等开发过程中常用到的工具或者功能。 Laravel的配置都存放在app/config中。 里面所有的*.php都按照return的形式返回数据,那么就可以使用Config::get("key")来获取配置。使用Config::set("key", "value") 来赋值配置项 要想使用不同的环境配置,就需要在config下创建对应配置的文件夹。然后它会覆盖对应的配置项。 获取当前的环境是使用App::environment(),判断当前环境是什么是使用:App::environment("local") providers是用来配置对应的服务的,比如: Laravel的请求周期: 1 请求先从public/index.php中进入 2 bootstrap/start.php文件创建app并检测环境 3 内部的 /Illuminate/Foundation/start.php文件配置相关设置并加载服务器 4 加载app/start目录下的文件 5 加载app/routes.php的路由设置 6 request通过controller等转化为response 7 返回response 路由配置: 配置的格式是: Route::get('foo/bar', funciton(){return 'Hello World';}) 路由参数是可以有下面几种的: 可选路由参数: 带有默认的可选的路由参数: 用正则表达式限定的路由参数: 传递参数限定的数组: 定义全局模式: 不同的参数定位到不同的路由: 好,现在有个问题是某些路由必须要登录或者验证才能访问怎么办?这里就使用到了路由过滤器这个东西。 比如下面这个例子,当年龄小于200的时候就跳转到主页: Request中的操作: 获取用户提交的值:Input::get('name'); 获取用户提交的值并指定默认值:Input::get('name', 'Sally'); 用户提交的信息是否存在:Input::has('name') 获取所有用户提交的信息:Input::all() 获取其中几项指定的信息:Input::only('username', 'password'); 获取除几项之外的提交信息:Input::except('card'); 访问用户提交的数组:Input::get('products.0.name'); cookie操作: 获取Cookie中的值:Cookie::get('name') 添加一个Cookie: $response = Response::make('Hello World'); response−>withCookie(Cookie::make(′name′,′value′,response−>withCookie(Cookie::make(′name′,′value′,minutes)); 如果想在Response之前设置Cookie,使用Cookie::queue() Cookie::queue(name,name,value, $minute); Session操作: 存储一个变量:Session::put('key', 'value'); 读取一个变量:Session::get('key'); 读取一个变量或者返回默认值:Session::get('key', 'default'); 检查一个变量是否存在:Sesssion::has('key'); 删除一个变量:Session::forget('key'); 删除所有Session变量:Session::flush(); 文件上传操作: 获取用户上传文件:$file = Input::file('photo'); 判断是否有上传这个文件:Input::hasFile('photo'); 移动上传的文件: Input::file('photo')->move($destinationPath); Input::file('photo')->move(destinationPath,destinationPath,fileName); 获取上传文件大小: Input::file('photo')->getSize(); 获取上传文件类型: Input::file('photo')->getMimeType(); 获取用户请求路径:Request::path(); 获取用户请求URL:Request::url(); 获取Header中的信息:Request::header('Content-Type'); 获取SERVER中的信息:Request::server('PATH_INFO'); 重定向: 重定向: return Redirect::to('user/login'); 有参数的重定向: return Redirect::to('user/login')->with('message', 'Login Failed'); 重定向到路由:return Redirect::route('profile', array('user' => 1)); 返回重定向到Action:return Redirect::action('UserController@profile', array('user' => 1)); 视图层: 传递数据给视图:$view = View::make('greeting')->with('name', 'Steve'); 将一个视图传递给另一个视图:$view = View::make('greeting')->nest('child', 'child.view'); 返回json:return Response::json(array('name' => 'Steve', 'state' => 'CA')); 返回jsonp:return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback')); 返回下载文件: return Response::download($pathToFile); return Response::download(pathToFile,pathToFile,status, $headers); 一个基本的控制器: 路由就长这样: 默认中,app/start/global.php文件中包含了一个处理所有异常的处理器。 监听fatal error,可以使用App::fatal方法。 日志操作: Log::info Log::warning Log::error 本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/3830750.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

mmap学习

内存页: Linux是以页为单位来管理物理内存的,一页大小一般等于4096字节。页容量越大,系统中可能存在的内存碎片就越多。 mmap将一个磁盘上的文件或者对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。 当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作,不必再调用read,write等系统调用。 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。比如像管道和消息队列,需要在内核和用户空间进行四次的数据拷贝。 mmap的系统操作有两个: 1 2 3 4 5 # include <sys/mman.h> void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void *start, size_t length); 第一个函数mmap,将文件描述符fd中的内容放到内存start --- ( start+ length) 的空间中。 port: 期望的内存保护方式,比如内存可读/可写/可执行,但是不能与文件的打开模式冲突。就是只能是文件权限的子集。 flag: 指定映射对象的类型 fd: 被映射的文件描述符。 第二个函数munmap,解除一个映射关系。 这两个函数的说明文档在: http://man7.org/linux/man-pages/man2/mmap.2.html 例子 比如这个例子是php的apc使用了mmap: 1 2 3 4 5 6 7 8 9 10 11 #strace -p `cat / var /run/httpd.pid` open( "/var/www/html/apc_load.php" , O_RDONLY) = 13 ... mmap2(NULL, 31457280, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, 1232, 0) = 0xb5ce7000 ... nanosleep({3600, 0}, mmap2() 系统调用执行的操作几乎与mmap(2) 一样,唯一的区别在于最后一个参数给出的在文件中的偏移是以4096-字节为单位。 这个mmap就在内存中空出30M的空间做内存映射 php的apc缓存加速 php的apc大致原理是将php的opcode(php的操作码)使用mmap映射(就是复制)到共享内存中,然后下次用户再访问调用php访问,就可以直接去共享内存中读取,而不需要再到磁盘上读取了。 当然当php文件更新的时候,opcode也会自动失效(有检测机制)。 本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/3171056.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Docker学习

1. 查看docker信息(version、info) #查看docker版本$dockerversion#显示docker系统的信息$dockerinfo 2. 对image的操作(search、pull、images、rmi、history) #检索image$dockersearchimage_name#下载image$dockerpullimage_name#列出镜像列表;-a,--all=falseShowallimages;--no-trunc=falseDon'ttruncateoutput;-q,--quiet=falseOnlyshownumericIDs$dockerimages#删除一个或者多个镜像;-f,--force=falseForce;--no-prune=falseDonotdeleteuntaggedparents$dockerrmiimage_name#显示一个镜像的历史;--no-trunc=falseDon'ttruncateoutput;-q,--quiet=falseOnlyshownumericIDs$dockerhistoryimage_name 3.启动容器(run) docker容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等。但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一个容器。这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。 #在容器中运行"echo"命令,输出"helloword"$dockerrunimage_nameecho"helloword"#交互式进入容器中$dockerrun-i-timage_name/bin/bash#在容器中安装新的程序$dockerrunimage_nameapt-getinstall-yapp_name Note: 在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。apt-get 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。 4. 查看容器(ps) #列出当前所有正在运行的container$dockerps#列出所有的container$dockerps-a#列出最近一次启动的container$dockerps-l 5. 保存对容器的修改(commit) 当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。 #保存对容器的修改;-a,--author=""Author;-m,--message=""Commitmessage$dockercommitIDnew_image_name Note:image相当于类,container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image。 6. 对容器的操作(rm、stop、start、kill、logs、diff、top、cp、restart、attach) #删除所有容器$dockerrm`dockerps-a-q`#删除单个容器;-f,--force=false;-l,--link=falseRemovethespecifiedlinkandnottheunderlyingcontainer;-v,--volumes=falseRemovethevolumesassociatedtothecontainer$dockerrmName/ID#停止、启动、杀死一个容器$dockerstopName/ID$dockerstartName/ID$dockerkillName/ID#从一个容器中取日志;-f,--follow=falseFollowlogoutput;-t,--timestamps=falseShowtimestamps$dockerlogsName/ID#列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A增加的,D删除的,C被改变的$dockerdiffName/ID#显示一个运行的容器里面的进程信息$dockertopName/ID#从容器里面拷贝文件/目录到本地一个路径$dockercpName:/container_pathto_path$dockercpID:/container_pathto_path#重启一个正在运行的容器;-t,--time=10Numberofsecondstotrytostopforbeforekillingthecontainer,Default=10$dockerrestartName/ID#附加到一个运行的容器上面;--no-stdin=falseDonotattachstdin;--sig-proxy=trueProxifyallreceivedsignaltotheprocess$dockerattachID Note:attach命令允许你查看或者影响一个运行的容器。你可以在同一时间attach同一个容器。你也可以从一个容器中脱离出来,是从CTRL-C。 7. 保存和加载镜像(save、load) 当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。 #保存镜像到一个tar包;-o,--output=""Writetoanfile$dockersaveimage_name-ofile_path#加载一个tar包格式的镜像;-i,--input=""Readfromatararchivefile$dockerload-ifile_path#机器a$dockersaveimage_name>/home/save.tar#使用scp将save.tar拷到机器b上,然后:$dockerload</home/save.tar 8、 登录registry server(login) #登陆registryserver;-e,--email=""Email;-p,--password=""Password;-u,--username=""Username$dockerlogin 9. 发布image(push) #发布docker镜像$dockerpushnew_image_name 10.根据Dockerfile 构建出一个容器 #build --no-cache=falseDonotusecachewhenbuildingtheimage -q,--quiet=falseSuppresstheverboseoutputgeneratedbythecontainers --rm=trueRemoveintermediatecontainersafterasuccessfulbuild -t,--tag=""Repositoryname(andoptionallyatag)tobeappliedtotheresultingimageincaseofsuccess$dockerbuild-timage_nameDockerfile_path 本文转自yzy121403725 51CTO博客,原文链接:http://blog.51cto.com/lookingdream/1836230,如需转载请自行联系原作者

优秀的个人博客,低调大师

ansible学习

一、ansible安装 #只需要管理端安装 yum install epel-release yum install ansible 二、配置 vim /etc//ansible/hosts#添加远程被管理端主机 192.168.10.148 k8s-master k8s-node-2 三、 生成公钥放到被管理端 ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.148 ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-master ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node-2 管理端测试:ansible all -m ping ansible all -m ping -u alex#以alex用户执行 ansible all -m ping -u alex --sudo --sudo-user batman#sudo方式运行 四、命令 #开启两个进程并行执行,关闭atlanta组的所有主机 ansible atlanta -a "/sbin/reboot" -f 2 #拷贝文件到atlanta组的主机 ansible atlanta -m copy -a "src=/etc/hosts dest=/tmp/hosts" #修改为文件权限 ansible atlanta -m file -a "/tmp/hosts mode=777" #创建目录 ansible atlanta -m file -a "dest=/tmp/c mode=755 owner=nginx group=nginx state=directory" #删除目录 ansible atlanta -m file -a "dest=/tmp/c state=absent" #确认软件包是否安装,但不去升级 ansible atlanta -m yum -a "name=nginx state=present" #确认一个软件包没有安装 ansible atlanta -m yum -a "name=nginx state=absent" #使用 ‘user’ 模块可以方便的创建账户,删除账户,或是管理现有的账户: ansible all -m user -a "name=foo password=<crypted password here>" ansible all -m user -a "name=foo state=absent" #启动服务 ansible atlanta -m service -a "name=docker state=started" #重启服务 ansible atlanta -m service -a "name=docker state=restarted" #停止服务 ansible atlanta -m service -a "name=docker state=stopped" #需要长时间运行的命令可以放到后台去,在命令开始运行后我们也可以检查运行的状态.如果运行命令后,不想获取返回的信息, 可执行如下命令: ansible all -B 3600 -P 0 -a "/usr/bin/long_running_operation --do-stuff" #如果你确定要在命令运行后检查运行的状态,可以使用 async_status 模块.前面执行后台命令后会返回一个 job id, 将这个 id 传给 async_status 模块: ansible web1.example.com -m async_status -a "jid=488359678239.2844" #获取状态的命令如下: ansible all -B 1800 -P 60 -a "/usr/bin/long_running_operation --do-stuff" 其中-B1800表示最多运行30分钟,-P60表示每隔60秒获取一次状态信息. 五、http安装配置文件修改例子 vim /etc/ansible/hosts #添加主机组 [testhost] 192.168.10.148 192.168.10.224 编写yaml文件 vim http.yml#修改httpd.conf文件时,notify会通知客户端重启httpd - hosts: testhost vars: src_http_dir: "/etc/httpd" dest_http_dir: "/tmp" remote_user: root tasks: - name: instal httpd service yum: name=httpd state=present - name: copy httpd conf copy: src="`src_http_dir`/conf/httpd.conf" dest=/etc/httpd/conf/httpd.conf notify: - restart httpd service - name: start httpd service service: name=httpd state=started enabled=true handlers: - name: restart httpd service service: name=httpd state=restarted 变量使用 vim test1.yml - hosts: testhost vars: src_http_dir: "/etc/httpd" dest_http_dir: "/tmp" remote_user: root tasks: - name: copy httpd conf copy: src="`src_http_dir`/conf/httpd.conf" dest="`dest_http_dir`/http.conf.ansible" 模板使用 vim httpd.conf #修改以下内容 Listen `ansible_all_ipv4_addresses`.`0`:`http_port` ServerName `ansible_nodename` vim test2.yml - hosts: testhost vars: http_port: 8010 http_dir: /etc/httpd/conf remote_user: root tasks: - name: copy httpd conf template: src=/etc/ansible/httpd.conf dest="`http_dir`/httpd.conf" notify: - restart httpd service handlers: - name: restart httpd service service: name=httpd state=restarted 本文转自小白的希望 51CTO博客,原文链接:,http://blog.51cto.com/haoyonghui/1970029如需转载请自行联系原作者

优秀的个人博客,低调大师

databinding学习

构建环境 android{ dataBinding{ enabled = true } } 数据绑定布局文件 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.User"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstName}"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.lastName}"/> </LinearLayout> </layout> 上面data标签里声明数据变量,数据类型可以是POJO类,也可以是JavaBeans类 绑定数据 默认情况下,将根据布局文件的名称生成一个Binding类,所以可以利用这个bingding类做绑定操作 例: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity); User user = new User("Test", "User"); binding.setUser(user); } 也可以通过以下几种方式获取binding实例 MainActivityBinding binding = MainActivityBinding.inflate(getLayoutInflater()); ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false); ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false); 事件处理 两种方式 方法引用:先在要绑定的数据类里声明事件要触发的方法,然后布局里直接调用声明的方法,比如: public class MyHandlers { public void onClickFriend(View view) { ... } } <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="handlers" type="com.example.Handlers"/> <variable name="user" type="com.example.User"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstName}" android:onClick="@{handlers::onClickFriend}"/> </LinearLayout> </layout> 不过这种需要View控件已有onClick方法,而且也要注意方法的View参数对应上 监听器绑定 在方法引用中,方法的参数必须与事件侦听器的参数相匹配。在侦听器绑定中,只有您的返回值必须与侦听器的预期返回值相匹配(除非它是期望的void) public class Presenter { public void onSaveClick(Task task){} } <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="task" type="com.android.example.Task" /> <variable name="presenter" type="com.android.example.Presenter" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="@{() -> presenter.onSaveClick(task)}" /> </LinearLayout> </layout> 可以注意到xml的onClick后面使用的lambda表达式,所以也可以写成: android:onClick="@{(view) -> presenter.onSaveClick(task)}" 布局详情 imports 可直接导入类 例: <data> <import type="android.view.View"/> </data> 为什么?因为下面的控件标签要用 例: <TextView android:text="@{user.lastName}" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/> 如果导入多个类,但类名相同,可以加个alias=""用于区分 也可以在声明variable时type类型名全部加上 自定义binding类名字 在data标签里 加class可改 <data class="ContactItem"> ... </data> <data class=".ContactItem"> ... </data> <data class="com.example.ContactItem"> ... </data> 包含 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/apk/res-auto"> <data> <variable name="user" type="com.example.User"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/name" bind:user="@{user}"/> <include layout="@layout/contact" bind:user="@{user}"/> </LinearLayout> </layout> 表达式 数字的+ - /* % 字符串 + 逻辑 && || 二进制 & | ^ 一元 + - ! ~ 转移 >> >>> << 比较 == > < >= <= instanceof Grouping() 子面 cast 方法调用 域访问 数组访问 三元: ?: 例 android:text="@{String.valueOf(index + 1)}" android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}" android:transitionName='@{"image_" + id}' 空合并运算符(??)选择左操作数,如果它不为空,或者如果为空则选择右操作数。 android:text="@{user.displayName ?? user.lastName}" = android:text="@{user.displayName != null ? user.displayName : user.lastName}" 数据绑定

优秀的个人博客,低调大师

汇编学习

地址总线 地址总线宽度决定访问内存的大小 例如8086架构可以有20 个地址总线 一个地址总线为2个字节 2个2位的16进制 可以访问的最大内存我2^20 也就是1m 最大可以装在内存为1mb 数据总线 数据总线决定数据吞吐量 8086 的数据总线为16 每次数据吞吐量也就是2个字节 如果一个1kb 的数据想要读取 那就是说要读取512次 才能读取完 cpu 的位数 也是根据数据总线来确定的 控制总线 用来执行控制命令的发送和接受 其本质也是操作数据 内存 分为 ram 和 rom RAM 为主内存 为地位内存 比较安全的内存 写的程序 主要执行在 RAM 中 可以读写 ROM 一般为BIOS 系统内存 显存 网卡 只读(系统内存) 显存和网卡(可以读写) 寄存器 cpu 分为三部分 运算器 控制器和寄存器 寄存器是程序员用来操作寄存器的内容来改变对 CPU 的控制; 8086 16位寄存器 可以存放两个字节 AH - AL AX 数据寄存器 BH - BL BX CH - CL CX DH - DL DX SP 堆栈指针 指针寄存器 BP 基数指针 SI 源变址 变址寄存器 DI 目的变址 IP 指令指针 控制寄存器 FLAG 状态标志 CS 代码段 段寄存器 DS 数据段 SS 堆栈段 ES 附加段

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册