WordPress 默认还有 links 表,但是现在友情链接都用得很少,我们可以再在多站点管理,如何在创建博客的时候不创建这个表呢?
Function 表存在(s) For Each i In Sheets If i.Name = s & "" Then 表存在 = 1 '连接空白是避免表格名为数值时格式不同 ' Debug.Print...i.Name = s Next End Function Function 建表(s) For Each i In Sheets If i.Name = s Then Exit Function...Next Sheets.Add(, Sheets(Sheets.Count)).Name = s ' Sheets.Add.Name = s'创建在前面 ' Sheets.Add
本文主要讲解如何创建一个外观漂亮的搜索框,通过它可以筛选数据并显示搜索结果。...As Worksheet Dim lngField As Long Dim rngData As Range Dim vSearch As Variant '赋值工作表变量...图2 我们在上面的基础上再进行扩展,让搜索字段更多一些,如下图3所示,可以搜索含有数字的列。 ?...As Worksheet Dim lngField As Long Dim rngData As Range Dim vSearch As Variant '赋值工作表变量...图5 可以在此基础上进一步添加功能,例如,在搜索完成后,我想恢复原先的数据,可以在工作表中再添加一个代表按钮的矩形形状,如下图6所示。 ?
学习Excel技术,关注微信公众号: excelperfect 在工作表中,我们可以创建简单的用户名和密码登录框,并且像专业的密码框界面那样,在用户输入密码时显示的是*号。...第1步:在工作表中添加文本框 单击功能区“开发工具”选项卡“控件”组中的“插入——ActiveX控件——文本框“,如下图1所示。 ?...图1 在工作表中插入两个文本框,并将其大小和位置进行适当地调整,如下图2所示。 ? 图2 第2步:设置文本框属性 要想使得在文本框中输入时掩盖其中的内容,需要设置其属性。...图4 注:在PasswordChar中,可以在其中输入任何字符,这样在文本框中输入数据时,将仅显示该字符。通常,我们使用星号(*),当然也可以使用问号(?)、感叹号(!)等。...注意,在这种情况下,虽然看起来输入的密码被掩盖了,但仍然存储在工作表中,这样他人可轻松从文本框中提取密码。
MySQL扩展 PHP中MySQL扩展,虽然因为安全的原因,在PHP5.6及往上不在支持MySQL扩展库,但是还是要学习的,通过编写案例的方式来讲解。...下面是创建表的sql语句: create database worddb create table words( id int primary key auto_increment...所以在开发功能时,要秉持“外部参数皆不可信原则”进行开发。...先创建表,顺便插入一条数据如下: create database test; use test; create table users( id int(8) unsigned...连接失败"; } $sqli="insert into users(name,password) values ('小利',md5('13568'));"; //批量执行dml操作时,
3、match_phrase_prefix query 与match_phrase查询类似,但是在最后一个单词上执行通配符搜索。...1、match query详解 1.1 match query使用示例与基本工作原理 全文索引查询,这意外着首先会对待查字符串(查询条件)进行分词,然后再去匹配,返回结果中会待上本次匹配的关联度分数。...在操作类型为Operator.OR时生效,指明分词后的词根,至少minimum_should_match 个词根匹配,则命中。...它阻止了对高频短语(停用词)的评分/迭代,并且只在更重要/更低频率的短语与文档匹配时才会考虑这些文档。...例如,在查询“Will Smith”的first_name和last_name字段时,在一个字段中可能会有“Will”,而在另一个字段中可能会有“Smith”。
但是在 MySQLi 中,我们统一只使用 query() 方法就可以了。...$mysqli->multi_query($sql); $i = 1; do{ echo '第' . $i ....它就相当于是为执行获取下一个结果的操作做准备,也可以看作是将游标移动到了下一条 SQL 语句上。而 more_results() 方法就是判断是否还有更多的语句没有执行。...也就是说,在 mutli_query() 的时候,这些语句并没有马上执行,而是在调用 use_result() 时,才会执行当前的这条语句。...总结 光说不练假把式,虽说多语句执行看似很美好,但即使在这简单的测试代码中,也会出现各种问题,大家一定要自己多尝试一下。
phpMyqli向数据表插入多条数据 mysqli批量执行sql语句 在用PHP操作数据库时,有时候我们需要一次性执行多条sql语句,比如批量增加用户,这时如果单条单条的向mysql数据库发送sql指令...mysqli批量执行sql语句的语法: =========今天学习mysqli面向对象的语句========= 向数据表stu_info一次性插入多条数据 <?...php //使用面向对象进行数据库的连接,在创建对象的时候就自动的连接数据 $mySQLi = new MySQLi('localhost','root','root','yhd_data...res = mySQLi -> multi_query( if($res){ echo '添加成功'; }else{ echo '添加失败' .
注意:对于内核线程,mm为NULL,因为它直接借用前一个进程的内核页表文件系统与IO(Filesystem&Files)fs:指向fs_struct,包含进程的当前工作目录(pwd)和根目录。...files:指向files_struct,即著名的文件描述符表。当你调用open()得到一个fd时,其实就是在这个数组里找下标。...这部分的开销在两者之间是基本持平的。线程但依然需要通过中断或系统调用陷入内核(KernelMode),由内核调度器来操作寄存器。...进程切换时:由于页表变了,旧进程在TLB里的缓存全部失效。CPU必须清空(Flush)TLB。后果:切换后的前一段时间,CPU访问内存会频繁发生TLBMiss,必须去慢速的内存中重新查找页表。...线程切换时:页表没变,TLB依然有效,访问内存依然是“秒回”。
对这种机器的所有编译程序在分析阶段都生成MSIL,在实现一个编译程序时,尽量把编译过程的大量工作放在代码生成阶段,即MSIL到目标程序的翻译上,以减轻不同语言翻译的分析任务。...a) 一般情况下基本块内的临时变量在出口处都认为是不活跃的。 b) 如果中间代码生成时的算法允许某些临时变量在基本块外可以被引用时,则这些临时变量也是活跃的。...对每个四元式i:A:=B op C,依次执行下述步骤: a) 把符号表中变量A的待用信息和活跃信息附加到四元式i上。 ...b) 把符号表中变量A的待用信息栏和活跃信息栏分别置为 “非待用” 和 “非 活跃”。由于在i中对A的定值只能在i以后的四元式才能引用,因而对i以前的四元式来说A是不活跃也不可能是待用的。 ...c) 把符号表中B和C的待用信息和活跃信息附加到四元式i上。 d) 把符号表中B和C的待用信息栏置为”i”,活跃信息栏置为”活跃”。
多核芯片上的每个CPU都有自己的这些寄存器集,并且在任何给定时间都可能有多个CPU在处理陷阱。...在新的pc上开始执行。 请注意,CPU不会切换到内核页表,不会切换到内核栈,也不会保存除pc之外的任何寄存器。内核软件必须执行这些任务。...CPU在陷阱期间执行尽可能少量工作的一个原因是为软件提供灵活性; 例如,一些操作系统在某些情况下不需要页表切换,这可以提高性能。...每个新创建出来的进程,其ra寄存器是在allocproc函数中进行的设置,上面我们直接跳过了该函数,下面我们深入分析一下 // Look in the process table for an UNUSED...userret用于内核态返回用户态时,进行用户态寄存器上下文环境的恢复 同时,通过.section trampsec 语句用于创建一个名为 trampsec 的新节,而trampoline.S汇编文件后面做的事情
但是在 MySQLi 中,我们统一只使用 query() 方法就可以了。...$mysqli->multi_query($sql);$i = 1;do{ echo '第' . $i ....它就相当于是为执行获取下一个结果的操作做准备,也可以看作是将游标移动到了下一条 SQL 语句上。而 more_results() 方法就是判断是否还有更多的语句没有执行。...也就是说,在 mutli_query() 的时候,这些语句并没有马上执行,而是在调用 use_result() 时,才会执行当前的这条语句。...总结 光说不练假把式,虽说多语句执行看似很美好,但即使在这简单的测试代码中,也会出现各种问题,大家一定要自己多尝试一下。
如果不填任何参数,则默认的hostname为localhost,username为root,password为空。 ...获取数据 网页程序大多数工作都是在获取和格式化所请求的数据。为此,要向数据库发送 SELECT查询,再对结果进行迭代处理,将各行输出给浏览器,并按照自己的要求输出。...PHP 提供了执行多条 SQL 语句 的方法 $_mysqli->multi_query() ; // 创建多条 SQL 语句 $_sql ....如果你建立的表不是 InnoDB , 可以在 phpmyadmin 里修改。...true:false; } /*-- 上面的方法名跟手册上 MySQL 的那些函数名是一对一的,除了“splitDSN”和“构造函数” --*/ /*-- 下面是扩展,也就是说下面的这些方法在手册上是找不到影子的
我们把已执行过的进程指令和数据在相关寄存器与堆栈中的内容称为进程上文,把正在执行的指令和数据在寄存器与堆栈中的内容称为进程正文,把待执行的指令和数据在寄存器与堆栈中的内容称为进程下文。...,当访问用户空间地址的时候mmu会通过这个寄存器来做遍历页表获得物理地址(ttbr1_el1是内核空间的页表基址寄存器,访问内核空间地址时使用,所有进程共享,不需要切换)。...试想如果进程想要访问一个用户空间虚拟地址,cpu的mmu所做的工作,就是从页表基址寄存器拿到页全局目录的物理基地址,然后和虚拟地址配合来查查找页表,最终找到物理地址进行访问(当然如果tlb命中就不需要遍历页表...所以arm64在tlb表项中增加了非全局(nG)位区分内核和进程的页表项,使用ASID区分不同进程的页表项,来保证可以在切换地址空间的时候可以不刷tlb,后面会主要讲解ASID技术。...则这个过程中,有进程会创建的时候被切换到,假设不超出255个进程,在切换过程中会为新进程分配硬件的ASID,分配完后下次切换到他时由于他的ASID版本号和当前的全局的ASID版本号相同,所以不需要再次分配
如果不采用锁,依然满足在一个线程内部的各个函数调用都能访问、但其它线程不能访问的变量,这就需要新的机制来实现,需要线程局部存储(TLS: Thread-Local Storage) 维度 栈变量 堆变量...提供线程安全的随机数生成和状态跟踪 三、技术的组成部分和关键点 特性 C++ thread_local Java ThreadLocal 存储结构 编译器通过fs/gs寄存器直接访问TLS,无哈希表开销...基于线程内部的ThreadLocalMap哈希表存储 内存管理 线程结束时自动析构(RAII机制) 需手动调用remove(),否则可能内存泄漏 性能 接近直接内存访问(1~3周期) 哈希表查询(约10...这两个区域通常是分开 mmap/分配的,且在 x86-64 上通过段寄存器(FS 或 GS)来访问 TLS,而通过 RSP/RBP 访问栈 区域 地址来源 访问方式 TLS 块 FS(或 GS)段基址...运行阶段 线程创建 glibc/动态链接器在 pthread_create 时,为新线程 mmap 出一块内存,复制主 TLS 模板(.tdata+.tbss)并在尾部附加 TCB 结构。
CPU在不同任务间切换时,需要保存当前任务的上下文(寄存器等),并加载下一个任务的上下文。进程切换 伴随着地址空间的切换,这需要刷新CPU的TLB(快表),导致内存访问在一段时间内变慢,开销巨大。...当CPU进行地址转换时,会首先从CR3寄存器获取页目录表地址 内存分配要求: 操作系统在加载用户程序时,需要为程序内容分配物理内存页框 同时还需要为管理这些页框的页表分配物理内存(每个页表占4KB...当它创建线程时,它只需要做一件事:在进程的虚拟地址空间内,为这个新线程分配一块新的内存区域作为其私有栈。...示例:一个单线程的Web服务器,如果在处理一个用户请求时进行读写磁盘的慢速I/O操作,整个进程都会被阻塞,无法响应其他用户请求。 多线程方案:主线程负责接收连接,然后为每个连接创建一个工作线程。...当一个工作线程因I/O操作(如读文件)被阻塞时,其他工作线程仍然可以继续在CPU上运行,处理其他用户的请求。这样就重叠了I/O等待时间和计算时间,极大地提高了服务器的并发吞吐量和响应能力。
G.Popek和R.Goldberg在1974年发表的论文中提到,作为向上层VM提供底层硬件抽象的一层轻量级的软件,VMM必须满足以下3个条件: 1.等价性(Equivalence) :应用程序在VMM...3.有效性(Efficiency) :在虚拟执行环境中应用程序的绝大多数指令能够在VMM不干预的情况下,直接在物理硬件上执行。...当执行这些指令时,理论上都要产生trap被VMM捕获执行。敏感指令:Guest OS中必须由VMM处理的指令,因为这些指令必须工作在0环。...(x86不满足的原因:有些必须由VMM处理的0环指令,工作在1环也不会产生trap,即敏感指令包含非特权指令。但是敏感指令必须工作在0环,所以这些非特权指令也必须陷入。)...当POP到段寄存器时,需要比较CPL。由Guest OS运行在ring 3上引起。 6.PUSH 同POP类似,PUSH不能应用于CS,DS 段寄存器,也与CPL相关。
尤其是现在AI人工智能这么火,许多应用直接把算法和模型数据存放到内存上,需要使用上百G、甚至更大的内存。这时,就需要访问更大的页。但是,本文不讨论更大的页表转换。...PageMask可以用来创建映射大于4K的页。 Index:在协处理器0中的编号为0。 对TLB项的索引。操作指令靠这个寄存器寻址TLB项。 Random:在协处理器0中的编号为1。...2.4 页表存取辅助寄存器-Context和XContext寄存器 当给出的虚拟地址不在TLB表中时,CPU发生异常,未能转换的虚拟地址已经在BadVAddr寄存器中了。...进程切换时,改变ASID值,kseg2地址空间内指向页表的指针自动就会重映射到正确的页表上。是不是很巧妙???...Cause寄存器和地址异常相关的寄存器(BadAddr,EntryHi,甚至Context和Xcontext)都会被定位到访问页表时的TLB未命中异常相关的信息上。
他们各自有不同的功能,但都存储了CPU工作时的重要信息: cr0: 存储了CPU控制标记和工作状态 cr1: 保留未使用 cr2: 页错误出现时保存导致出错的地址 cr3: 存储了当前进程的虚拟地址空间的重要信息...言归正传,CPU在执行这条int 3指令时,将自动触发中断处理流程(虽然这实际上不是一个真正的中断),CPU将取出IDTR寄存器指向的中断描述符表IDT的第3项,执行里面的中断处理函数。...MSR,这部分MSR寄存器,在命名上,统一加上了IA32的前缀。...在早期的x86架构CPU上,系统调用依赖于软中断实现,类似于前面调试用到的int 3指令,在Windows上,系统调用用到的是int 2e,在Linux上,用的是int 80。...在64位上,这一对指令升级为syscall/sysret。
比如世界上最早的超级计算机——CDC 6600 到 Intel 8088(原IBM PC的心脏)就采用了动态重定位。他们采用的经典办法是给CPU配置2个特殊的硬件寄存器——基址寄存器和界限寄存器。...每次一个进程访问内存(取一条指令、读/写一个数据字),CPU硬件会先把基址值(基址寄存器上的值)加到进程发出的地址值(进程地址空间上的地址偏移量)上,然后再把结果值发送到内存总线 使用基址寄存器和界限寄存器的缺点...(如下图) 基址寄存器和界限寄存器就适用这种场景 内存紧缩:交换在内存中产生了多个空闲区,通过把所有进程向下移动,进而将小的空闲区合并为一大块 通常不这样操作,因为非常耗时。...进程被创建或通过交换技术被换入时,应该给它分配多大的内存呢? 解决办法是可以为进程额外分配一些内存。但当进程换出到磁盘时,只需交换进程实际上使用的内存中的内容。...内存管理之分段 分段的好处: 在一维地址空间中(无分段),当有多个动态增加的表时,一个表的增加可能会与另一个表发生碰撞 简化对长度经常变化的数据结构的管理 有助于在几个进程之间共享过程和数据,比如共享库