自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 问答 (5)
  • 收藏
  • 关注

原创 C# 异步方法的使用场景

整套流程需要紧密衔接,一个关节执行完成后另外几个关节才可以运动,一个动作要等待多个关节全部完成它自己的动作。原因嘛,很简单:如果采用老办法直接新建线程,那意味着每执行一个关节都要建立一个线程,最终要管理无数个乱七八糟的线程。不如使用异步方法,让C#自己建立新线程自己管理,我们只需要在代码中指示不同关节任务之间的衔接方式即可。我一直认为C#的异步方法只是一堆华而不实的东西,坑特别多,比起直接自建线程也没有任何优势。直到有一天,一个需求场景,让我再次想到了C#的异步方法。

2024-02-16 21:39:47 436

原创 C# 初见异步方法 满满的全是坑

平常遇到的需求,使用普通的多线程都可以完美解决,感觉异步方法只是微软想当然开发出来的,虽然华丽但是毫无用处的垃圾功能。C#设计异步方法的主要目标,就是使用Task自己的线程池,免去建立新线程的开销,以及自己搭建线程池的麻烦。在遇到需要等待执行的Task任务,让线程直接执行异步方法的后续代码,同时从线程池中取出新线程执行任务。于是,我改成了这个样子,然后就出问题了,主线程,也就是winform的ui线程被占用,窗体卡死。其实,正确的方式应该是这样的,交给Task来执行异步方法,而不要直接调用异步方法。

2023-12-01 20:05:41 551

原创 C# Thread.Sleep 与 await Task.Delay 的本质区别,和异步方法中踩到的坑。

将当前执行代码的线程空出来,优先去执行其他任务。在等待时间结束后,交给线程池中的线程接继续执行。不知道在经过await之后,执行线程可能被切换。挂起当前线程一段时间。

2023-11-29 18:37:42 758

原创 C# 静态构造函数未执行 .net core框架

代码如下,在执行Encoding.GetEncoding(“gb2312”);方法后报错,说没有找到对应编码,经测试,发现是静态构造函数未执行。查找了不少相关资料,并未找到任何证据支持上面的观点。不过我尝试了反编译dll,发现dll中还是有构造函数的,应该没有被优化掉。也可能是静态函数的调用方式并非在类加载时调用,而是在实例化。推测是编译器认为静态构造函数无用,被优化掉了。参数时参数才会调用。

2023-08-31 10:34:15 1323

原创 C# 子类强制转换为父类异常,引出的C#Dll加载机制,以及同类名同命名空间同dll程序集在C#中是否为同一个类的研究。

可以推测出,C#判断两个类是否完全相同,除了看命名空间和类名以外,主要是判断两个类是否在同一个程序集实体中(内存中的同一个实体)。若一个dll加载了两遍,获得两个程序集对象,虽然两个程序集中的类完全相同,但是依然无法相互转换。经过排查,发现代码中对该dll加载了两次,获得了两个程序集,而子类和父类分别来自不同的程序集,导致了无法进行类型转换。通过上面的代码可以看出,从子类中获取的父类type,和父类直接获取的type是完全一样的,命名空间,类名称,程序集和对应的dll文件,均相同。下面是报错的代码片段。

2023-08-09 14:47:29 734

原创 百变的 spring boot 框架

springBoot框架自带了很多的功能,包括连接Mysql,mongoDb,Redis等,在仅连接一个资源的时候使用着非常方便。但是也有着各种各样的问题。就比如springBoot自带的RedisTemplate用起来非常的不方便,想使用Jedis对象来操作redis,或者是公司有专门的数据库配置中心,想每次启动时请求配置中心获取对应Redis机器的节点地址,然后再进行连接。面对这些复杂情况,springBoot自带的连接配置功能显然不够用,这时我们就需要自定义连接逻辑。

2023-07-03 16:56:54 240

原创 java 如何优雅的阻塞主线程

一般可以直接使用下面的方法,阻塞主线程,可是这种方法不够的优雅。框架,需要阻塞主线程,防止程序退出,方便一些定时任务的执行。在某些时候,尤其是不带有容器的。

2023-06-06 17:01:09 416

原创 java http连接池的实现(带有失败重试等高级功能)

java 本身提供的java.net.HttpURLConnection不支持连接池功能。如果不想从头实现的话,最好的方式便是引用第三方依赖包,目前是有一个特别不错的,依赖,引入方式如下。

