首页 文章 精选 留言 我的

精选列表

搜索[EdgeOneMakersAgent案例],共10000篇文章
优秀的个人博客,低调大师

MySQL批量更新死锁案例分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/82803467 问题描述 在做项目的过程中,由于写SQL太过随意,一不小心就抛了一个死锁异常,如下: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction at sun.reflect.GeneratedConstructorAccessor247.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.Util.getInstance(Util.java:381) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1045) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922) 表结构如下: CREATE TABLE `user_item` ( `id` BIGINT(20) NOT NULL, `user_id` BIGINT(20) NOT NULL, `item_id` BIGINT(20) NOT NULL, `status` TINYINT(4) NOT NULL, PRIMARY KEY (`id`), KEY `idx_1` (`user_id`,`item_id`,`status`) ) ENGINE=INNODB DEFAULT CHARSET=utf-8 SQL语句如下: update user_item set status=1 where user_id=? and item_id=? 原因分析 mysql的事务支持与存储引擎有关,MyISAM不支持事务,INNODB支持事务,更新时采用的是行级锁。这里采用的是INNODB做存储引擎,意味着会将update语句做为一个事务来处理。前面提到行级锁必须建立在索引的基础,这条更新语句用到了索引idx_1,所以这里肯定会加上行级锁。 行级锁并不是直接锁记录,而是锁索引,如果一条SQL语句用到了主键索引,mysql会锁住主键索引;如果一条语句操作了非主键索引,mysql会先锁住非主键索引,再锁定主键索引。 这个update语句会执行以下步骤: 1、由于用到了非主键索引,首先需要获取idx_1上的行级锁 2、紧接着根据主键进行更新,所以需要获取主键上的行级锁; 3、更新完毕后,提交,并释放所有锁。 如果在步骤1和2之间突然插入一条语句:update user_item .....where id=? and user_id=?,这条语句会先锁住主键索引,然后锁住idx_1。 蛋疼的情况出现了,一条语句获取了idx_1上的锁,等待主键索引上的锁;另一条语句获取了主键上的锁,等待idx_1上的锁,这样就出现了死锁。 解决方案 1、先获取需要更新的记录的主键 select id from user_item where user_id=? and item_id=? 2、逐条更新 for (Long id : idList) { userItemDAO.updateStatus(id, userId, 1); } update user_item set status=? where id=? and user_id=? 这样貌似解决了,都是对单条进行操作,都是先获取主键上的锁,再获取idx_1上的锁。 不过这个解决方案与先前的更新语句不一样,先前的更新语句对所有记录的更新在一个事务中,采用循环更新后并不在同一个事务中,所以在for循环外面还得开一个事务。 Exception e = (Exception)getDbfeelTransactionTemplate().execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { try { for(Long id:idList) { userItemDAO.updateStatus(id,userId,1) } return null; }catch(DAOException e) { status.setRollbackOnly(); return e; } catch (Exception e) { status.setRollbackOnly(); return e; } } }); 小结:在采用INNODB的MySQL中,更新操作默认会加行级锁,行级锁是基于索引的,在分析死锁之前需要查询一下mysql的执行计划,看看是否用到了索引,用到了哪个索引,对于没有用索引的操作会采用表级锁。如果操作用到了主键索引会先在主键索引上加锁,然后在其他索引上加锁,否则加锁顺序相反。在并发度高的应用中,批量更新一定要带上记录的主键,优先获取主键上的锁,这样可以减少死锁的发生。 感谢您的关注!可加QQ1群:135430763,QQ2群:454796847,QQ3群:187424846。QQ群进群密码:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,备注:“xttblog”,添加助理微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

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

多线程 简单的实现案例

