自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 预训练模型加条件随机场抽取地址信息

【代码】预训练模型加条件随机场抽取地址信息。

2022-08-29 22:25:32 177 1

原创 oracle编码及char类型

因为公司测试环境与生产环境中的oracle字符串并非用同一字符集,就造成了很多问题,特别是varchar类型的数据,在插入时,经常出现越界问题。比如某段为varchar(2),定义的长度为2,在GB2312编码下,可以存储一下汉字。而换成了UTF-8编码,则越界了。同时,我对varchar以及nvarchar不怎么了解,于是我查阅了一下oracle的官网。官方文档中(Character Data Types)说明varchar2类型长度是以字节为单位的。GB2312编码长度为2,而UTF-8为可变长字符集,

2022-06-18 14:42:27 486

原创 superset 添加oracle支持

利用docker运行superset的开发环境。并安装oracle依赖解决中文查询乱码问题在docker/.env 文件中添加。NLS_LANG=AMERICAN_CHINA.AL32UTF8

2022-06-11 21:11:42 475

原创 k8s - containerd 磁盘清理

近期,阿里云上的k8s集群磁盘报警。清除了日志后,没有明显的效果,利用ncdu发现/var/lib/container底下有很多文件,应该是cicd自动部署时,产生的历史Images过多,执行 crictl images,确实发现多余images 。于是我写以下脚本清除imagescrictl images | awk 'NR>1 {print $3}'| xargs crictl rmi清除日志时一定注意,直接删除一个正在运行程序的日志,虽然删除了文件的引用,但文件仍然占用磁盘空间

2022-02-25 18:42:15 4309

原创 promethus搜集minio指标

环境:minio :三台机器,组成minio集群。promethus运行于k8s,由helm安装配置文件apiVersion: v1kind: Namespacemetadata: labels: kubernetes.io/metadata.name: minio-monitor name: minio-monitorspec: finalizers: - kubernetes---kind: ServiceapiVersion: v1metadata

2021-08-21 18:17:02 210

原创 javaBean转json

