最近接手一个小项目,要求使用谷歌的aapt.exe获取apk软件包中的信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程的输出结果,当时还研究了一番,只是没有做整理。...它是我们启动子进程时,控制子进程启动方式的参数。...HANDLE hStdOutput; HANDLE hStdError; } STARTUPINFO, *LPSTARTUPINFO; 粗看该结构体,我们可以知道:我们可以通过它控制子窗口出现的位置和大小还有显示方式...我们之后将hWrite交给我们创建的子进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取子进程写入管道的内容。...设置标准输出和标准错误输出句柄 si.hStdError = hWrite; // 把创建进程的标准错误输出重定向到管道输入 si.hStdOutput = hWrite
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。...向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法 编辑时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数...b:可以跨文件系统 c:可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了 僵尸进程和孤儿进程 1、孤儿进程:子进程执行完毕时发现父进程已退出...孤儿进程后期会被系统的 init 进程接管,并 wait/waitpid 其执行状态做回收处理。对系统并无危害。 2、僵尸进程:子进程执行完毕时发现父进程未退出,会向父进程发送 SIGCHLD 信号。...但父进程没有使用 wait/waitpid 或其他方式处理 SIGCHLD 信号来回收子进程,子进程变成为了对系统有害的僵尸进程。
mysql中的作用 undolog和redolog的作用 java的基本数据类型 spring中ioc和aop你了解吗 spring怎么样解决循环依赖 mysql中有哪些锁 锁的是什么东西 线程和进程的区别...12. spring怎么样解决循环依赖 在Spring中,当两个或多个bean之间存在循环依赖时,可以通过以下几种方式解决: 构造函数注入:使用构造函数注入可以解决循环依赖的问题。...当A和B的创建过程都完成后,Spring会将A和B的实例放入一级缓存中,并将二级缓存中的早期引用清除。 最后,Spring会将A和B的实例注入到彼此的属性中,完成循环依赖的解决。...在双亲委派机制下,当一个类加载器收到加载类的请求时,它首先会将这个请求委派给它的父类加载器去完成,只有当父类加载器无法完成加载时,才会由当前类加载器自己去加载。...当一个类加载器收到加载类的请求时,它会首先向上委派给父类加载器,如果父类加载器能够找到并加载这个类,那么就直接返回这个类的Class对象;如果父类加载器无法找到这个类,那么子类加载器才会尝试自己去加载。
当sliec发生内存的重新分配(如扩容)时,会对共享进行隔断。...孤儿进程,僵尸进程 僵尸进程: 即子进程先于父进程退出后,子进程的PCB需要其父进程释放,但是父进程并没有释放子进程的PCB,这样的子进程就称为僵尸进程,僵尸进程实际上是一个已经死掉的进程。...孤儿进程: 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。...子进程死亡需要父进程来处理,那么意味着正常的进程应该是子进程先于父进程死亡。当父进程先于子进程死亡时,子进程死亡时没父进程处理,这个死亡的子进程就是孤儿进程。...所以当设置 runtime.GOMAXPROCS(1) 时,此时只有一个 P,创建的 g 依次加入 P, 当最后一个即 i==9 时,加入的最后 一个 g 将会继承当前主 goroutinue 的剩余时间片继续执行
python多进程,全局变量未更新 问题:子进程全局变量没有按照预想的更新,导致数据没有写入磁盘。...在这语句之后的值不会传递到子进程里。...: date的值: 初始日期 总结 python的多进程在类Unix OS和Windows OS下的实现是不一样的,前者可以使用fork,而后者是python解释器新开一个进程,然后使用序列化需要用到的资源传到那个进程中...另外,如果想在进程间通行,请使用官方的队列方法或者管道,因为全局变量在父进程和子进程之间的值是独立的,改变其中一个不会同步到另外的进程。...官网链接如下,里面对多进程的一些注意点和坑都说明的很清楚了: https://docs.python.org/3/library/multiprocessing.html?
父进程创建管道,得到两个⽂件描述符指向管道的两端 父进程fork出子进程,⼦进程也有两个⽂件描述符指向同⼀管道。...父进程关闭fd[0],子进程关闭fd[1],即⽗进程关闭管道读端,⼦进程关闭管道写端(因为管道只支持单向通信)。...高级管道通信 高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。...因为当表中数据更改的同时,索引也会进行调整和更新,十分消耗系统资源; (9) 区分度低的字段,建议不创建索引。...因为当表中数据更改的同时,索引也会进行调整和更新,十分消耗系统资源; (9) 区分度低的字段,建议不创建索引。
Redis需要执行RDB的时候,服务器会执行以下操作:redis调用系统函数fork(),创建一个子进程。子进程将数据集写入到一个临时RDB文件中。...当子进程完成对临时RDB文件的写入时,redis用新的临时RDB文件替换原来的RDB文件,并删除旧RDB文件。...在执行fork时linux操作系统(一般大公司的服务器都是这个系统)会使用写时复制(copy-on-write)策略,即fork函数发生的一刻父子进程共享同一内存数据,当父进程要更新其中某片数据时,操作系统会将该片数据复制一份以保证子进程的数据不收影响...save命令是在主进程上进行的,会阻塞其他请求。后者会fork子进程进行快照操作。 和mysql存储比较。RDB方式比较类似于mysql的mysqldump命令备份。...压缩列表是列表键和哈希键的底层实现之一。当一个列表键只包含少量表项,并且每个列表要么是小整数,要么是较短的字符串,那么redis就会使用压缩列表来作为列表键的底层实现。
当一个task试图向内存中写入数据时,内存管理单元(MMU)抛出一个异常,内核处理该异常时为该task分配一份物理内存并复制数据到此内存,重新向MMU发出执行该task的写操作。...文件系统可以看作是由磁盘块组成的大树,当使用COW策略修改叶块时,还需要修改其父节点以更新修改后的子块的新位置。此更新过程将递归进行,直到到达根块为止,该根块可以在磁盘上的固定位置进行更新。...子进程是父进程的复制品。例如,子进程获得 父进程数据空间、堆和栈的复制品。注意,这是子进程所拥有的拷贝。父、子进程并不共享这 些存储空间部分。...如果正文段是只读的,则父、子进程共享正文段 , 现在很多的实现并不做一个父进程数据段和堆的完全拷贝,因为在fork之后经常跟随着 exec。作为替代,使用了在写时复制技术。...但vfork它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用 exec(exit),于 是也就不会存访该地址空间。不过在子进程调用 exec或exit之前,它在父进程的空间中运行。
Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux等技术栈...Zookeeper数据节点读取数据,并 在该节点上注册一个数据变更 Watcher 数据变更:当变更数据时,更新 Zookeeper对应节点数据,Zookeeper 会将数据变更通知发到各客户端,客户端接到通知后重新读取变更后的数据即可...对于执行情况汇报:每个工作进程都在某个目录下创建一个临时节点。并携带工作的进度数据,这样汇总的进程可以监控目录子节点的变化获得工作进度的实时的全局情况。...zk的配置管理(文件系统、通知机制) 程序分布式的部署在不同的机器上,将程序的配置信息放在 zk的 znode下,当有配置发生改变时,也就是 znode发生变化时,可以通过改变 zk中某个目录节点的内容...对于第一点,所有机器约定在父目录下创建临时目录节点,然后监听父目录节点的子节点变化消息。
例如,子进程需要在close之前告诉父进程自己处理了多少个请求以支撑父进程进行全局的统计,那么子进程和父进程必须采用IPC方案来传递信息。...prefork PPC模式中,当连接进来时才fork新进程来处理连接请求,由于fork进程代价高,用户访问时可能感觉比较慢,prefork模式的出现就是为了解决这个问题。...因为父进程只是通过Reactor监听各个连接上的事件然后进行分配,子进程与父进程通信时并不是一个连接。如果要将父进程和子进程之间的通信模拟为一个连接,并加入Reactor进行监听,则是比较复杂的。...多Reactor多进程/线程的方案看起来比单Reactor多线程要复杂,但实际实现时反而更加简单,主要原因是: 父进程和子进程的职责非常明确,父进程只负责接收新连接,子进程负责完成后续的业务处理。...父进程和子进程的交互很简单,父进程只需要把新连接传给子进程,子进程无须返回数据。
多态: 是允许你将父对象设置成为一个或者更多的它的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。...进程和线程: 线程和进程的概念 线程:单个进程中执行的每个任务就是一个线程。...高级管道通信 将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们称为高级管道方式。...主要的是,当 count(*) 语句包含 where 条件时 MyISAM 特需要扫描整个表; 对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其它字段一起建立联合索引...,只有当父类加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需要加载的类)时,子加载器才会尝试自己去加载。
join:当子线程调用 join 时,主线程会被阻塞,当子线程结束后,主线程才能继续执行。...deamon:当子进程被设置为守护进程时,主进程结束,不管子进程是否执行完毕,都会随着主进程的结束而结束。 5、异步和同步、阻塞和非阻塞之间的区别?...RDB 在保存 RDB 文件时父进程唯一需要做的就是 fork 出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他 IO 操作,所以 RDB 持久化方式可以最大化 redis 的性能....通过 fork 创建的子进程能够获得和父进程完全相同的内存空间,父进程对内存的修改对于子进程是不可见的,两者不会相互影响; 通过 fork 创建子进程时不会立刻触发大量内存的拷贝,内存在被修改时会以页为单位进行拷贝...僵尸进程:子进程退出了,但是父进程没有用 wait 或 waitpid 去获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称为僵死进程。 25、MySQL 中有哪几种锁?
在使用 Bgsave 的时候,Redis 会 Fork 一个子进程,快照的持久化就交给子进程去处理,而父进程继续处理线上业务的请求。...当父进程 Fork 出来一个子进程,子进程和父进程拥有共同的内存数据结构,子进程刚刚产生时,它和父进程共享内存里面的代码段和数据段。 ?...当父进程修改了某一个数据段时,被共享的页面就会复制一份分离出来,然后父进程再在新的数据段进行修改。 ?...因为子进程在 Fork 的时候就可以固定内存,这个时间点的数据将不会产生变化。 所以我们可以安心的产生快照不用担心快照的内容受到父进程业务请求的影响。...另外可以想象,如果在 Bgsave 的过程中,Redis 没有任何操作,父进程没有接收到任何业务请求也没有任何的背后例如过期移除等操作,父进程和子进程将会使用相同的内存块。
可以在同一实例中同时使用AOF和RDB。这种情况下,当Redis重新启动时,AOF文件将用于重建原始数据集,因为它可以保证是最完整的。 最重要的是理解RDB与AOF持久性之间的不同权衡。...对于bgsave来说,当父进程Fork完子进程之后,异步任务会将当前的内存状态作为一个版本进行复制。在复制过程中产生的变更,不会反映在这次备份当中。...但Fork子进程,涉及父进程的内存复制,会增加服务器内存开销。当内存开销高到使用虚拟内存时,bgsave的Fork子进程会阻塞运行,可能会造成秒级不可用。...保持高性能,因为Redis主进程只要fork一个子进程,让子进程执行RDB 启动效率高 相对于AOF,直接基于RDB文件重启和恢复Redis进程,更加快速 2.6 RDB缺点 耗时 O(n) 写时复制...当父进程要更改其中某片数据时(如执行一个写命令),os会将该片数据复制一份以保证子进程数据不受影响,所以新的 RDB 文件存储的是执行 fork 一刻的内存数据。 不可控 容易丢失数据。
3)父进程完成fork后,bgsave命令返回’‘background saving started’’ 信息并不在阻塞父进程可以继续响应其他命令; 4)子进程创建RDB文件,根据父进程内存生成临时快照文件...5)进程发送信号给父进程表示完成,父进程更新系统信息,具体在info persistence 下的rdb_*相关选项。...虽然fork创建子进程不需要拷贝父进程的物理内存空间,但是需要父进程的空间存列表,例如对于10G的redis进程, 需要复制大约20MB的内存列表,因此fork操作耗时跟进程的内存量息息相关,如果使用虚拟化技术...2.内存消耗分析: 子进程通过fork产生,占用内存大小等同于父进程,理论上需要两倍内存来完成持久化操作, 但是linux系统有写时复制机制(copy-on-write)。...父子进程会共享相同的内存页,当父进程处理写请求时会把要修改的内存页创建副本,而子进程fork操作过程中共享整个 父进程内存页快照。
1.合理杀死进程在 Linux 中 kill 杀死进程的常用命令有以下这些:kill -2 pid:向指定 pid 发送 SIGINT 中断信号,等同于 ctrl+c。...也就说,不仅当前进程会收到该信号,而且它的子进程也会收到终止的命令。kill -9 pid:向指定 pid 发送 SIGKILL 立即终止信号。程序不能捕获该信号,最粗暴最快速结束程序的方法。...信号会被当前进程接收到,但它的子进程不会收到,如果当前进程被 kill 掉,它的的子进程的父进程将变成 init 进程 (init 进程是那个 pid 为 1 的进程)。...因此,在以上命令中,我们不能使用“kill -9”来杀死进程,使用“kill”杀死进程即可。...本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud
2) 父进程执行fork操作创建子进程,这个过程中父进程是阻塞的,Redis不能执行来自客户端的任何命令 3) 父进程fork后,bgsave命令返回”Background saving started...”信息并不再阻塞父进程,并可以响应其他命令 4) 子进程创建RDB文件,根据父进程内存快照生成临时快照文件,完成后对原有文件进行原子替换 5) 子进程发送信号给父进程表示完成,父进程更新统计信息 rdb...); 当Redis重启时再次执行AOF文件中的命令来恢复数据。...2) 父进程执行fork操作创建子进程,这个过程中父进程是阻塞的。...5.1) 子进程写完新的AOF文件后,向父进程发信号,父进程更新统计信息,具体可以通过info persistence查看。
Spring Boot 整合Spring Data JPA 创建项目 ,修改pom文件 继承SpringBoot 启动器的父项目 添加部署tomcat,使用thymeleaf进行开发,采取Jpa规范和单元测试的启动器...会默认以0为key,当有两个无参方法使用缓存时mkey会冲突。...它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C 在日期字段中就相当于日历5 日以后的第一天。 1C 在星期字段中相当于星期日后的第一天。...L 该字符只在日期和星期字段中使用,代表“Last”的意思,但它在两个字段中意思不同。...原因:在quartz中定时任务的创建时通过AdaptableJobFactory类中的createJobInstance方法创建,使用的是反射,没有使用spring,所以无法注入对象。
二、RDB持久化 RDB持久化是将当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化),保存的文件后缀是rdb;当Redis重新启动时,可以读取快照文件恢复数据。...2) 父进程执行fork操作创建子进程,这个过程中父进程是阻塞的,Redis不能执行来自客户端的任何命令。...5) 子进程发送信号给父进程表示完成,父进程更新统计信息。 RDB文件是经过压缩的二进制文件,文件格式如下图所示(图片来源:《Redis设计与实现》): ?...父进程执行fork操作创建子进程,这个过程中父进程是阻塞的。...更新AOF文件 1). 子进程写完新的AOF文件后,向父进程发信号,父进程更新统计信息,具体可以通过info persistence查看。 2).
fork() 系统调用在父进程和子进程中的行为确实有些特殊。当一个进程调用 fork() 时,它会创建一个新的子进程,子进程是父进程的副本,包括代码、数据、堆栈等。...在 fork() 之后,父进程和子进程将并发执行相同的代码。这意味着 fork() 系统调用在父进程和子进程中都会执行。fork() 的返回值规则是为了让父进程和子进程能够区分自己的角色。...在父进程中,fork() 返回新创建子进程的进程 ID(PID);在子进程中,fork() 返回 0。...由于父进程和子进程并发执行相同的代码,它们可以根据 fork() 的返回值来判断自己是父进程还是子进程,并执行不同的代码路径。...当通过 Zygote 进程 fork 出新的应用程序进程时,新进程可以直接使用这些已加载的类和资源,无需再次加载。这样可以大大减少应用程序启动时的类加载和资源初始化时间,提高启动速度。
领取专属 10元无门槛券
手把手带您无忧上云