2023-05-30 16:56:40 1450

原创 sun.net.ftp.FtpClient 匿名登录时提示密码不可为空。

匿名登录时需要使用用户名:administrator,密码:[email protected]

2023-02-08 17:31:12 278 1

原创 kafka与zookeeper常用命令和知识点

2.12代表实行该kafka的Scala语言版本,后面的2.0.0代表Kafka服务版本。注意,当使用java连接时,使用的jar包一定要版本一致。kafka集群分为两类机器,一类为kafka(集群),存储队列数据,一类为zk(集群),存储集群信息。生产者一般接连接kafka服务即可(有时也叫Broker 经纪人),单向联系,无需在zk中注册。配置项为kafka连接的zk服务器(后面可以添加路径以指定集群信息存储到某一路径下)。消费者一般接连接zk服务,注册成为消费者(具体看使用的连接依赖包)。

2023-01-18 15:30:56 983

原创 当http响应内容较长时 在Filter过滤器中设置响应头部失效的问题

根据猜测和以往的经验得出结论:在http进入filter时,就已经将所有要响应的数据放入到http响应流中了,在http协议发现响应数据超过上线时,便会先发送部分内容以清空响应流缓存,然后再接受剩余的要写入响应流的数据,同时触发http分块传输,所以在线程从web层返回到filter时,就无法再设置响应头了,因为响应头已经跟着分块传输的数据到客户端了。不要在filter中设置响应头,而要在web层中,直接获取响应对象,在写入响应数据前,便将响应头部设置好。进去是这个样子,如下所示,

2022-11-03 21:06:19 363

转载 wpf 设置控件层次问题 最顶层 最底层

网上查到的解决方法竟然只有一个,被无数的网站疯狂拷贝。方法异常麻烦,需要遍历整个控件树。无奈,自己用英文搜索看看,也不需要用谷歌,必应国际版用英文搜索就可以了。没看到几个就找到了一个靠谱的解决方案,也希望大家遇到问题的时候可以把英文互联网的答案搬运过来。(10年人家都有答案了,22年中文互联网还没有答案,唉)按钮控件无法点击,猜测是控件次序问题,被旁边的一个统计图控件覆盖了。如图,被统计图控件覆盖的单选按键。wpf是根据控件次序调增层级的,写在后面的控件会排在上层。调整后按钮即可点击。

2022-10-08 19:53:21 4142

原创 快速了解 MongoDB 以及java连接MongoDB数据库

文档要求必须是json格式的文本内容,一个文档中只能有一个json,所以文档算是数据库的最小的一个数据单元,可以算做是一条数据。同样,因其基于json文档的存储特性,而并非表格,所以mongo数据库也被归类于非关系型数据库。mongo数据库有着类似缓存数据库的特点,不需提前去专门去建立数据库和集合,当你把集合写入一个数据库时,若数据库不存在,会自动建立。由于mongo数据库是非关系类型的,意味着其查询会非常依赖索引,若查询条件的json字段未添加索引,mongo会把该集合的所有文档加载进内存进行遍历。...

2022-08-11 19:35:13 1162

原创 java 保留原始顺序的有序map的新思路:List<Map.Entry<?,?>>

在java中,是有一个自带的有序 map,是 TreeMap,但是这个是根据 key 值自动排序的,无法保留原始顺序,也无法根据 value 值排序。仔细思考了一下,其实绝大多数情况,我们并不是需要一个可以随时根据 key 查 value 的有序 map,而是根据一个能同时保存 key,value 的 list。所以就设计了下面这种类型来顶替有序 map。生成代码如下...

2022-06-22 20:19:09 698

原创 跳转链接列表

Caffeine缓存相关功能以及使用方式:maven项目打包方案:jar包解压命令:java park的使用方法:java优化常用工具:

2022-06-22 09:28:06 272

原创 java HttpURLConnection类的disconnect方法与http长连接

java 自带的类有个关闭连接的方法,是用于关闭http连接的,但是有一个问题在于,http连接一直都是一次性的,不存在复用的可能性,所以当输入流和输出流关闭后,http请求过程也就结束了,为什么还需要这个方法?java代码对该方法的说明如下:并没有提到关闭请求释放资源的说明,而是说调用该方法意味着一段时间之内不会再向目标机器发起请求,并且又强调了一遍类是不可复用的。看到这段描述,我就想到了该方法应该是和长连接有关的。http长连接在http1.1版本以及之后的相关版本中,默认是,意思即是在http请