package com; import java.io.IOException; import java.nio.CharBuffer; public class Demo04 { public static void main(String[] args) { /* MyThread t1 = new MyThread(); t1.setName("线程一"); MyThread t2 = new MyThread(); t2.setName("线程二"); MyThread t3 = new MyThread(); t3.setName("线程三"); MyThread t4 = new MyThread(); t4.setName("线程四"); t1.start(); t2.start(); t3.start(); t4.start();*/ test02(); } public static void test02(){ MyThread02 thread02 = new MyThread02(); Thread t1 = new Thread(thread02); t1.setName("线程一"); Thread t2 = new Thread(thread02); t2.setName("线程二"); Thread t3 = new Thread(thread02); t3.setName("线程三"); Thread t4 = new Thread(thread02); t4.setName("线程四"); t1.start(); t2.start(); t3.start(); t4.start(); } } /** * 实现多线程的一种方式,继承Thread类,因为java类只能单继承,当不能使用继承时。就使用下面的另一个方式 * @author Administrator * */ class MyThread extends Thread{ //模拟一个多线程的Demo //定一个票数为100; private static int sum=100; @Override public void run() { //采用同步代码块实现线程安全 while (true) { synchronized (MyThread02.class) { if(sum<=0){ return; } sum--; System.out.println(Thread.currentThread().getName()+"售出一张票;还剩余"+sum+"张"); } } } } /** * 实现多线程的第二种方式;实现Runnable接口 * * @author Administrator * */ class MyThread02 implements Runnable{ //模拟一个多线程的Demo //定一个票数为100; private static int sum=100; @Override public void run() { //采用同步代码块实现线程安全 while (true) { synchronized (MyThread02.class) { if(sum<=0){ return; } sum--; System.out.println(Thread.currentThread().getName()+"售出一张票;还剩余"+sum+"张"); } } } } 全部都写在一个类里面了;直接新建一个类;复制,粘贴,导包就可以了

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

Apache 虚拟主机配置案例

NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin admin@ free .com DocumentRoot "/usr/local/apache/htdocs" ServerName www. free .com ErrorLog "logs/www.free.com.error.log" CustomLog "logs/www.free.com.access.log" combined <Directory "/usr/local/apache/docs" > Options Indexes FollowSymLinks DirectoryIndex index.html index.php index.htm AllowOverride None Order allow,deny Allow from all < /Directory > < /VirtualHost > <VirtualHost *:80> ServerAdmin admin@ free .com DocumentRoot "/data/html/wordpress" ServerName blog. free .com #ServerAlias blog1.free.com ErrorLog "logs/blog.free.com.error.log" CustomLog "logs/blog.free.com.access.log" combined <Directory "/data/html/wordpress" > Options Indexes FollowSymLinks DirectoryIndex index.html index.php index.htm AllowOverride None Order allow,deny Allow from all < /Directory > < /VirtualHost > 本文转自 dengaosky 51CTO博客,原文链接:http://blog.51cto.com/dengaosky/1855311,如需转载请自行联系原作者

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

css案例学习之继承关系

代码 <html> <head> <title>继承关系</title> <style> body{ color:blue; /* 颜色 */ text-decoration:underline; /* 下划线 */ } em{ color:red; /* 颜色 */ } </style> </head> <body> <h1><em>前沿</em>教室</h1> <p>欢迎来到前沿教室,这里为您提供丰富学习内容。</p> <ul> <li>在这里,你可以学习到: <ul> <li>HTML</li> <li>CSS <ul class="css"> <li>CSS初级</li> <li>CSS中级</li> <li>CSS高级</li> </ul> </li> <li>Javascript</li> </ul> </li> <li>你还可以学习到: <ol> <li>Flash</li> <li>Dreamweaver</li> <li>Photoshop</li> </ol> </li> </ul> <p>如果您有任何问题,欢迎联系我们</p> </body> </html> 说明:body下面的元素都继承了body的属性。然后em中的颜色属性又会被覆盖掉。 后代选择器 代码 <html> <head> <title>继承关系</title> <style> h1{ color:blue; /* 颜色 */ text-decoration:underline; /* 下划线 */ } em{ color:red; /* 颜色 */ } li li{ color:green ; font-weight:bold; } </style> </head> <body> <h1><em>前沿</em>教室</h1> <p>欢迎来到前沿教室,这里为您提供丰富学习内容。</p> <ul> <li>在这里,你可以学习到: <ul> <li>HTML</li> <li>CSS <ul> <li>CSS初级</li> <li>CSS中级</li> <li>CSS高级</li> </ul> </li> <li>Javascript</li> </ul> </li> <li>你还可以学习到: <ol> <li>Flash</li> <li>Dreamweaver</li> <li>Photoshop</li> </ol> </li> </ul> <p>如果您有任何问题,欢迎联系我们</p> </body> </html> 说明:li 下面的li会被添加绿色属性 包括孙子,曾孙子 本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/4987392.html,如需转载请自行联系原作者

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

MapReduce初级案例——单表关联

“ 单表关联”这个实例要求从给出的数据中寻找所关心的数据,它是对原始数据所包含信息的挖掘。下面进入这个实例。 1 .实例描述 实例中给出 child-parent(孩子——父母)表,要求输出 grandchild-grandparent(孙子——爷奶)表。 样例输入如下所示。 file: 家族树状关系谱: 样例输出如下所示。 file: 2 .设计思路 分析这个实例,显然需要进行单表连接,连接的是左表的 parent 列和右表的 child 列,且左表和右表是同一个表。 连接结果中除去连接的两列就是所需要的结果——“ grandchild–grandparent”表。要用MapReduce 解决这个实例, 首先应该考虑如何实现表的自连接; 其次就是连接列的设置;最后是结果的整理。 考虑到 MapReduce 的 shuffle 过程会将相同的 key 会连接在一起,所以可以将 map 结果的 key 设置成待连接的列,然后列中相同的值就自然会连接在一起了。再与最开始的分析联系起来: 要连接的是左表的 parent 列和右表的 child 列,且左表和右表是同一个表,所以在 map阶段将读入数据分割成 child 和 parent 之后,会将 parent 设置成 key, child 设置成 value进行输出,并作为左表;再将同一对 child 和 parent 中的 child 设置成 key, parent 设置成value 进行输出,作为右表。 为了区分输出中的左右表,需要在输出的 value 中再加上左右表的信息,比如在 value 的 String 最开始处加上字符 1 表示左表,加上字符 2 表示右表。 这样在 map 的结果中就形成了左表和右表,然后在 shuffle 过程中完成连接。 reduce 接收到连接的结果,其中每个 key 的 value-list 就包含了“ grandchild–grandparent”关系。 取出每个key 的 value-list 进行解析,将左表中的 child 放入一个数组, 右表中的 parent 放入一个数组,然后对两个数组求笛卡尔积就是最后的结果了。 3 .程序代码 程序代码如下所示。 4 .代码结果 准备测试数据 通过 Eclipse 下面的“ DFS Locations”在“ /user/hadoop”目录下创建输入文件“ STjoin_in”文件夹( 备注:“ STjoin_out”不需要创建。)如图 4.4-1 所示,已经成功创建。 然后在本地建立一个 txt 文件,通过 Eclipse 上传到“ /user/hadoop/STjoin_in”文件夹中,一个 txt 文件的内容如“实例描述”那个文件一样。如图 4.4-2 所示,成功上传之后。 从 SecureCRT 远处查看“ Master.Hadoop”的也能证实我们上传的文件,显示其内容如图 4.4-3 所示: 运行详解 ( 1) Map 处理: map 函数输出结果如下所示。 ( 2) Shuffle 处理 在 shuffle 过程中完成连接。 首先由语句“ 0 != grandchildnum && 0 != grandparentnum”得知,只要在“ value-list”中没有左表或者右表,则不会做处理,可以根据这条规则去除无效的 shuffle 连接。 然后根据下面语句进一步对有效的 shuffle 连接做处理。 针对一条数据进行分析: 分析结果: 左表用“ 字符 1”表示, 右表用“ 字符 2”表示,上面的 中的“ key”表示左表与右表的连接键。而“ value-list”表示以“ key”连接的左表与右表的 相关数据。 根据上面针对左表与右表不同的处理规则,取得两个数组的数据如下所示: 然后根据下面语句进行处理。 处理结果如下面所示: 其他的有效 shuffle 连接处理都是如此。 (3)查看运行结果 这时我们右击 Eclipse 的“ DFS Locations”中“ /user/hadoop”文件夹进行刷新,这时会发现多出一个“ STjoin_out”文件夹,且里面有 3 个文件,然后打开双其“ part-r-00000”文件,会在 Eclipse 中间把内容显示出来。如图 4.4-4 所示。 本文作者:虾皮 来源:51CTO

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

rsync+inotify实时同步案例

随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了! 1.1 inotify介绍2.1 rsync+inotify同步逻辑图3.1 环境部署4.1 inotify-slave部署4.1.1检查是否安装rsync4.1.2 新建rsync用户及模块目录并更改其用户组4.1.3 编写rsync daemon配置文件/etc/rsyncd.conf4.1.4 配置虚拟用户的密码文件4.1.5 启动rsync 服务4.1.6 通过inotify-master测试推送5.1 inotify-master部署5.1.1 查看当前系统是否支持inotify5.1.2 inotify安装5.1.3 inotify之inotifywait命令常用参数详解5.1.4 编写监控脚本并加载到后台执行5.1.5 实时同步测试 1.1 inotify介绍 inotify是一种强大的、细粒度的、异步的文件系统事件控制机制。linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施监控的软件。 2.1基本架构 3.1 基本环境部署(这里为了避免不兼容的情况出现,采用统一版本的系统) 主机名 IP地址 系统版本 内核版本 inotify master 192.168.42.116 centos 6.8 2.6.32-642.el6.x86_64 inotify slave 192.168.42.112 centos 6.8 2.6.32-642.el6.x86_64 4.1 inotify-slave部署 这里就是部署rsync服务,rsync daemon工作模式。 4.1.1检查是否安装rsync rpm-qarsync 结果 4.1.2 新建rsync用户及模块目录并更改其用户组 useraddrsync-s/sbin/nologin-M mkdir/backup #创建rsyncdaemon工作模式的模块目录chownrsync.rsync/backup/ #更改模块目录的用户组ll-d/backup/ 4.1.3 编写rsync daemon配置文件/etc/rsyncd.conf ##rsyncd.confstart## #工作中指定用户(需要指定用户) uid=rsync gid=rsync #相当于黑洞.出错定位 usechroot=no #有多少个客户端同时传文件 maxconnections=200 #超时时间 timeout=300 #进程号文件 pidfile=/var/run/rsyncd.pid #锁文件 lockfile=/var/run/rsync.lock #日志文件 logfile=/var/log/rsyncd.log #模块开始 #这个模块对应的是推送目录#模块名称随便起[backup]#需要同步的目录 path=/backup/ #表示出现错误忽略错误 ignoreerrors #表示网络权限可写(本地控制真正可写) readonly=false #这里设置IP或让不让同步list=false #指定允许的网段 hostsallow=192.168.42.0/24 #拒绝链接的地址,一下表示没有拒绝的链接。 hostsdeny=0.0.0.0/32#不要动的东西(默认情况) #虚拟用户 authusers=root #虚拟用户的密码文件 secretsfile=/etc/rsync.password #配置文件的结尾 #rsync_config_______________end 4.1.4 配置客户端及虚拟inotify-backup用户的密码文件 echo"root:123456">/etc/rsync.password #注:这里是客户端,密码文件得写全,root为rsync同步使用的用户,123456为这个虚拟用户的密码 chmod600/etc/rsync.password #为密码文件提权,增加安全性 4.1.5 启动rsync 服务 rsync--daemon#启动rsync服务ps-ef|greprsync root23891010:15?00:00:00rsync--daemon root23922305010:15pts/000:00:00greprsync ss-tunl tcpLISTEN05:::873:::* tcpLISTEN05*:873*:* 4.1.6 通过inotify-master测试推送 inotify-master配置密码文件,测试推送 echo"123456">/etc/rsync.password #注意:服务器端只要写密码即可,切记。 chmod600/etc/rsync.password echo"hellosjf">test.txt rsync-avztest.txtroot@192.168.42.116::backup--password-file=/etc/rsync.password sendingincrementalfilelist test.txt sent79bytesreceived27bytes42.40bytes/sec totalsizeis10speedupis0.09inotify-slave检查: ll/backup/ total4-rw-r--r--1rsyncrsync10Oct2910:20test.txt cat/backup/test.txt hellosjf 5.1 inotify-master部署 注: inotify是rsync客户端安装和执行的 企业场景压力测试200-300个同步限制,受网卡,磁盘,带宽等的制约。 5.1.1 查看当前系统是否支持inotify ll/proc/sys/fs/inotify/ total0-rw-r--r--1rootroot0Oct2910:43max_queued_events -rw-r--r--1rootroot0Oct2910:43max_user_instances -rw-r--r--1rootroot0Oct2910:43max_user_watches#显示这三个文件则证明支持。番外: /proc/sys/fs/inotify/max_queued_evnets 表示调用inotify_init时分配给inotifyinstance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。 /proc/sys/fs/inotify/max_user_instances 表示每一个realuserID可创建的inotifyinstatnces的数量上限。 /proc/sys/fs/inotify/max_user_watches 表示每个inotifyinstatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。 例如:echo30000000>/proc/sys/fs/inotify/max_user_watches 5.1.2 inotify的安装 inotify可以编译安装也可以直接yum安装 我这里采用的是yum安装的方式 yum-yinstallinotify-tools 当然我这里也给出编译安装的方法 wgethttp://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz tarzxfinotify-tools-3.14.tar.gzcdinotify-tools-3.14./configure--prefix=/usr/local/inotify-3.14 #配置inotify,并指定安装路径为/usr/local/inotify-3.14make&&makeinstall 注意这里安装完成后记得将命令所在路径引入环境变量 5.1.3 inotify之inotifywait命令常用参数详解 inotifywait--help -r|--recursiveWatchdirectoriesrecursively. #递归查询目录-q|--quietPrintless(onlyprintevents). #打印监控事件的信息-m|--monitorKeeplisteningforeventsforever.Withoutthisoption,inotifywait willexitafteroneeventisreceived. #始终保持事件监听状态--excludei<pattern>Like--excludebutcaseinsensitive. #排除文件或目录时,不区分大小写。--timefmt<fmt>strftime-compatibleformatstringforusewith%Tin--formatstring. #指定时间输出的格式--format<fmt>Printusingaspecifiedprintf-likeformatstring; readthemanpageformoredetails. #打印使用指定的输出类似格式字符串-e|--event<event1>[-e|--event<event2>...]Listenforspecificevent(s). Ifomitted,alleventsarelistenedfor. #通过此参数可以指定需要监控的事件如下所示: Events: accessfileordirectorycontentswereread #文件或目录被读取。modifyfileordirectorycontentswerewritten #文件或目录内容被修改。attribfileordirectoryattributeschanged #文件或目录属性被改变。closefileordirectoryclosed,regardlessofread/writemode #文件或目录封闭,无论读/写模式。openfileordirectoryopened #文件或目录被打开。moved_tofileordirectorymovedtowatcheddirectory #文件或目录被移动至另外一个目录。 movefileordirectorymovedtoorfromwatcheddirectory #文件或目录被移动另一个目录或从另一个目录移动至当前目录。 createfileordirectorycreatedwithinwatcheddirectory #文件或目录被创建在当前目录deletefileordirectorydeletedwithinwatcheddirectory #文件或目录被删除 unmountfilesystemcontainingfileordirectoryunmounted #文件系统被卸载 5.1.4 编写监控脚本并加载到后台执行 #!/bin/bash#sjfhost01=192.168.42.116 #inotify-slave的ip地址src=/backup/ #本地监控的目录dst=backup #inotify-slave的rsync服务的模块名user=rsync_backup #inotify-slave的rsync服务的虚拟用户rsync_passfile=/etc/rsync.password #本地调用rsync服务的密码文件#inotify_home=/usr/share/doc/inotify-3.14 #inotify的安装目录inotify_home=/usr #这个是yum安装的软件的安装所在目录 #judge if[-z"$src"]\ ||[-z"${rsync_passfile}"]\ ||[-z"${inotify_home}/bin/inotifywait"]\ ||[-z"/usr/bin/rsync"];thenecho"CheckFileandFolder" exit9 fi ${inotify_home}/bin/inotifywait-mrq--timefmt'%d/%m/%y%H:%M' --format'%T%w%f'-eclose_write,delete,create,attrib$src\ |whilereadfiledo#rsync-avzP--delete--timeout=100 --password-file=${rsync_passfile}$src$user@$host01::$dst>/dev/null2>&1cd$src &&rsync-aruz-R--delete./--timeout=100$user@$host01::$dst --password-file=${rsync_passfile}>/dev/null2>&1doneexit0 #将脚本加入后台执行 bashinotify.sh& [1]3357 5.1.5 实时同步测试 inotify-master操作: cd/backup/foriin`seq200`;dotouch$i;done #创建200个文件ls-l--time-style=full-iso total0 -rw-r--r--1rootroot02016-10-2911:38:16.183409656+08001 -rw-r--r--1rootroot02016-10-2911:38:16.225409783+080010 -rw-r--r--1rootroot02016-10-2911:38:16.526410667+0800100 -rw-r--r--1rootroot02016-10-2911:38:16.528410673+0800101 -rw-r--r--1rootroot02016-10-2911:38:16.530410679+0800102 -rw-r--r--1rootroot02016-10-2911:38:16.533410688+0800103 -rw-r--r--1rootroot02016-10-2911:38:16.535410694+0800104 -rw-r--r--1rootroot02016-10-2911:38:16.538410703+0800105 -rw-r--r--1rootroot02016-10-2911:38:16.539410707+0800106 -rw-r--r--1rootroot02016-10-2911:38:16.552410742+0800107 inotify-slave检查 ll--time-style=full-iso total0 -rw-r--r--1rsyncrsync02016-10-2911:38:16.000000000+08001 -rw-r--r--1rsyncrsync02016-10-2911:38:16.000000000+080010 -rw-r--r--1rsyncrsync02016-10-2911:38:16.000000000+0800100 -rw-r--r--1rsyncrsync02016-10-2911:38:16.000000000+0800101 -rw-r--r--1rsyncrsync02016-10-2911:38:16.000000000+0800102 -rw-r--r--1rsyncrsync02016-10-2911:38:16.000000000+0800103 -rw-r--r--1rsyncrsync02016-10-2911:38:16.000000000+0800104 -rw-r--r--1rsyncrsync02016-10-2911:38:16.000000000+0800105 -rw-r--r--1rsyncrsync02016-10-2911:38:16.000000000+0800106 -rw-r--r--1rsyncrsync02016-10-2911:38:16.000000000+0800107 -rw-r--r--1rsyncrsync02016-10-2911:38:16.000000000+0800108 这样我们结合inotify的测试就完成了,是不是很简单!

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册