基础
文章平均质量分 74
lang20150928
stay hungry stay foolish
展开
-
shell脚本命令学习
这段代码是一个Shell脚本函数,名为,其目的是停止一系列服务,特别是针对一个使用Apache Derby数据库的WebLogic环境。下面是逐行解释::定义了一个名为的函数。:这是一个注释行,说明将停止命令放在一个函数里是为了能够方便地在Unix环境下使用命令来调用这个函数以停止服务。命令用于捕获和处理信号,比如当收到中断信号时自动调用此函数清理资源。:这行代码检查环境变量是否已设置(非空)。如果已设置,则直接退出函数,避免重复执行停止操作。:另一个注释,说明接下来的代码块用于停止Derby数据库服务器,原创 2024-04-22 15:32:54 · 741 阅读 · 0 评论 -
Quartz项目搭建与任务执行源码分析
Quartz执行任务主要涉及到数据库中的QRTZ_TRIGGERS和QRTZ_FIRED_TRIGGERS,关注其中的STATE变化是重点。原创 2023-07-30 11:35:52 · 315 阅读 · 0 评论 -
Quartz线程调度源码分析
Quartz作为任务调度的组件,其中涉及到多种线程,主要分为主线程、调度线程和工作线程。主线程:创建Quartz的调度工厂(SchedulerFactory)、调度器(Scheduler)、触发器(Trigger)、任务(Job)并启动调度器的线程。这里的主线程只是为了区分Quartz内部线程,与程序的主线程并不等价,可以是任意的其他非Quartz线程。调度线程:根据触发条件获取需要执行的任务并分配给工作线程,只有一个工作线程:真实执行Job的线程,一般有多个。原创 2023-07-25 22:00:00 · 676 阅读 · 0 评论 -
sed进阶之创建sed实用工具
该地址模式能够匹配只含一个换行符的行,如果找到这样的行,而且是最后一行,删除命令就会删除它,如果不是最后一行,那么N命令会将下一行附加到它后面,然后分支命令会跳到循环起始位置重新开始。删除连续的空行的关键在于创建包含一个非空行和一个空行的地址区间,如果sed编辑器遇到了这个区间,它不会删除行,但对于不属于这个区间的行(两个或更多的空行),则执行删除操作。指定的区间是/./到/^$/,区间的开始地址会匹配任何至少含有一个字符的行,区间的结束地址会匹配一个空行,在这个区间内容的行不会被删除。原创 2023-05-01 16:13:29 · 630 阅读 · 1 评论 -
sed进阶之模式替换
符号代表替换命令中指定模式所匹配的字符串,如果只是想获取字符串的一部分,则需要通过正则表达式的子模式和反向引用。sed编辑器使用圆括号来定义替换模式中的子模式,随后使用特殊的字符组合来引用每个子模式匹配到的文本。反向引用由反斜线和数字组成,数字表明子模式的序号,第一个子模式为\1,第二个子模式为\2,以此类推。&符号可以代表替换命令中的匹配模式,不管模式匹配到了什么样的文本,都可以使用&符号代表这些内容。这样就能处理匹配模式的任何单词了。通过模式替换和测试命令在大数中插入逗号。原创 2023-05-01 16:04:36 · 103 阅读 · 0 评论 -
sed进阶之改变执行流程
如果替换命令成功匹配并完成了替换,测试命令就会跳转到指定的标签,如果替换命令未能匹配指定的模式,测试命令就不会跳转。如果某行匹配分支address(包含First单词),那么sed编辑器就会跳转到带有分支标签jump1的那一行,执行后面的命令,而其他行,则沿用脚本中原有的命令处理。address参数决定了哪些行会触发分支命令,label参数定义了要跳转的位置,如果没有label参数,则跳过触发分支命令的行,继续处理余下的文本行。除了可以跳转到sed脚本下方的标签,也可以跳转到靠前的标签,达到循环的效果。原创 2023-05-01 16:00:40 · 98 阅读 · 0 评论 -
sed进阶之保留空间和排除命令
模式空间(pattern space)是一块活跃的缓冲区,在sed编辑器执行命令时保存着待检查的文本,但它并不是sed编辑器保存文本的唯一空间。sed编辑器可以将命令应用于数据流中的每一行或是由单个地址或地址区间指定的多行。)命令用于排除(negate)命令,也就是让原本会起作用的命令失效。正常情况p命令只会打印匹配规则的行,加了感叹号之后,情况反过来了,除了包含单词Header的那一行,文件中的其他行都被打印出来了。对于sed命令在多行模式中没法匹配最后一行的情况,使用排除命令也可以解决。原创 2023-05-01 15:53:38 · 715 阅读 · 0 评论 -
sed进阶之多行命令
前面使用sed编辑器的基础命令时,所有的命令都是针对单行数据执行操作的。在sed编辑器读取数据流时,它会根据换行符的位置将数据分成行。sed编辑器会根据定义好的脚本命令,一次处理一行数据,然后移到下一行重复这个流程。但是有可能查找的短语出现在两行当中,此时普通的sed编辑器命令是无能为力的。所以,sed编辑器提供了3个可用于处理多行文本的特殊命令。原创 2023-04-30 22:38:09 · 1236 阅读 · 0 评论 -
sed编辑器基础命令
sed是一款流编辑器,可以在读取数据时快速地即时进行处理原创 2023-04-29 20:49:54 · 805 阅读 · 0 评论 -
在函数中使用变量
全局变量是在shell脚本内任何地方都有效的变量,如果在脚本的主体部分定义了一个全局变量,那么就可以在函数内读取它的值。类似的,在函数内定义了一个全局变量,那么也可以在脚本的主体部分读取它的值。无需在函数中使用全局变量,任何在函数内部使用的变量都可以被声明为局部变量。只需要在变量前面加上local关键字即可,local关键字可以保证变量仅仅在该函数中有效,如果函数之外有同名变量,那么shell会保持这两个变量的值互不干扰。即使在函数内部使用了$1和$2变量,但它们和脚本主体中的$1和$2变量不是一回事。原创 2023-04-26 21:27:51 · 450 阅读 · 0 评论 -
脚本函数基础
函数是一个脚本代码块,可以为其命名并在脚本中的任何位置重用它。每当需要在脚本中使用该代码块时,直接写函数名即可。称作调用函数。原创 2023-04-26 20:22:48 · 394 阅读 · 0 评论 -
通过POI拷贝sheet页并编辑
复制Excel中已有的sheet并编辑,然后保存原创 2023-04-24 15:47:32 · 57 阅读 · 0 评论 -
shell脚本控制
Linux系统允许使用信号来控制shell脚本。bash shell可以接收信号并将其传给由shell进程生成的所有进程。Linux信号可以轻而易举地杀死失控的进程或暂停耗时的进程。可以在脚本中用trap命令捕获信号并执行特定命令。这个功能提供了一种简单的方法来控制脚本运行时用户能够将其中断。在默认情况下,当在终端会话shell中运行脚本时,交互式shell会被挂起,直到脚本运行完毕。你可以在命令后加上一个&符号使脚本或命令以后台模式运行。原创 2023-04-22 22:52:47 · 554 阅读 · 0 评论 -
shell呈现数据
使用exec命令分配用于输出的文件描述符,比如exec 3> test13out将文件描述符3重定向到了另一个文件,当执行echo语句后面有 >&3时重定向到文件描述符3的输出会进入另一个文件,当然也可以通过 exec 3>>test13out进行追加写入。lsof命令可以使用-p指定进程ID,-d指定要显示的文件描述符编号。可以采用和重定向输出文件描述符同样的办法来重定向输入文件描述符,在重定向到文件之前,先将STDIN指向的位置保存到另一个文件描述符,然后在读取文件之后将STDIN恢复到原先的位置。原创 2023-04-22 00:12:45 · 437 阅读 · 0 评论 -
处理用户输入
命令行参数是在命令/脚本名之后出现的各个单词,其中,以连字符或双连字符起始的参数,因其能够改变命令的行为,被称为命令行选项。所以,命令行选项也是一种特殊形式的命令行参数。原创 2023-04-15 22:09:53 · 368 阅读 · 0 评论 -
循环结构化命令小结
shell脚本的目标是减轻系统管理员的工作负担,如果要创建一堆的用户账号,通过while循环可以降低工作的难度。bash shell还允许使用标准的命令重定向和管道来改变循环的输出,你可以将循环的输出重定向至文件或是通过管道将循环的输出传给另一个命令。也可以通过输入重定向读取文件的内容。until命令提供了迭代命令的另一种方式,但它的迭代建立在命令(或条件)产生非0退出状态码的基础上。for命令允许遍历一系列的值,无论是在命令行中提供的,还是包含在变量中的,或是通过文件名通配符匹配获得的文件名和目录名。原创 2023-04-15 11:13:05 · 342 阅读 · 0 评论 -
shell脚本编程系列
系列文章目录系列文章目录。原创 2023-04-15 10:34:30 · 94 阅读 · 0 评论 -
处理shell循环的输出
在shell脚本中,可以对循环的输出使用管道或进行重定向。这可以通过在done命令之后添加一个处理命令来实现。原创 2023-04-14 21:58:54 · 81 阅读 · 0 评论 -
Shell中的while和until循环
只要test命令退出状态码为0,就循环执行一组命令。如果test命令返回非0退出状态码,while命令就会停止执行循环。允许使用多个测试命令,但是只有最后一个测试命令的退出状态码会用于决定是否结束循环。原创 2023-04-14 20:59:05 · 63 阅读 · 0 评论 -
shell结构化命令中for命令
可以使用for命令来自动遍历目录中的文件,但是必须在文件名和路径名中使用通配符,这会强制文件名通配符匹配(file globbing)。单词中包含了单引号会导致一团糟,比如this’ll,此时要么使用转义字符来转义单引号,要么使用双引号来定义含有单引号的值。在最后一次迭代结束后,变量的值在shell脚本的剩余部分依然有效,会一直保留最后一次迭代时的值,当然可以修改。使用命令替换来执行任何能产生输出的命令,然后使用for命令使用该命令的输出。修改IFS的值,需要注意恢复原来的值,保证安全。原创 2023-04-12 20:52:00 · 432 阅读 · 0 评论 -
shell结构化命令if和case
结构化命令允许改变shell脚本的正常执行流程,包括if-then、if-then-else、case等原创 2023-04-12 19:42:46 · 87 阅读 · 0 评论 -
构建基础脚本
使用多个命令;创建脚本文件;echo显示消息;使用变量;重定向输入(追加);管道(1);数学运算(expr、$[]、bc)、退出脚本(exit)原创 2023-04-09 11:49:55 · 53 阅读 · 0 评论 -
使用并行流查找素数
使用并行流查找素数原创 2023-04-02 21:27:46 · 45 阅读 · 0 评论 -
mapstruct的使用和原理
通过注解在编译时生成了对象属性映射的方法,不需要手工编写那些毫无技术含量的setter和getter代码。原理其实还是注解的使用了。原创 2023-04-02 21:01:46 · 78 阅读 · 0 评论 -
递归的lambda表达式
递归意味着一个函数调用了自身。在Java中可以编写递归的lambda表达式,但是这个lamba表达式必须被赋值给一个静态变量或一个实例变量,否则会出现编译错误。原创 2023-03-19 21:46:06 · 77 阅读 · 0 评论 -
Invalid <url-pattern> [sso.action] in filter mapping
Caused by: java.lang.IllegalArgumentException: Invalid [sso.action] in filter mapping原创 2023-03-03 13:56:04 · 710 阅读 · 0 评论 -
Java代码规范
由于近年来对于代码质量的要求越来越高,特制定衡泰Java代码规范规则集X-JAVA-RULE,整体要求规则可用可查、循序渐进。可用是指考虑目前已有代码的体量,不满足这些规则的代码能否被修改,如果不能被修改,暂时没有必要纳入其中。可查是指有工具可以扫描出,而不是人工筛查。以下规则均附上了SonaQube中的相应规则名称。直接输入SonaQube即可。比如规则1循序渐进是指以下规则集不是最终版本,根据实际情况后续会不断扩展。规则集会增删,会被继承,但每次不建议加入过多规则,导致无法推进。原创 2023-02-27 10:28:52 · 655 阅读 · 0 评论 -
DCL实现单例类以及安全问题
DCL实现单例以及防止反射打破单例的问题原创 2023-02-26 20:47:13 · 59 阅读 · 0 评论 -
CSS选择器
CSS选择器(元素选择器、类选择器、位置选择器、状态选择器、混合选择器)原创 2022-07-20 17:45:00 · 95 阅读 · 0 评论 -
html中的链接学习记录
关于html文档中链接使用的基本使用说明原创 2022-07-06 18:15:00 · 97 阅读 · 0 评论 -
安全的发布
以下是线程不安全的延迟初始化public class UnsafeLazyInitialization { private static Resource resource; public static Resource getInstance() { if (resource == null) resource = new Resource(); // unsafe publication return resource;原创 2022-05-07 21:58:47 · 137 阅读 · 0 评论 -
构建高效可扩展缓存小案例
基本上每个应用都会用到缓存,通过缓存之前的计算结果可以有效的提高系统的吞吐率和减少延迟。下面代码中Computable接口用于抽象一个计算任务,具体的实现为ExpensiveFunction,在compute方法中假设通过复杂的计算,然后返回了接口。public interface Computable<A, V> { V compute(A arg) throws InterruptedException;}public class ExpensiveFunction implem原创 2022-04-11 14:41:05 · 377 阅读 · 0 评论 -
处理Mysql元数据锁的问题
show engine innodb status;SELECT sql_kill_blocking_connectionFROM sys.schema_table_lock_waitsWHERE blocking_lock_type <> 'SHARED_UPGRADABLE' AND (waiting_query LIKE 'alter%' OR waiting_query LIKE 'create%' OR waiting_query LIKE 'drop%' OR原创 2022-04-01 14:18:48 · 722 阅读 · 0 评论 -
闭锁Latches
A latch is a synchronizer that can delay the progress of threads until it reaches its terminal state闭锁是一种同步工具类,可以延迟进程的进度直到其到达终止状态。闭锁的作用相当于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过。当达到结束状态时,这扇门会打开并允许所有的线程通过。当闭锁到达结束状态后,将不会再改变状态,因此这扇门将永远保持打开状态闭锁可以用来确保某些活动直到其他..原创 2022-03-30 23:04:47 · 59 阅读 · 0 评论 -
一个关于线程安全性的小栗子
@ThreadSafepublic class StatelessFactorizer implements Servlet { public void service(ServletRequest req, ServletResponse resp) { BigInteger i = extractFromRequest(req); BigInteger[] factors = factor(i); encodeIntoResponse(resp, factors); }}没有状态原创 2022-03-27 21:41:04 · 442 阅读 · 0 评论 -
在现有的线程安全类中添加功能
重用能降低开发工作量、开发风险(因为现有的类都已经通过测试)以及维护成本。有时候,某个现有的线程安全类能支持我们需要的所有操作,但更多时候,现有的类只能支持大部分的操作,此时就需要在不破坏线程安全性的情况下添加一个新的操作。Reusing existing classes is often preferable to creating new ones: reuse can reduce development effort, development risk (because the existing原创 2022-03-27 21:16:31 · 418 阅读 · 0 评论 -
不可变与线程安全
通过锁方法解决多线程安全问题,但性能不好考虑锁细化This combination of an immutable holder object for multiple state variables related by an invariant,and a volatile reference used toensure its timely visibility, allows VolatileCachedFactorizer to be thread-safeeven though it原创 2022-03-15 23:17:45 · 70 阅读 · 0 评论 -
Future&CompletableFuture实战
Callable&Future&FutureTask介绍直接继承Thread或者实现Runnable接口都可以创建线程,但是这两种方法都有一个问题就是:没有返回值,也就是不能获取执行完的结果。因此java1.5就提供了Callable接口来实现这一场景,而Future和FutureTask就可以和Callable接口配合起来使用。Callable和Runnable的区别思考:为什么需要 Callable?@FunctionalInterfacepublic interface Ru原创 2021-12-12 14:02:55 · 184 阅读 · 0 评论 -
并发编程之ForkJoin工作原理分析
任务类型思考: 线程池的线程数设置多少合适?我们调整线程池中的线程数量的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能。在实际工作中,我们需要根据任务类型的不同选择对应的策略。CPU密集型任务CPU密集型任务也叫计算密集型任务,比如加密、解密、压缩、计算等一系列需要大量耗费 CPU 资源的任务。对于这样的任务最佳的线程数为 CPU 核心数的 1~2 倍,如果设置过多的线程数,实际上并不会起到很好的效果。此时假设我们设置的线程数量是 CPU 核心数的 2 倍以上原创 2021-12-11 19:52:55 · 4219 阅读 · 0 评论 -
阻塞队列BlockingQueue实战及其原理分析
并发编程系列阻塞队列介绍Queue接口public interface Queue<E> extends Collection<E> { //添加一个元素,添加成功返回true, 如果队列满了,就会抛出异常 boolean add(E e); //添加一个元素,添加成功返回true, 如果队列满了,返回false boolean offer(E e); //返回并删除队首元素,队列为空则抛出异常 E remove(); .原创 2021-12-11 19:09:48 · 172 阅读 · 0 评论