自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wozaizhe55

一个入门程序员的自我救赎

  • 博客(51)
  • 收藏
  • 关注

原创 命令行计算文件MD5

工作中经常涉及文件版本核对,因为校验文件名也不能通过文件名进行区分。应用新文件后不确定当前文件是不是新的,强迫症总是会打开文件再比对一下。校验用起来非常方便,但是windows下这个命令有点不太一样,每次都需要搜索,这里记录一下。

2023-03-27 20:47:34 945

原创 K8s CRD资源一直Terminating删除不掉

Operator 扩展了 k8s 的statefulset 机制,可以实现有状态应用的拓扑结构管理。采用Operator 需要自定义资源类型(CRD)开发调试过程中难免编码错误,导致CR(CRD的实例)一直处于Terminating状态删除不了,也更新不了非常尴尬。将CR 的 metaddata下finalizers值为空即可。参考资料中还介绍了别的方法,大家可以自行尝试。保存即可,稍后即释放成功。

2023-02-11 15:57:49 654

原创 Golang远程调试Debug环境

最近在做 Operator 的二次开发,开发语言是Golang。Operator 开发时候需要用到k8s集群,遗憾的是k8s编排的容器网络与本地网络不通,无法直接进行debug。k8s 调整网络的方式比较麻烦,曲线救国在 k8s node 上安装Golang环境,本地进行远程debug。**注意:**Goland 中的代码要跟远程debug的代码一致,否则调试结果不准确,通过git进行代码同步是个不错的选择。从Templates 中创建一个 Go Remote 启动即可。

2022-11-28 22:53:33 1331

原创 linux有端口找不到进程解决办法

测试环境发现redis 哨兵集群一台从节点宕掉了,启动时候却报端口占用,一直启动失败,在此将处理过程记录一下供日后翻阅。此时现象就比较明显了,进程死掉了,端口却没释放,掉,重新启动redis 6379 应用正常。我们换用另一种方式。

2022-11-03 20:45:00 3372

转载 Docker - 实现本地镜像的导出、导入(export、import、save、load)

有时我们需要将一台电脑上的镜像复制到另一台电脑上使用,除了可以借助仓库外,还可以直接将镜像保存成一个文件,再拷贝到另一台电脑上导入使用。对于镜像的导出和导入,Docker 提供了两种方案,下面分别进行介绍。

2022-11-01 22:53:19 7899 1

原创 No configuration has been provided, try setting KUBERNETES_MASTER environment variable

最近需要二次开发Operator,需要搭建k8s集群。本机单节点搭建使用很方便,换到内网远程连接k8s集群开发的过程碰到了这个问题。这个文件ide调试时候直接就可以访问到。连接远程节点时候,这个文件也需要让ide访问到才可以。这个问题的出现是开发环境没能获取到集群的配置,采用单节点本机开发时。加入到环境变量时报了一个奇怪的错误。这种的目录则识别不了。

2022-10-19 22:01:48 2596

转载 [Golang] 解决 Goland配置GOROOT The selected directory is not a valid home for Go SDK

[Golang] 解决 Goland配置GOROOT The selected directory is not a valid home for Go SDK

2022-10-13 22:34:11 844

原创 Springboot @Schedule 多个定时任务积压解决

背景应用中我们通常采用定时任务不断监听配置文件或者采集一些应用状态信息等等,这些任务通常间隔比较短,频次比较高。随着定时任务增多,定时任务偶尔出现了积压问题,即:定时任务总是顺序执行的,无法并行执行,此时当某个定时任务卡住时,会影响其他定时任务的执行,这样的结果不是我们想看到的。现象创建了两个定时任务TestSchedule1 每 3 秒执行一次TestSchedule2 每 2 秒执行一次 @Scheduled(cron = "0/3 * * * * ?") public

2022-03-26 22:39:59 2350

原创 Java解决跨域(后端转发方式)

背景跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。详细理论可以参考前端常见跨域解决方案这篇文章。后端转发解决跨域开发过程中经常能碰到这种场景,前端页面访问的是外部资源(跟前端应用部署的不是一台机器或者不是一个IP),此时常见的做法是通过 nginx 进行代理转发解决跨域。代理转发要求被代理服务的域名(IP)固定,且具有统一前缀(最好),否则不但配置繁琐,还可能请求失败。如果某个后端服务的请求路径不固定,则可

2022-03-06 15:15:06 2269

转载 关于 eclipse启动卡死的问题处理

关于 eclipse启动卡死的问题,是由于eclipse上一次没有正确关闭,导致启动的时候卡死,解决方法:方案一(推荐使用,如果没有这个文件,就使用方案二):到.metadata.plugins\org.eclipse.core.resources目录,删除文件 .snap方案二:进入workspace/.metadata/.plugins/目录重命名 org.eclipse.core.resources to org.eclipse.core.resources_old.然后重启 eclips