2022-06-07 09:04:54 3658

原创 mac 添加环境变量

环境变量位置:/etc/profile/etc/bashrc/etc/paths~/.bash_profile前三个是全局的,后面一个是个人的。网上还有很多其他的配置文件,但是不一定对所有用户都起作用。这里前两个是不推荐的,因为里面还有其他的shell语句。第三个是我比较推荐的,因为添加path变量的时候,可以一行一个,非常的方便:...

2022-04-25 19:26:30 549

原创 java 执行shell命令(分批 多条 走一步看一步的执行)

说明网上有很多通过java执行命令的程序,但是只能执行一条命令,或者是所有命令一次性执行完毕。而我想要的是执行一条命令,看一看返回结果,然后在去执行下一条命令,可惜翻遍全网,竟然一个可行的方法都没有!!!没办法,自己想办法解决吧。实现代码废话不多说,直接上代码:入口类import core.CmdClient;public class Main{ public static void main(String[] args) { CmdClient clie

2022-04-09 16:56:12 1968

转载 maven插件解析失败: Could not transfer artifact XXX,transfer failed for XXX

报错信息很简单,只说转移失败,也不说原因。Could not transfer artifact XXX,transfer failed for XXX最后在maven参数中加入这个,解决证书问题就行了。-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true解决方案来自:https://www.cnblogs.com/yangyongjie/p/15568665.html...

2022-03-14 14:51:41 6188

原创 MacBook pro 连接Wi-Fi时候一直显示需要wpa2密码

公司换了新的mac后,链接家里网络一直链接不上,现实需要wpa2密码,但是问题是我的密码是对的。解决方案:更换家里的Wi-Fi。你没有看错,就是更换Wi-Fi。我的光猫同时广播两个频段的Wi-Fi,一个是5G,一个是2.4G,密码一样,但是5G的就是连接不上,只能连接更垃圾的Wi-Fi。真不知道是手里的mac是个残次品还是因为苹果本身设计就有缺陷。...

2022-03-02 21:34:50 10073 4

原创 项目引入log4j2 最简单最快的方法

该方案仅适用于java的maven项目。1. 添加依赖添加如下依赖,一个就够了,其他的没有必要。根本不需要向网上传的那样加一堆的依赖。<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.17.1</version></de

2022-02-15 15:49:45 2850 1

原创 grep 查找内容有特殊字符怎么办

1. grep 命令grep 命令通常用于过滤或查找文本。1.1 查找内容有特殊字符怎么办我搜索了一下,大部分的方法都是在特殊字符前面加上\,但是这个需要提前知道哪些是特殊字符,而且还非常麻烦。最夸张的是一搜几乎都是这种蠢方法。正确方法应该是加上-F,这样所有特殊字符就会被当作一般字符了。例子:grep -F "[aabbcc]" test.txt...

2022-02-10 09:26:21 8450 1

原创 HttpURLConnection 发送请求 以及 接受数据丢失,响应头部Content-Length不存在的问题处理。

java中有很多可以用户发送http请求的工具,而我个人喜欢用更底层一点的,所以就选择了这个java自带的http请求工具。底层的优点就是可以自定义发送的编码,头部等,很随意。第一代 HttpURLConnection 请求代码下面是我自己写的发送请求的代码,专门用于发送json格式的请求:private void httpPost(String body, String httpUrl) { try { URL url = new URL(httpUrl); // utl

2021-12-31 14:07:40 4685

原创 HttpURLConnection发送的请求中文乱码。windows的乱码日常

windows的乱码日常不得不说,windwos是真的容易乱码。今天调试项目,一个服务用HttpURLConnection发送http请求(请求头部中不会告知字符编码)到另外一个项目,另外一个项目拿到byte数组后转换成JSON对象。但是我发现转换成的json对象为null,就很奇怪。其他人包括服务器上都没有发生这种情况。经过一阵研究,发现这个byte数组是GBK编码,不是UTF-8,另一边是按照UTF-8解码的,导致中文乱码,以至于无法被识别为JSON对象。"GBK"是Windows的默认中文编码

2021-10-27 21:32:30 1403

原创 windows 如何查看文件夹所使用的图标

如图,我们看到了一些文件夹,但是我们在文件夹的属性中看不到其引用了哪里的图标。其实在文件夹中有一个文档记录了所引用的图标,显示隐藏文件后即可看到,图片如下:然后用记事本打开,就可以看到如下信息。[.ShellClassInfo]LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21779InfoTip=@%SystemRoot%\system32\shell32.dll,-12688IconResource=%SystemRo

2021-10-03 21:31:20 3482

原创 MySQL 查询性能总结

数据总量的多少对于单表查询来说影响不大(在查询条件有索引的情况下),真正影响单表查询的主要因素在与查询获得的数据量(列数)和需要计算的数据量。在联合查询中,数据总量对于查询速度的影响要比单表查询大很多。查询条件中影响查询速度的不只是索引,还与查询条件中的数量有关。例如某一列类型为字符串,但只有"0","1"两种可能,以该列为查询条件,即便没有索引,其查询速度也是非常快的。(在查询结果相同的情况下,该列查询速度比带有索引的id列还要快不少)...

2021-09-22 10:25:36 169

原创 java的锁 学习笔记

依靠内存溢出来分析变量在不同地方所占中的空间位置以及其溢出的异常报告。这里jdk=1.8版本。堆内存溢出Exception in thread “main” java.lang.OutOfMemoryError: Java heap spacepublic class Main{ String str = "a"; public static void main(String[] args) { Main main = new Main();

2021-08-30 15:05:20 93

原创 JAVA并发编程学习笔记

线程安全:多个线程访问或执行类中的某个操作,不需要去协调同步,也能完成期望的功能,那么这个类就是线程安全的。多线程不仅有创建线程的开销,还有线程间来回切换的开销

2021-08-30 10:47:53 98

原创 基于springframework或spring boot框架的测试方式

一个大功能需要写很久才能完成,目前功能只完成了一部分,如何快速测试这个功能类?不需要启动服务器,也不需要专门写个请求去调用这个功能类,只需要写一个测试就可以直接调用自己的功能类来查看功能是否正确运行。首先先展示一下我的项目结构:srcmainjavaresourceswebappstestjava然后在 src/test/java 目录下新建一个测试类,代码如下package com.test;import com.admin.mapper.PictureBas

2021-08-12 20:41:30 357

原创 代码整洁之道-7 其他部分

这只是推荐规则,要根据实际情况去选择。使用第三方代码建议为第三方代码添加测试单元。在初次使用第三方代码时,建议专门弄一个项目去学习和使用,而不是直接将其放入到主项目中。单元测试目前用不到单元测试,看不懂,跳过。...

2021-08-05 15:44:03 61

原创 代码整洁之道-6 整洁的类

这只是推荐规则,要根据实际情况去选择。全责单一,要让类尽可能的小。拥有内聚性,就是指类中的方法和变量之间的密切程度,以及互相之间交换的参数数量。高内聚性更容易让类满足第一条规则。当一个类失去了内聚性,就拆分它。优化和简洁一个特别大的类的方法:将较大的函数拆成较小的函数,同时将这些小函数之间传递的大量参数升级为类的内部变量。这就会导致类中积累大量的只允许少数函数所使用的内部变量,从而会降低类的内聚性,让它变的更容易拆分。一般这样的修改会导致代码总量增加。...

2021-08-05 15:37:58 67

原创 代码整洁之道-5 异常处理

这只是推荐规则,要根据实际情况去选择。不要返回错误信息,而要学会抛异常。将原本的异常打包进自己的异常中,然后附上相应的操作信息。只有这样才能将异常与正常逻辑分开,才能让代码变得更加简洁。如果异常也算是正常逻辑中的一部分,那就尽量不要抛异常,用判断以及返回值来替代直接抛出异常的行为。不要返回和传递null值。一旦有一个空异常(NullPointerException)从程序深处抛出,那么查找错误将会是极其困难的,所以尽量用空集合来代替null值,或者用其他异常来代替空异常。要学会自定义异常类,它的一

2021-08-05 14:41:38 140

原创 面向过程与面向对象的区别 (一眼就能看懂的那种)

虽然说C是面向过程的语言,C++,java,C#是面向对象的语言,但是真正是面向过程还是面向对象,并不是根据使用什么语言,而是根据怎么写代码。说再多也没用,直接上代码,一看就懂的那种:(这里使用java语言作为例子)面向过程的代码:优点:若需要添加新方法,例如计算周长的方法,不需要改变原有代码,只需要新添代码。缺点:若需要添加新的图形结构,在添加新代码的同时,还需要修改原有的代码,例如Geometry类中的所有函数。// 正方形public class Square{ publi

2021-08-05 12:22:40 78

原创 代码整洁之道-4 如何把握格式

这只是推荐规则,要根据实际情况去选择。建议在方法间留一行空行。拉近关系密切的代码之间的距离。不要让别人读代码的时候需要来回跳,导致他们不得不记住每段代码的位置。

2021-08-05 11:35:11 62

原创 代码整洁之道-3 如何写注释

这只是推荐规则,要根据实际情况去抉择。代码可以被持续不断的维护,但是注释很难做到这一点。随着时间的推移,注释的意思会出现偏差和错误,所以不推荐写太多的注释。别给糟糕的代码加注释了,重写吧(如果可以的话)。可以用注释写一些警告,防止不了解代码的新手做一些很容易出现的错误做法。在函数头部用标准格式做注释是比较好的做法,容易维护(例如javadoc)。要想写好注释,需要有好的阅读理解能力和语言功底,去掉无用的废话,尽量简洁语句。用代码替换掉注释,例如://用于判断是不是一个好苹果if (app

2021-08-04 18:06:04 72

原创 代码整洁之道-2 如何写函数

函数一定要特别的短小,不能特别长。作者说他无法证明这一点,但其非常重要。我认为这个并不重要。函数要描述同一个抽象层级下的过程,尽量不要跨越层级。例如:买电脑(){ 选择电脑(); 攒钱(); 确认选择(); 购买();}而不要写成这样:买电脑(){ for (便利淘宝) { if(电脑超过7000元) ... } for (便利京东) ... 选择电脑(); 计算需要多少钱(); ...}函数的参数尽量少一些。...

2021-08-02 18:18:59 119

原创 代码整洁之道-1 如何命名

在学校的时候,老师们都说要学会为代码加注释,这是一个良好的习惯,注释越多越好。但是实际并不是这样,对于代码来说,并不是注释越多越好。当你的代码不得不需要特别多的注释才能让别人看懂,只能说明你的代码不够整洁,不得不用长篇大论来解释自己的代码。命名很重要,要多花时间去想。如果想道了更合适的,就多花些时间把原来的替换掉。(不要影响他人使用)需要添加注释来说明的命名就是不够完美的命名:尽量让自己的命名不加注释也能让别人看懂。不要让名称太过相似:如果你的项目中同时存在product,productI

2021-08-02 16:47:40 100

原创 SQLite3 学习笔记 以及C#连接SQLite3

数据库结构在sqlite中,一个文件是一个数据库,一个数据库中可以包含多个表,其中sqlite_master表是数据库的核心表,用于记录其余所有表的基本相关信息。可以使用.table命令查看数据库中的所有表。查看表结构的方法有两种:查询sqlite_master表。使用pragma table_info( );语句,在括号中添上需要查看的表名称数据类型虽然sqlite也有数据类型,但是与我们熟悉的mysql和sqlserver完全不同。SQLite 使用一个更普遍的动态类型系统。在 SQ

2021-08-01 17:22:29 3782 3

原创 Struts2 jsp 后台接收Set类型的数据

一般需要接收类型的数据都是因为页面上没有办法提供list数据所需要的索引值,例如在一堆多选框中,选中项才会传递数据,这种情况下就没有办法使用list数据类型了。在网上搜索了很多办法,都不管用,还需要在请求的formData中添加makeNew[0],根本就不管用。最后我研究了半天,不管加什么索引都不管用,最后发现,传递set参数并不需要像list加方括号 [ ] ,直接当成不同参数传递就行吗,后台会自动将发送的formData中name相同的参数放到name对应的set集合中。总结:传递set参数不需

2021-07-29 17:15:14 152

原创 struts2 接收不到页面发送的数据(页面发送数据格式正确的情况下)

我这里是在页面发送数据格式正确的情况下发生的。错误原因在于我只设置了set,struts2要想成功的接收数据,get和set都是需求的,光写一个set是不行的。

2021-07-29 16:28:47 158

空空如也

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

TA关注的人

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