grep "private" zc.txt | awk '{print $3}' | sed 's/;/":""/g' | sed 's/^/"/g' | sed 's/$/\,/g'对方给我的接口描述都是这鬼样子,TabScanCome { /** * 运单编号(主单/子单/回单/袋号等) */ @TableField("BILL_CODE") private String billCode; /** * 清单编号 */

2021-03-12 11:31:46 338

原创 关于抢购的狂想二

我以前讨论过抢购的库存问题,我听到很多人的实现方式是得用redis加上lua实现计数操作。据说redis每秒两万次的操作不成问题。但问题是数据传输也需要时间。我以为能在本地解决就决不通过数据库解决。以下我的一个解决方案,在我看来没有百分百完美的方案,有好就有坏。1.库存表中(或商品表中)设如下字段:剩余数量,锁定数量2.用户下单时,向业务实例申请锁定资源3.业务检查本地实例资源是否够用,如果不够,向数据库申请若干资源(将锁定数量加上申请数量)4.扣除本地资源以下是伪代码class Stock{

2020-11-12 12:17:21 100

原创 关于抢购的狂想一

在很久以前,就与别人聊过抢购的设计。一般抢购的第一步是控制抢购的开始时间,只有到达指定时间后,抢购业务才能正常进行。有以下方式可以实现:1.通过Redis或数据库,或zk共享变量2.通过计时实现(每次访问对比系统时间)3.通过消息中间件,加本地变量实现我今天坐公交车,突然想,这些不与业务相关的控制可以交给上游网关去做。在未到达抢购时间之前,前端只访问计时服务器,提供业务负载的ngix不进行路由。已到达抢购时间,nginx更改配置,正常负载到业务服务实例。需要在服务端执行一个定时任务,在到

2020-11-10 16:06:22 147

原创 分布式锁

网上也流传着很多分布试锁的实现方式,最近在读Redis in Action。里面也提到了分布式锁,我以前用redis实现锁,也只是实现一个简单的原子操作。并没用过太过复杂的方式,也没有实现阻塞。最近我想再写一个锁,不过当然跟一般的分布式锁不同。我的思路是:如果同一台机器多个线程判断资源有没有没占用,就没必要去redis上去查找了,直接查看本地标识。import java.util.concurrent.ConcurrentHashMap;public class MapLockSupport im

2020-11-07 11:39:31 142

原创 框架搭建自我见

搭建框架不仅是技术选型或编写代码,也是制定一套标准。文章目录前言一、搭建框架概述前言最近和别人聊起技术选型,以及框架搭建,别人经常说,很简单的事情。但我却以为,这其实是一件复杂无比的事。我从没看过有人能把这件事做好,包括我自己在内。我以为搭建框架不仅是技术选型,或编写代码,它也是一套开发规则的制定过程。我打算写几篇文章,从我的工作实践出发,聊聊自己是如何搭建框架的。这可能是一篇很长的文章,我可能会分几篇去写,也可能在此篇的基础上不停地添加新内容PS:我写博客的目的,一是为练练手,二是为了理.

2020-11-02 19:29:08 149

原创 创建项目的shell脚本

echo "请输入描述"read descriptioncontent_path=appjava_path=${content_path}/src/main/java/java_resouce_path=${content_path}/src/main/resourcesapplicationPath=${java_path}com/shangqiao56/tms/$subpackage/main_package=com.shangqiao56.tms.${subpackage}r

2020-10-30 20:16:51 145

原创 一次Sql优化过程

数据库环境:Oracle起因:有一张表,业务上要根据时间段,大概一个月的时间段导出Excel。我第一步要解决查询太慢问题(以后说其它方面)背景:当时写Oracle语句虽然很复杂,当业务有这方面的需求,而且已最大限度的被DB优化过了(包括建索引之类的),似乎没有可优化的空间了。程序中为防止OOM,做了五千条一页的查询。地点:从小卖部回家的路上设想:oracle分页是用rownumber进行分页的。我想如果第一页用条件加rowNumber限制查询逻辑会走一页的数据,但如果查询第二页时,查询逻辑应

2020-10-29 20:44:13 129

原创 一次犯蠢

今年我参与公司最重要的一件事莫过于网商银行的对接,因为商户注册后过几分钟,网商银行才会给出结果,我方需要反查网商的审核结果,有些类型的交易也是如此,我给出的方案是利用spring自带的定时任务去处理每笔数据,但用定时处理数据,会造成两个恶果:1.频繁查询数据库2.给多机部署带来不便聪明的我,当时想到很多后继解决方案,比如利JUC中的DelayQueue去削减查询数据库的次数。以及在多机部署时,利用对交易id求余,使数据分成多个子集,让每个服务实例单独占用一个数据集。我自认为那是最优的方案了,前不久,

2020-10-27 21:45:17 97

原创 关于Mysql中的索引问题

没有什么事情是一定的。总存在着多面性。请移步至文章底部,如果你有兴趣,就留言解答我的面试题我尽量做到每天一篇日志,但写的东西要么是我工作的总结,要么是我自己的狂想。很少引用网上的,但可能参考某篇文档求证一下。以后我可能会整理,不过我觉时间不该浪费在整理上面,(包括整理房间,房铺,桌子),等你死后,会有人来整理你的遗作。现在面试题经常有人问到mysql索引问题,第一次被贝壳的人面试时,我说没了解过,不过我把我关于索引方面的知识全都抖了出来,包括B+树,倒排序,Hash等,对方也惊叹我了解得很多,于是对.

2020-10-27 18:18:22 343

原创 Redis一致性方案

尽管到目前为止,我在项目中还没有遇到缓存不一致问题,(遇过一次是因为代码遗漏原因)。就是那次让我考虑缓存不一致的解决方案,网上有很方案,例如加锁,消息队列,或延迟删除,还有监控binlog日志,还有用LUA实现乐观锁,但我一直为这些方案都不是太理想化,要么增加了系统的复杂度,要么不能做到实时一致性。一天我漫步在一个江南水乡的小镇上,我突然奇想,很多方案都是利用串行化的方式,实现缓存一致性。那我为什么不能利用数据库的特性去实现呢?于是有了以下方案:首先关系数据库中对同一记录写与写之间是互斥的,这表示一个写事

2020-10-26 14:22:31 161

原创 回忆多年前与C程序员共事后的总结

我曾在某大型项目组与某些高端人事共事(当然我只是个外包),从代码变量命名上可以看出,对方是做C出身,半路出家,转JAVA,除了用下划线命名之外,做C的程序员在很多细节上表现与JAVA的编程习惯不一致。不善长利用异常c语言中经常出现这样的代码/***返回:1代表成功,0代表失败***/int do_some_thing(int i ){ ....}int stat = do_some_thing(int i);if(!stat){}c语言或者像Go这样的语言中,函数经常返

2020-10-22 13:20:09 173

原创 闲聊kafka

在南京时,公司的boss系统(电信的短信系统)要与第三系统对接,第三方用的是php,并非java技术栈。分布式系统当时还没这么吃香。那时能想到的最好解决方案就是共用同一数据库。当系我方统接收到一条短信时,向短信表中插入一条数据。而第三方系统利用另一张表,记录最后他们处理短信的id,因为id是递增的,因此第三方系统就可以获获取增量数据了。这种通过共享数据实现的系统现在看起来虽然有那么点……。但我自认为在当时是最好的架构了。其实kafka和我上面的模型何其相似,同样用到了递增特性,同样设制一个offse

2020-10-20 20:08:30 229

原创 程序中的时间问题

知识的盲区往往会影响到程序编程。对于只有锤子的人来说,所有问题都是钉子。缘由:前不久,一个做前端的同事联系我,他说一个时间控件接收到后端的数据后,显示时总是少了8个小时,他想用网上的个工具类,对时间进行加8的运算,以达到理想效果。我以前,在一大厂里撸代码,发现所有跟时间格式化相关的,都会减8操作后,再格式化,而且注释说明了:转成utc时间(都已经知道UTC时间了,还这样搞)。计算机的时间其实是一个长整型数,专业一点的术语叫时间戳,不同国家,或者不同地点,对同一时间的表示确不同,我现在的当前时间是.

2020-10-19 17:26:09 924 2

原创 德摩律在编程中的使用技巧

功夫乃是纤毫之争王家卫《一代宗师》在我写完上面的博客查询时间交集数据后,我发现网上也有类似的文章,其作者用的是如下语句:SELECT * FROM test_tableWHERE NOT ( (end_time < a OR (start_time > b) )上面用到NOT 还有 OR,其实等价于SELECT * FROM test_tableWHERE (end_time >= a .

2020-10-18 13:11:15 123

原创 查询时间交集数据

本篇在我的两道排序面试题中有所讨论。表如下:id实例启动时间实例停止时间1220-1-1 00:002010-1-3 00:442220-1-3 00:002010-1-4 00:443220-1-8 00:002010-1-20 00:44需求:给定起始时间 startTime与startTime 与startTime与endTime,查询表中所有交集数据语句:select * from 实例表 where 实例启动时间 < $endTi

2020-10-18 08:48:35 323

原创 接口标准设计与实现

我的接口标准设计与实现简介Restful协议项目中常见的方案。我的实现简介我想要在本篇博客中介绍一下我在Http Api制定上的一些实践,重点介绍api的返回格式,及实现及前端的处理流程。Restful协议网上的资料很多,不用多作介绍。优点:充分利用了Http的特性,正宗,规范。缺点:1. 实现起来很麻烦,我在spring的官方示例中看过以下代码return HtttEntity.code(HttpStatus.NO_DEFIND).body(...); //模拟代码,别当真contr

2020-10-17 15:09:18 780

原创 常用的命令行工具

去年,我 有一部工作是解决线上问题,我解决决问题时,我最常用的工具如下接口调试工具:curl,网络诊断,抓包及模拟工具: netcat日志分析工具:tailf ,grp,vimcurlcurl命令是我团队最常用的命令了,即使我的团队成员不会命令行,与我交流时,也会用到curl命令。当前端发现接口连调出错时,我会让让他考贝一个curl命令给我,通过Chrom很容易做到这样就能为我节省很多时间,而且我也能从命令行为看到发送数据的细节curl 'https://blackhole-m.m.jd

2020-10-16 16:02:41 827

原创 spring源代码自我见

文章目录前言正文前言 最近面试试中,经常问到spring的源代码,老实说,自己真的没特意深入看过这方面的东西,一般我看源码是带着目的性去看,网上的有些文章也解释了一些源码方面的知识,我追踪源码时,还没有彻底弄明白,实例化时的三级缓存机制。尽管网上有这方面的文章,但我依旧没全弄明白。 因为自己对源码还半生不熟,而且网上关于启动流程,以及解决循环信赖的代码已经很多,所以我不敢班门弄斧,做深层次的分析。 但如我所说,我是有目的性地去看源码。因此我想我看到的源码和别人的源码或许有些“不一样”正文

2020-10-15 19:14:53 58

原创 关于两道排序面试题的讨论

文章目录缘起正文题一题二扩展1 生成组织树2.查询时间段交集数据总结缘起不久前,我去一家创业公司面试,因为他们没有专业的java开发,于是请了一个颇有经验的人出了两道笔试题:1.二分查找的代码实现,2.谈谈关于软件设计原则的看法。也是比较难较难得了,很少有人会问到这些方面,特别是设计原则这块,有很多开发者都不了解这方面的知识。而第一题是很容易,但要是撸一串代码也会为难一批有十年以经验的开发者了(当然我还是有这个自信的)。在远程口试中,对方问到了两个简单的排序,我觉得这两个排序虽然简单,但很有意思。因为

2020-10-13 12:56:16 127

原创 code review总结

文章目录前言一.error日志二 装箱与拆箱三 没完没了的字符串四 过多的嵌套五 乱拷贝六 引用了不该引用的jar包。前言一六年,我参与了一个我有生以来的最高大尚的项目,我在项目中负责某功能计费模块的开发,尽管总个项目投入了很多人力,还有引进了很多先进的工具和管理方式,但那还是我有生以来见过最糟的项目之一一七年,我去朋友的创业公司,帮他组建团队,一九年至今年,我于一家物流公司担任架构方面的工作,在开发中,我常见那种写业务能力很强,但代码细节惨不忍睹的开发者,于是我想整理一些我见过的代码片断,并提供一

2020-10-08 21:56:17 433

原创 利用BlockingQueue进行批量操作

1 背景我曾接触一个项目,业务数据用Hbase存储,为了方便查询统计,采用elasticsearch作为查询库,但直接操作elasticsearch对性能有致命的影响。于是引用了rabbitmq + springstream来实现削峰操作。一开始,接收到一条消息后,我便将其插入到elasticsearch,但消费终始终太慢,于是改用调用ES批量操作的接口,且用异步多线程的方式插入。2 方案用生产者消费者的方式实现,接收到消息后,立即将消息插入到本地消息队列。另启几个线程消费线程消费消息,消费线程在消

2020-10-07 19:38:04 2397

原创 论jar的启动与停止方式(待修改)

nohup 服务启动与kill -9 服务停止当我们用mvn package 打包好一个spring-cloud项目的jar, 然后上传到服务器,用 java -jar xx.jar运行,当我们退出命令行,或按ctl+c时,发现服务已不在运行。于是往往会用如下命令启动nohup java -jar xxx.jar &用如下命令停止运行中的服务kill -9 12343以上命令确实能正常启动服务,还能确保服务不会因为不会因为终端退出而被终止。我相信大部会人都是这样做的。但它却存在一个致

2020-10-05 22:27:11 431

原创 Mybatis自定义分页插件

因为项目中常常用到分页,我又嫌弃网上流行的分页插件,所以手写了一个。以后再完善说明@JsonSerialize(using = TmsQueryJsonSerialize.class,typing = JsonSerialize.Typing.DYNAMIC)public interface Page<T> { int getPageNo(); int getPageSize(); int getTotalCount(); void setTotalCount

2020-10-04 14:33:42 430

原创 spring-cloud配置文件3

为了解决用户模块与业务模块的耦合,我想到用策略模式来来实现两套获取当前用户的方案。首先我要定义一个获取当前登陆用户的接口,如下:package com.shangqiao56.tms;import com.shangqiao56.User;public interface UserHolder<T extends User> { T getUser();}接着是一个controller的基类,并用getCurrentUser表示获取当前用户public class T

2020-10-03 15:02:56 99

原创 spring-cloud配置文件2

在上篇文章里提到了通过禁用服务发现和配置中心来方便开发,那么问题来了,如果我们要用Ribbon访问某远程服务,我们该如何做呢。虽然开发环境禁用了服务发现,无法获取服务列表,但我们可以通过配置文件为某服务配置一个静态地址。pda-sync: ribbon: listOfServers: 13.13.31.9:9509rms-route: ribbon: listOfServers: 17.11.144.30:8083以上配置了两个静态的地址,我们结合Ribbon可以直接用服务

2020-10-02 10:13:00 48

原创 oms系统回顾

需求我在公司负责的第一个项目是订单模块(OMS),与传统的电商订单不同,此处的订单主要是承接第三方的订单,比如菜鸟或拼多多之类的第三方平台会将订单信息发给我方系统,我方会将订单转成运单进行处理。并实时将运单状态信息传递给第三方平台。方案订单并非公司的核心业务,因此我不打算污染公司的核心业务系统和数据库。我将订单模块的业务与数据独立出来,单独构建一个系统,通过http协议调用TMS服务接口(主要是下单及运单路径回传接口)。第三方平台,提供的接口的数据格式以及业务流程都不一样,如果我要设计一个稳定的系统

2020-09-30 17:44:11 453

原创 天妒英才

能让上天嫉妒的除了美貌就是才华了,不是有两个成语叫:天妒红颜和天妒英才么。因为天妒红颜,所以美人命薄,死得早。因为天妒英才,所以英才们职明绝顶,秃得早。

2020-09-29 13:10:53 255

原创 spring-cloud配置文件随笔

在我多年工作经验中,接触到的很多分布式项目都将开发引入了无底的深渊,因为痛苦的经历太多,所以在我成为一名架构,搭建分布式架构时,我努力避开那些深渊,使团队中的业务开发人员不至于掐死我。从前年时,我开时接触微服务架构(主要是spring-cloud技术栈),综观网上流行的一些开源项目,或者有些开发者搭建微服务平台,感觉他们太过把微服务当微服务了,以至于根本就无法分模块开发。主要原因是搭建者不了解spring-cloud框架,或者经验不足,不明白开发环境与测试环境(或正式环境)解耦的重要性。我本人主张轻便开发

2020-09-29 11:51:04 148

原创 物流系统路由查找解决方案

简介我供职的在上家是一家物流公司,我主要从事架构方面的工作,但偶尔也会写一些跟算法相关代码。项目组曾一个查找全路径的需求,系统现在的方法是循环查找数据库,迭代出所有数据。但数据量过多,且方法调用过于频繁,给数据库造成了严重的负担。于是我便用简单的数据结构加算法重新实现了。以下是系统中的数据表:station (站点表)idname1上海2昆山3苏州4常州5镇江6南京7扬州8西安9郑州站点表用于记录所有分拔与

2020-09-09 10:34:15 826

原创 程序员的小孩

1. 曾听说程序员大多生女儿,每每有同事抱怨又是一女儿时,我总想安慰说:至少能近一步证明孩子是你的2. 新生儿说的第一句话应该是:Hello world.3. 买电脑时还能让卖家预装操作系统,但婴儿就是一裸机,什么都没有,连最基本的ghost系统都没装,而且读写速率超慢,安装系统要几年时间4.不包退,不包换,没有质量保证,没有说明书5.应该给一些事件编号,如:小孩子不见了:404,小孩子尿床了,饿了,哭了取40X, 小孩子发烧咳嗽跌倒……应该取500之600之间的编号,小孩子吃饭,睡学,走路

2020-06-26 14:27:42 449

原创 对json.tool工具的改进

自从用了mac后,就渐渐喜欢上了命令行,利用管道,可以把一些基本命令组合在一起,发挥意想不到的效果. 在接口调试中,我常用的是curl工具. 通常返回一串json数据,但有时数据量过大,且返回的json并没有格式化。可用python自带的工具对其进行格式化处理:curl -XGET 'http://*****' | python -m json.tool以上命令通过管道将curl的执行结果传递给 json.tool 执行,输出的结果确实起到格式化的作用,但中文可读性全无。前不久,我想通过shell

2020-06-20 14:33:06 508

原创 python删除重复文件代码

整理磁盘才发现有好多重复文件,便想手写一个删除重复文件的工具。我当然可以用java轻松写一个了,只是最近看了一些python方面的东西,所以想不如拿python练练手。功能很简单,只是为了查阅资料,我花费了好长时间。需求:查找一件夹中的文件,包括子目录中的文件,找出重名文件,然后比较大小,如果大小也相同,则删除。方案:递归列出目录底下所有文件,并将同名文件合并到一起,用dict(java里是map

2017-09-03 20:27:47 2262 1

原创 一道关于排序的面试题

以前见群里发了一道面试题:两个已排好序数组,A和B,现要求对他们重新联合排序,合以的小数放入A数组中,大的数放入B中。这题的关键是两个数组已经排好序,如果按传统的方法,进行排序当然没问题,但就没有充分利用现有的条件。或许你可以想到插入排序,这样就可以利用a数组已排好序的优势对其进行排序了。但传统的插入排序确没有考虑到B数组也已排好序,我试过用插入序序

2017-05-29 09:31:23 1375 1

预约挂号系统(未完成)

自已练习时写的一个东西,写的很糟,以前的一个asp项目,现在学java,把它简化了,拿来练手!还没有成形。已完成了科室管理和医生管理,医生出诊设置,用的是jpa,struts2,如果刚有朋友接触jpa的话,可以下下来看看

2010-04-29

flashplayer_9_ax_debug.exe

运行flex时不能正常启动调试,可能是没下这个插件,

2008-07-03

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

TA关注的人

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