2021-03-29 21:00:34 1538

转载 Eclipse 导出插件包

文章目录背景第一种:直接导出jar包,然后copy到eclipse主目录的plugins第二种:生成eclipse可以用install方式安装的包第三种:生成eclipse可以用install方式安装的zip包背景当我们的插件在完成一个阶段性开发的时候,我们要发布一个1.0的版本。这个时候会碰到一个问题。如何把我们的插件打成包?有多种途径,下面具体讨论一下。首先从插件完成到被他人(或者我们自己)使用有两个步骤,导出 –> 包 –> 安装。不同的导出方式对应着不同安装方法。谷歌,百度一堆苦

2021-03-03 19:43:36 1628 1

原创 Oracle 本地索引和全局索引

文章目录背景全局索引本地索引索引的选择全局索引修改为本地索引参考背景上一篇Oracle 分区表 讲述了 Oracle 分区表建立的几种方式。那么分区表创建好了之后,其索引该如何选择呢?Oracle 分区表的索引可以分为本地索引和全局索引两种,什么时候改采用哪种索引呢?全局索引全局索引即可以分区,也可以不分区。即可以建range分区,也可以建hash分区,即可建于分区表,又可创建于非分区表上,就是说,全局索引是完全独立的,因此它也需要我们更多的维护操作。其结构如下图:本地索引本地索引其分区形式与

2021-02-21 22:13:43 3065

原创 Oracle 分区表

文章目录背景分区的优势分区的方式背景我们知道在数据库中,当一张表的数据量增多时,数据的查询就会变慢,从而影响应用程序的性能。这时我们应该考虑将表分区,表分区后在逻辑上仍然属于一张表,只是在物理上存储在多个文件中。分区的优势改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度;方便数据管理:因为分区表的数据存储在多个部分中,所以按分区加载和删除数据比在大表中加载和删除数据更容易;方便备份恢复:因为分区比被分区的表要小,所以针对分区的备份和恢复方法要比备份和恢复整个表的方法多;均

2021-02-07 20:47:44 180

原创 Linux创建swap分区(文件方式)

文章目录背景划分swap分区的两种方式步骤swap优先级参考背景对于服务器来说内存比较昂贵,需求不是特别强的时候经常采用swap(Windows 下叫虚拟内存)来节省一部分内存,现在SSD做swap的话速度比之前机械硬盘也有很高提升。自己经常需要这个操作,总是忘记命令,特此记录一下便于后续查找。划分swap分区的两种方式通过创建分区来创建通过文件方式创建第1种方式要求比较高些,同时操作起来也比较复杂些,本文主要写一下第2种方式,比较简单适合我这样的选手????步骤创建要作为swap分

2021-01-31 17:22:50 478

原创 包含中文的字符串定长分割方案

文章目录背景背景我们知道在数据库中字符串类型有char,varchar,

2021-01-24 22:50:02 363

原创 最大子数组问题

