07 2025 档案

摘要:一,代码: //处理按钮点击事件 binding.button1.setOnClickListener { runBlocking { val channel = Channel<Int>() //发送消息 launch { (1..3).forEach { channel.send(it) log 阅读全文
posted @ 2025-07-26 11:39 刘宏缔的架构森林 阅读(25) 评论(0) 推荐(0)
摘要:一,代码: //处理按钮点击事件 binding.button1.setOnClickListener { runBlocking { //给协程命名 val job = launch(CoroutineName("协cor1")) { val corName = coroutineContext[ 阅读全文
posted @ 2025-07-26 11:39 刘宏缔的架构森林 阅读(15) 评论(0) 推荐(0)
摘要:一,协程调度器Coroutine Dispatcher Dispatchers.Main,它只在 UI 编程平台才有意义,在 Android、Swing 之类的平台上,一般只有 Main 线程才能用于 UI 绘制。这个 Dispatcher 在普通的 JVM 工程当中,是无法直接使用的。 Dispa 阅读全文
posted @ 2025-07-26 11:39 刘宏缔的架构森林 阅读(60) 评论(0) 推荐(0)
摘要:一,生命周期示意图 引用自极客时间朱老师 二,代码: binding.button1.setOnClickListener { runBlocking { val job = launch { println("launch开始") delay(1000L) println("launch结束") 阅读全文
posted @ 2025-07-26 11:39 刘宏缔的架构森林 阅读(28) 评论(0) 推荐(0)
摘要:一,代码: //处理按钮点击事件 binding.button1.setOnClickListener { runBlocking { // 仅用于测试,生成环境不要使用这么简易的CoroutineScope val scope = CoroutineScope(Job()) scope.launc 阅读全文
posted @ 2025-07-26 11:38 刘宏缔的架构森林 阅读(28) 评论(0) 推荐(0)
摘要:一,代码: //处理按钮点击事件 binding.button1.setOnClickListener { runBlocking { var i = 0 val jobs = mutableListOf<Job>() // 重复一万次,启动一万个协程 repeat(10000){ val job 阅读全文
posted @ 2025-07-26 11:38 刘宏缔的架构森林 阅读(16) 评论(0) 推荐(0)
摘要:一,代码: //处理按钮点击事件 binding.button1.setOnClickListener { runBlocking { suspend fun getResult1(): String { delay(3000L) // 模拟耗时操作 return "Result1" } suspe 阅读全文
posted @ 2025-07-26 11:38 刘宏缔的架构森林 阅读(21) 评论(0) 推荐(0)
摘要:一,代码: //处理按钮点击事件 binding.button1.setOnClickListener { runBlocking { suspend fun getResult1(): String { delay(1000L) // 模拟耗时操作 return "Result1" } suspe 阅读全文
posted @ 2025-07-26 11:38 刘宏缔的架构森林 阅读(32) 评论(0) 推荐(0)
摘要:一,代码: //处理按钮点击事件 binding.button1.setOnClickListener { runBlocking { val parentJob: Job var job1: Job? = null var job2: Job? = null var job3: Job? = nu 阅读全文
posted @ 2025-07-26 11:38 刘宏缔的架构森林 阅读(22) 评论(0) 推荐(0)
摘要:一,代码: binding.button1.setOnClickListener { runBlocking { suspend fun download() { // 模拟下载任务 val time=3000L logX("模拟下载用时: = $time") delay(time) } val j 阅读全文
posted @ 2025-07-26 11:38 刘宏缔的架构森林 阅读(19) 评论(0) 推荐(0)
摘要:一,代码: binding.button1.setOnClickListener { //先定义一个Int类的扩展函数 fun Int.square() = this * this //定义一个带接收器的lambda表达式 val squareFun: Int.()->Int = Int::squa 阅读全文
posted @ 2025-07-26 11:36 刘宏缔的架构森林 阅读(46) 评论(0) 推荐(0)
摘要:一,代码: binding.button1.setOnClickListener { System.setProperty("kotlinx.coroutines.debug", "on") println("main线程开始:${Thread.currentThread().name}") run 阅读全文
posted @ 2025-07-19 07:47 刘宏缔的架构森林 阅读(44) 评论(0) 推荐(0)
摘要:一,代码: binding.button1.setOnClickListener { println("sleep1 start,") // 协程已在等待时主线程还在继续 Thread.sleep(200L) // 阻塞主线程 0.2 秒钟 println("sleep1 end,") // 协程已 阅读全文
posted @ 2025-07-19 07:47 刘宏缔的架构森林 阅读(66) 评论(0) 推荐(0)
摘要:一,代码: binding.button1.setOnClickListener { //启动debug模式,可以打印协程的编号 System.setProperty("kotlinx.coroutines.debug", "on") println("runBlocking外运行: ${Threa 阅读全文
posted @ 2025-07-19 07:47 刘宏缔的架构森林 阅读(44) 评论(0) 推荐(0)
摘要:一,用runBlocking创建协程 1,代码: binding.button1.setOnClickListener { System.setProperty("kotlinx.coroutines.debug", "on") val count = AtomicInteger() val for 阅读全文
posted @ 2025-07-19 07:47 刘宏缔的架构森林 阅读(15) 评论(0) 推荐(0)
摘要:一,代码: //处理按钮点击事件,创建一个假数据,保存到viewmodel binding.button1.setOnClickListener { //只有一个函数类型作为函数参数 fun highOrderFunction(operation: (Int, Int) -> Int): Int { 阅读全文
posted @ 2025-07-19 07:46 刘宏缔的架构森林 阅读(36) 评论(0) 推荐(0)
摘要:一,代码: binding.button1.setOnClickListener { //定义一个函数类型的变量,用来返回参数的平方 val square: (Int) -> Int = { it * it } // `it` 代表传入的参数 println("square(5)的结果:"+squa 阅读全文
posted @ 2025-07-19 07:46 刘宏缔的架构森林 阅读(39) 评论(0) 推荐(0)
摘要:一,代码: // 1 . 声明函数类型,需放在顶层,不能在类和方法中 typealias mathAdd = (Int, Int) -> Int ... //处理按钮点击事件 binding.button1.setOnClickListener { // 2 . 为预定义函数类型实例化 var ad 阅读全文
posted @ 2025-07-19 07:46 刘宏缔的架构森林 阅读(19) 评论(0) 推荐(0)
摘要:一,安装第三方库: 文档地址: https://www.workerman.net/doc/webman/components/crontab.html 从命令行安装: $ composer require workerman/crontab ./composer.json has been upd 阅读全文
posted @ 2025-07-19 07:46 刘宏缔的架构森林 阅读(85) 评论(0) 推荐(0)
摘要:一,代码: binding.button2.setOnClickListener { println("点击代码块开始:") runBlocking { // 1 launch { val threadId = Thread.currentThread().id val threadName = T 阅读全文
posted @ 2025-07-19 07:44 刘宏缔的架构森林 阅读(18) 评论(0) 推荐(0)
摘要:一,代码: //launch binding.button1.setOnClickListener { println("点击代码块开始:") GlobalScope.launch { // 1 println("Launch执行开始") // 2 delay(1000L) // 3 println 阅读全文
posted @ 2025-07-19 07:44 刘宏缔的架构森林 阅读(88) 评论(0) 推荐(0)
摘要:一,下载安装包 官方地址: https://github.com/phpredis/phpredis/tags 因为要针对旧版本,我们使用以前下载的安装包 二,安装 解压 $ tar -zxvf redis-2.2.8.tgz 配置扩展库 cd redis-2.2.8 $ /data/softwar 阅读全文
posted @ 2025-07-19 07:43 刘宏缔的架构森林 阅读(23) 评论(0) 推荐(0)
摘要:一,用-i参数: # /data/software/php/bin/php -i | grep 'Configuration File' Configuration File (php.ini) Path => /etc Loaded Configuration File => /etc/php.i 阅读全文
posted @ 2025-07-19 07:43 刘宏缔的架构森林 阅读(26) 评论(0) 推荐(0)
摘要:一,默认启动时的进程 root 927 0.9 1.7 8399844 284276 pts/1 Sl 13:48 0:13 /data/soft/jdk1.8.0_71/jre/bin/java -Djava.util.logging.config.file=/data/soft/apache-t 阅读全文
posted @ 2025-07-19 07:43 刘宏缔的架构森林 阅读(27) 评论(0) 推荐(0)
摘要:一,用grant命令新建用户,同时授权 GRANT ALL PRIVILEGES ON your_db.* TO 'your_user_name'@your.app.ip.addr IDENTIFIED BY 'your pass'; flush privileges 二,检查效果: 查看mysql 阅读全文
posted @ 2025-07-19 07:43 刘宏缔的架构森林 阅读(14) 评论(0) 推荐(0)
摘要:linux:centos6安装tomcat一,下载 tomcat的官网: https://tomcat.apache.org/ 这里使用之前下载好的安装包 二,安装 解压: # unzip apache-tomcat-8.0.28.zip 移动到安装目录下: # mv apache-tomcat-8.0.28 /data/soft/ 配置环 阅读全文
posted @ 2025-07-19 07:43 刘宏缔的架构森林 阅读(10) 评论(0) 推荐(0)
摘要:一,下载 官方网站: https://www.oracle.com/cn/java 需要注册账号, 我们需要的版本是jdk1.8.0_60官网已经不提供了,只能下载与之相近的版本: 解压: # tar -zxvf jdk-8u71-linux-x64.tar.gz 二,安装 把解压出来的目录,移动到 阅读全文
posted @ 2025-07-19 07:43 刘宏缔的架构森林 阅读(27) 评论(0) 推荐(0)
摘要:一,安装 解压 # tar -zxvf redis-3.2.8.tar.gz 进入源码目录,编译: ]# cd redis-3.2.8 # make 安装: # make install PREFIX=/data/soft/redis-3.2.8 配置: 把源码目录中的redis.conf复制到安装 阅读全文
posted @ 2025-07-19 07:43 刘宏缔的架构森林 阅读(28) 评论(0) 推荐(0)
摘要:一,遇到的问题: 看到一个进程,想知道这个进程的工作目录,如下: # ps auxfww | grep redis root 22715 0.0 0.0 103252 828 pts/3 S+ 17:10 0:00 | \_ grep redis root 25816 0.0 0.7 455064 阅读全文
posted @ 2025-07-19 07:41 刘宏缔的架构森林 阅读(51) 评论(0) 推荐(0)
摘要:一,安装 用yum从命令行安装 # yum install memcached 查看版本: # memcached -h memcached 1.4.4 -p <num> TCP port number to listen on (default: 11211) .. 查看服务状态 # servic 阅读全文
posted @ 2025-07-19 07:40 刘宏缔的架构森林 阅读(8) 评论(0) 推荐(0)
摘要:一,配置: 动态ip 的网段 server 10.8.0.0 255.255.255.0 静态ip:放服务器,网段 route 10.8.1.0 255.255.255.0 给客户端推路由,对应静态ip的,否则客户端不能访问 push "route 10.8.1.0 255.255.255.0" c 阅读全文
posted @ 2025-07-19 07:40 刘宏缔的架构森林 阅读(1) 评论(0) 推荐(0)
摘要:一,问题 配置ifconfig-pool-persist ipp.txt后,不起作用,客户端的ip每次重启仍然会变化 二,查找原因 # grep persist /var/log/openvpn.log WARNING: --ifconfig-pool-persist will not work w 阅读全文
posted @ 2025-07-19 07:40 刘宏缔的架构森林 阅读(1) 评论(0) 推荐(0)
摘要:一,配置 在openvpn服务端所在机器上配置: # vi /etc/openvpn/server/server.conf 把下面一行取消注释 client-config-dir ccd 然后在/etc/openvpn下创建ccd目录 # mkdir ccd # cd ccd # vi client 阅读全文
posted @ 2025-07-19 07:40 刘宏缔的架构森林 阅读(1) 评论(0) 推荐(0)
摘要:一,安装 升级apt源 # apt update 用apt安装 # apt install openvpn 二,配置并连接 复制配置文件到client目录下: 进入目录 # cd /etc/openvpn/client/ 复制文件: # cp -axv /home/liuhongdi/work/cl 阅读全文
posted @ 2025-07-19 07:40 刘宏缔的架构森林 阅读(1) 评论(0) 推荐(0)
摘要:一,配置文件位置 如图: 项目->config->plugin->webman->console->app.php 二,内容: <?php return [ 'enable' => true, 'build_dir' => BASE_PATH . DIRECTORY_SEPARATOR . 'bui 阅读全文
posted @ 2025-07-19 07:40 刘宏缔的架构森林 阅读(20) 评论(0) 推荐(0)
摘要:一,客户端机器:安装openvpn 用yum安装 # yum install openvpn 查看当前版本: # openvpn --version OpenVPN 2.5.11 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] 阅读全文
posted @ 2025-07-19 07:40 刘宏缔的架构森林 阅读(1) 评论(0) 推荐(0)
摘要:一,出现错误的代码: 1,代码 func startBackgroundJob() { ticker := time.NewTicker(1 * time.Minute) timeStop, _ := time.Parse("2006-01-02 15:04:05", "2025-07-08 09: 阅读全文
posted @ 2025-07-19 07:40 刘宏缔的架构森林 阅读(77) 评论(0) 推荐(0)
摘要:一,代码 //定时运行功能, func startBackgroundJob() { ticker := time.NewTicker(1 * time.Minute) go func() { for range ticker.C { // 执行后台任务逻辑 now := time.Now() // 阅读全文
posted @ 2025-07-19 07:39 刘宏缔的架构森林 阅读(11) 评论(0) 推荐(0)
摘要:一,文档 地址 https://www.workerman.net/q/14237 二,子进程退出: 代码: Worker::stopAll(); 例子: public function list(Request $request) { Worker::stopAll(); $where = []; 阅读全文
posted @ 2025-07-19 07:39 刘宏缔的架构森林 阅读(14) 评论(0) 推荐(0)
摘要:一,报错信息 某个站点测试用octane运行后又改回通过php-fpm运行, 访问时报错: In Application.php line 933: Class "Laravel\Octane\OctaneServiceProvider" not found 二,解决: 原因是因为之前为项目安装过o 阅读全文
posted @ 2025-07-19 07:38 刘宏缔的架构森林 阅读(28) 评论(0) 推荐(0)
摘要:一,官方文档地址: https://openvpn.net/community-resources/configuring-client-specific-rules-and-access-policies/ 二,可以使用的地址对: [ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14 阅读全文
posted @ 2025-07-09 13:38 刘宏缔的架构森林 阅读(1) 评论(0) 推荐(0)
摘要:一,报错信息 web nginx[55459]: nginx: [warn] low address bits of 10.8.0.14/24 are meaningless in /opt/soft/nginx/conf/conf.d/adm.conf:52 原因: 这个问题只是因为写命令时没有严 阅读全文
posted @ 2025-07-05 08:51 刘宏缔的架构森林 阅读(64) 评论(0) 推荐(0)
摘要:一,修改openvpn配置文件 # vi server.conf 修改这里指定端口: port 1194 例如:改为2194 然后重启openvpn服务 # systemctl restart openvpn-server@server.service 二,配置防火墙 1,本机器防火墙 查看open 阅读全文
posted @ 2025-07-05 08:51 刘宏缔的架构森林 阅读(0) 评论(0) 推荐(0)
摘要:一,格式: <ca> </ca> <cert> </cert> <key> </key> key-direction 1<tls-auth> </tls-auth> 二,看一个例子: 以上海大学的vpn为例:来源: https://vpn.shu.edu.cn/index/OpenVPNsysm/A 阅读全文
posted @ 2025-07-05 08:50 刘宏缔的架构森林 阅读(1) 评论(0) 推荐(0)
摘要:一,nginx的配置文件 例子: server { listen 443 ssl; listen 1597 ssl; server_name adm.laowang.com; root /web/site/public; index index.php; access_log /logs/adm/a 阅读全文
posted @ 2025-07-05 08:48 刘宏缔的架构森林 阅读(182) 评论(0) 推荐(0)
摘要:一,服务端配置 创建目录: # mkdir /etc/openvpn/auth 1,在server.conf追加: script-security 3 #允许使用自定义脚本 auth-user-pass-verify /etc/openvpn/auth/checkpsw.sh via-env #指定 阅读全文
posted @ 2025-07-05 08:47 刘宏缔的架构森林 阅读(0) 评论(0) 推荐(0)
摘要:一,说明 nc命令全称是netcat。其主要功能如下:1.测试udp端口的连通性(重点)。 nc -z -v -u 172.16.100.101 88262.测试tcp端口的连通性。 nc -z -v 172.16.100.101 22 参数 : -u Use UDP instead of the 阅读全文
posted @ 2025-07-05 08:45 刘宏缔的架构森林 阅读(362) 评论(0) 推荐(0)
摘要:一,添加、删除转发端口 使防火墙支持ip伪装 # firewall-cmd --zone=public --add-masquerade 使linux内核支持ip的转发 确定ip_forward打开 # sysctl -a | grep ip_forward net.ipv4.ip_forward 阅读全文
posted @ 2025-07-05 08:44 刘宏缔的架构森林 阅读(140) 评论(0) 推荐(0)
摘要:一,命令: 在easyrsa目录下,创建一个名为client2的client # ./easyrsa build-client-full client2 nopass Using Easy-RSA 'vars' configuration: * /opt/easyrsa/pki/vars Notic 阅读全文
posted @ 2025-07-05 08:43 刘宏缔的架构森林 阅读(1) 评论(0) 推荐(0)
摘要:一,生成禁用的客户端列表 1,禁用一个用户 # ./easyrsa revoke client1 Using Easy-RSA 'vars' configuration: * /opt/easyrsa/pki/vars WARNING This process is destructive! The 阅读全文
posted @ 2025-07-05 08:38 刘宏缔的架构森林 阅读(0) 评论(0) 推荐(0)
摘要:一,现象 macos客户端,建立连接后一直不能ping通服务器的地址,即: 10.8.0.1 二,原因/解决: 客户端的opvn配置文件中有:comp-lzo一项,查看服务端openvpn/server/server.conf文件中,配置如下: # For compression compatibl 阅读全文
posted @ 2025-07-05 08:37 刘宏缔的架构森林 阅读(0) 评论(0) 推荐(0)
摘要:一,查看路由表 liuhongdi@liuhongdideMBP ~ % netstat -r -n Routing tables Internet: Destination Gateway Flags Netif Expire default 192.168.31.1 UGScg en0 10.8 阅读全文
posted @ 2025-07-05 08:36 刘宏缔的架构森林 阅读(93) 评论(0) 推荐(0)
摘要:一,配置项的说明 1. 记录 OpenVPN 服务器当前连接状态 (status) 配置示例:status openvpn-status.log 作用: 指示 OpenVPN 服务器定期(默认每 60 秒)将所有当前连接的客户端的详细信息写入到指定文件(例如 openvpn-status.log)。 阅读全文
posted @ 2025-07-05 08:35 刘宏缔的架构森林 阅读(0) 评论(0) 推荐(0)
摘要:一,默认的配置 # 指定ca证书 ca ca.crt # 指定crt cert server.crt # 指定key key server.key # 指定Diffie hellman参数 dh dh2048.pem # 启用tls认证 tls-auth ta.key 0 # This file i 阅读全文
posted @ 2025-07-05 08:35 刘宏缔的架构森林 阅读(0) 评论(0) 推荐(0)
摘要:一,下载安装软件 从上海大学的网站上进行下载 https://vpn.shu.edu.cn/index/OpenVPNsysm/MacOS.htm openvpn官网的客户端地址打不开 一路点下一步,最后会提示安装成功 二,配置软件 client1.ovpn的例子: client dev tun p 阅读全文
posted @ 2025-07-05 08:33 刘宏缔的架构森林 阅读(0) 评论(0) 推荐(0)
摘要:一,安装环境 1,安装easy-rsa yum install easy-rsa 安装openvpn yum install openvpn 二,配置证书 创建证书目录 mkdir /opt/easyrsa 复制文件到目录下 cp -axv /usr/share/easyrsa/3.2.1/* /o 阅读全文
posted @ 2025-07-05 08:30 刘宏缔的架构森林 阅读(1) 评论(0) 推荐(0)