文章目录背景转换为最大子数组背景leetcode 上有道题 121. Best Time to Buy and Sell Stock这道题在已知股票价格的时候求解买卖一次能够获得的最大利润,题目不难,附上解法:class Solution { public int maxProfit(int[] prices) { if(prices.length < 2) return 0; int max_num = prices[pric

2021-01-17 17:44:03 146

原创 深入理解Nginx:(4) 解析 HTTP 配置的流程

文章目录解析 HTTP 配置的流程参考解析 HTTP 配置的流程上图是 HTTP 框架解析配置项的示意流程图(图中包含 HTTP 框架的两个主要模块:ngx_http_module 和 ngx_http_core_module 模块)具体解析流程如下:上图中的主循环是指 Nginx 进程的主循环,主循环只有调用配置文件解析器才能解析 nginx.conf 文件(这里的 “主循环” 是解析全部配置文件的循环代码);当发现配置文件中包含 http{} 关键字时,HTTP 框架开始启动;HTTP 框

2021-01-10 21:36:05 212 1

原创 Python 中文编码问题 ascii‘ codec can‘t encode characters in position

文章目录问题背景ascii' codec can't encode characters in position问题背景解决方案问题分析utf8 codec can't decode byte 问题解决方案问题分析参考问题背景最近项目需要进行接口压力测试,需要监控服务器资源。本着程序员的懒人思维想到了自动化测试、自动监测全链路服务器资源。python 作为脚本语言,在跟shell 交互方面有着得天独厚的优势,于是乎采用 python 在 jmeter 执行测试之前通过 socket 通信告知全链路服务器

2021-01-01 22:22:43 1463

原创 深入理解Nginx:(4) HTTP 配置模型

文章目录当 Nginx 检测到 http{…} 这个关键配置项时, HTTP 配置模型就启动了,这时会首先建立一个 ngx_http_conf_ctx_t 结构。以下是 ngx_http_conf_ctx_t 的定义typedef struce{ /*指针数组,数组中的每个元素指向所有 HTTP 模块 create_main_conf 方法所产生的结构体*/ void **main_conf /*指针数组,数组中的每个元素指向所有 HTTP 模块 create_srv_conf 方法所产生的结构体

2020-12-27 22:03:20 123

原创 深入理解Nginx:(3) Nginx 调用 HTTP 模块的过程

文章目录

2020-12-21 00:35:18 282

原创 深入理解Nginx:(2)Nginx负载均衡的基本配置

文章目录参考作为代理服务器一般需要向上游服务器的集群转发请求,Nginx 也是一样。负载均衡指的是选择一种策略尽可能将请求平均地转发到每一台上游服务器。负载均衡的配置项分为 upstream 块和 server 块两部分。upstream 块语法:upstream name {…}配置块:httpupstream 块定义了一个上游服务器的集群,便于反向代理中的 proxy_pass 使用。例如:upstream backend { server 10.102.23.22; serve

2020-12-13 22:14:48 100

原创 深入理解Nginx:(2)Nginx的配置之二

文章目录Nginx 服务的基本配置用于调试进程和定位问题的配置项参考Nginx 服务的基本配置Nginx 在运行时,至少必须加载几个核心模块和一个事件类模块。这些模块运行时所支持的配置项称为基本配置–所有其他模块执行时都依赖的配置项。由于配置项较多,按照用户使用时的预期功能可以将它们划分为以下 4 类:用于调试、定位问题的配置项正常运行的必备配置项优化性能的配置项事件类配置项(有些事件类配置项归纳到了优化性能类,这是因为虽然它们也是 events{}块,但作用是优化性能)还有一些配置项,

2020-12-06 17:38:02 111

原创 深入理解Nginx:(2)Nginx的配置之一

文章目录运行中的 Nginx 进程间的关系Nginx 的通用语法参考Nginx 拥有大量的官方和第三方模块,这些已有的模块可以帮助我们实现服务器上的很多功能,使用这些模块时,仅仅需要增加、修改一些配置项即可。因此,我们需要了解 Nginx 的运行方式和语法规则。运行中的 Nginx 进程间的关系一般情况下 Nginx 都是使用一个 master 进程来管理多个 worker 进程,而 worker 进程的数量通常与服务器上的 CPU 核心数相等。每一个 worker 进程都是繁忙的,它们在真正地提供互

2020-11-29 23:20:13 159

原创 深入理解Nginx:(1)初探Nginx 之一

文章目录Nginx 是什么为什么选择Nginx参考Nginx 是什么为什么选择Nginx参考《深入理解Nginx》

2020-11-22 23:35:45 122

原创 Oracle 重置密码及基本操作

文章目录背景重置登录密码Oracle 基本概念创建表空间创建用户授权参考背景自己平时做项目一直用的 MySQL, 非常简单方便。公司开发用的是 Oracle,虽然有开发专用的 Oracle 数据库,公共库不够方便,因此打算在本机装一个 Oracle ,这里选择的是11g。Oracle 的安装教程就不赘述了,互联上有很多这类资料,简单介绍一下忘记密码的解决办法,以及最基本的使用方法。重置登录密码前段时间安装了 Oracle,但是最近密码给忘了,非常尴尬。查找相关资料,也找到一些解决办法,这里将最简单

2020-11-15 21:53:08 3333

原创 Java并发编程的艺术:(11) 并发编程实战

文章目录生产者和消费者模式多生产者和多消费者场景线程池与生产消费者模式线上问题定位性能测试异步任务池生产者和消费者模式在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序整体处理数据的速度。生产者和消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通信,而是通过阻塞队列来进行通信,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一

2020-11-08 20:01:50 248

原创 Java并发编程的艺术:(10) Executor 框架(二)

文章目录

2020-11-02 00:28:27 82

原创 Java并发编程的艺术:(10) Executor 框架(一)

文章目录Executor 框架简介ThreadPoolExecutor 简介任务任务的执行异步计算的结果参考Executor 框架简介Executor 框架是Java5之后引进的,在Java 5之后,通过 Executor 来启动线程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免 this 逃逸问题。this逃逸是指在构造函数返回之前其他线程就持有该对象的引用. 调用尚未构造完全的对象的方法可能引发令人疑惑的错误。T

2020-10-25 23:54:03 87

原创 Java并发编程的艺术:(9) Java 中的线程池

文章目录线程池的实现原理线程池的使用线程池的创建向线程池提交任务关闭线程池Java 中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理使用线程池能够带来 3 个好处。降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但是,

2020-10-12 22:22:59 106 1

原创 Java并发编程的艺术:(8) Java 中的并发工具类

文章目录等待多线程完成的 CountDownLatch同步屏障 CyclicBarrierCyclicBarrier 简介CyclicBarrier 的应用场景CyclicBarrier 和 CountDownLatch 的区别控制并发线程数的 Semaphore线程间交换数据的 Exchanger参考等待多线程完成的 CountDownLatchCountDownLatch 允许一个或多个线程等待其他线程完成操作。比如这样一个需求:我们需要解析一个 Excel 里多个 sheet 的数据,此时可以考

2020-10-11 16:12:55 83

原创 Java并发编程的艺术:(7) Java 中的 13 个原子操作类

文章目录原子更新基本类型类原子更新数组原子更新引用类型原子更新字段类原子更新基本类型类原子更新数组原子更新引用类型原子更新字段类

2020-09-27 21:21:20 132

原创 Java并发编程的艺术:(6)Java 并发容器和框架之 Fork/Join 框架

文章目录什么是 Fork/Join 框架工作窃取算法Fork/Join 框架的设计使用 Fork/Join 框架Fork/Join 框架的异常处理Fork/Join 框架的实现原理参考什么是 Fork/Join 框架工作窃取算法Fork/Join 框架的设计使用 Fork/Join 框架Fork/Join 框架的异常处理Fork/Join 框架的实现原理参考《Java 并发编程的艺术》...

2020-09-20 22:52:50 89

原创 Java并发编程的艺术:(6)Java 并发容器和框架之 Java 中的阻塞队列

文章目录什么是阻塞队列Java 里的阻塞队列阻塞队列的实现原理参考什么是阻塞队列阻塞队列是一个支持两个附加操作的的队列。这两个附加的操作支持阻塞的插入和移除方法。支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满;支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用语生产者和消费者的场景,生产者时向队列添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就是生产者用来存放元素、消费者用来获取元素的容器。在阻塞队列不可用时,这两个附

2020-09-13 18:09:49 86

原创 Java并发编程的艺术:(6)Java 并发容器和框架之 ConcurrentLinkedQueue

文章目录ConcurrentLinkedQueue 的结构入队列出队列参考在并发编程中,有时候需要使用线程安全的队列。如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队使用不同的锁)等方式来实现。非阻塞的实现方式则可以使用循环 CAS 的方式来实现。ConcurrentLinkedQueue 是一个机遇链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,他会添

2020-09-06 23:10:03 98

原创 Java并发编程的艺术:(6)Java 并发容器和框架之 ConcurrentHashMap

文章目录ConcurrentHashMap 的实现原理与使用为什么要使用 ConcurrentHashMap线程不安全的 HashMap效率低下的 HashTableConcurrentHashMap 的锁分段技术可有效提升并发访问率ConcurrentHashMap 的结构ConcurrentHashMap 的操作get 操作put 操作size 操作参考Java 语言内置了非常多的并发容器和框架,相比其他语言进行并发编程时非常方便。ConcurrentHashMap 的实现原理与使用Concurr

2020-08-29 23:40:44 115

原创 Java并发编程的艺术:(5)Java中的锁(二)

文章目录读写锁LockSupport 工具Condition 接口读写锁LockSupport 工具Condition 接口

2020-08-23 23:15:09 114

原创 Java并发编程的艺术:(5)Java中的锁(一)

文章目录Lock 接口队列同步器重入锁Lock 接口队列同步器重入锁

2020-08-16 23:35:54 120

原创 Java并发编程的艺术:(4)Java 并发编程基础

文章目录线程简介上下文切换如何减少上下文切换启动和终止线程线程间通信线程应用实例参考线程简介上下文切换CPU 通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。如何减少上下文切换减少上下文切换的方法有无锁并发编程、CAS 算法、使用最少线程和使用协程。无锁并发编程。多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,启动和终

2020-08-09 22:30:46 129

原创 Java并发编程的艺术:(3)Java 内存模型三

文章目录happens-before双重检查锁定于延迟初始化Java 内存模型综述happens-before双重检查锁定于延迟初始化Java 内存模型综述

2020-08-02 22:18:05 101

原创 Java并发编程的艺术:(3)Java 内存模型二

快速索引volatile 的内存语义锁的内存语义final 域的内存语义volatile 的内存语义锁的内存语义final 域的内存语义

2020-07-26 22:14:40 104

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除