- 博客(113)
- 资源 (16)
- 收藏
- 关注
原创 LeetCode 热题 HOT 100(P31~P40)
滑动窗口的思路,右游标可以探查到能满足条件的位置,关键的是左游标怎么确定合适的位置,因为左游标前面可能刚好是不在t中的字母。还有一种是纯用栈的方式,这样就需要维护一个cur 指针,同时判断cur 和栈的情况,在cur 不为空的时候不断往左树迭代同时入栈,如果cur 为空就出栈,并把cur 指向右节点。输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"返回满足题意的二叉搜索树的种数。
2024-04-14 18:10:44 891 1
原创 LeetCode 热题 HOT 100(P21~P30)
经典的爬楼梯算法题,他可以用递归的方式,也可以使用动态规划的思路。动态数组定义为当前位置的最小值,动态方程有所调整,dp[i,j]=min(dp[i-1,j],dp[j,i-1]) +nums[i,j]。维护0,1,2的初始下标,其中0,1初始在0,2初始在len-1,然后迭代数组,对数组中的数字进行判断,并相应的移动下标。比较好理解的,这里稍微解释下包含i的数组最大和,基本要看前一位最大和是否小于0,如果是负数带上前面的肯定更小,还不如自己玩(i),如果前面大于0,那么带上肯定更大。
2024-03-24 15:25:07 621 1
原创 LeetCode 热题 HOT 100(P11~P20)
题目:给定一个只包括'('')''{''}''['']'的字符串s,判断字符串是否有效。解法:遇到右括号的时候需要判断有没有对应匹配的左括号,因为必须是类型相同的才能进行闭合,因此需要一个栈来维护遇到的左括号,看栈顶的左括号是否跟当前的右括号匹配。这里有个技巧,维护一个右括号为key 的map,这样方便判断和匹配。
2024-03-15 22:01:39 1045
原创 LeetCode 热题 HOT 100(P1~P10)
这里记录下刷题过程中的心得,其实算法题基本就是个套路问题,很多时候你不知道套路或者模板,第一次尝试去做的时候就会非常懵逼。就算你一时掌握了,过一段时间之后往往会绝望的发现你又不会了。所以了解这些之后过遍数就非常重要,我通常配合anki 来复习。使用HashMap 是比较常规的解法,这里有个技巧是只通过一遍循环就能解决问题。从头开始遍历,然后顺便把元素放入HashMap,这样就不用先遍历一遍初始化HashMap。🔥 LeetCode 热题 HOT 100。整数,并返回它们的数组下标。,请你在该数组中找出。
2024-03-02 20:57:51 436 1
原创 记录一次典型oom的处理过程
有同学反馈收到应用RT的报警,其中的流量都来自于网关集群中的一台机器。因为负责网关,就上去看了下并进行排查。整体是一个比较明显的oom,这里只是记录下排查过程,老司机可以略过了。
2023-10-15 17:40:44 212
原创 MySQL事务隔离&实操
一次业务交互涉及多行记录的时候(不管是否扩表),需要保证要么都成功,要么都失败。典型的就是转账场景:先查询余额A账户有100,A少100,B多100,如果在查询余额之后,另一个线程在执行从A给C转账,也是查询到A有100,这样继续操作A的账户很可能是负的。
2023-03-15 21:01:00 567
原创 TCP/IP 报文&协议学习
最近在学习流量录制框架goreplay(),发现需要了解TCP协议,不然读不懂相关的代码。因此开始了TCP 相关的学习,TCP/IP 协议本身是比较大的内容,这里核心关注报文结构和一次应用层请求引起的tcp交互。
2022-10-25 10:44:37 3150
原创 VMware Fusion网络配置相关原理
VMware网卡安装好VMware Fusion 并启动之后,通过ifconfig可以看到多出2块网卡(这2块网卡在没有启动VMware 的时候是看不到的)。注意这里的ip是重新设置过的,这个后面会说。很早的时候接触VMware 对他的网络配置一直很模糊,像什么桥接模式、NAT模式,以及仅主机模式。用到的时候都是网上收一下,照猫画虎配置一下。网上的文章良莠不齐,有时候能配置通,有时候又不行。决定还是要搞清楚这块原理,首先我们说一下这2块网卡。vmnet1这块网卡运行在host only也
2022-05-21 19:10:22 1970
原创 GNS3使用Docker
背景:上一篇文章:GNS3 mac环境安装并搭建vlan_ykdsg的博客-CSDN博客_gns3 mac 描述了这么快速使用GNS3,这个时候可以做一般的网络实验了。但是在网络的学习过程中会涉及很多linux环境,例如iptables、OpenvSwitch 等都需要在 linux中配置。在GNS3 中有几种方式可以实现:1.通过VMware 或者VirtualBox等虚拟机来引入。这个比较简单,基本就是安装好虚拟机,在GNS3 的配置界面中新增对应的虚拟机就行了。需要注意的是勾上 .
2022-05-16 21:44:25 770
原创 GNS3 mac环境安装并搭建vlan
因为学习网络相关课程需要一些环境来测试,所以通过GNS3是比较简便的方式。GNS3简介GNS3允许在笔记本电脑上运行一个有着几台设备的小型拓扑,用来对虚拟与真实网络进行模拟、配置、测试以及故障排除。正因为可以使用模拟器,而不需要去购买昂贵的硬件,来达到学习网络技术的目的。GNS3是由两个软件组建构成的:GNS3一体软件(The GNS3-all-in-one software, GUI, 图形用户界面) GNS3的虚拟机(The GNS3 virtual machine, VM)在GNS
2022-05-08 20:30:31 3090 1
原创 Rete算法初探
关于rete算法的介绍,能找到的资料不少,但是往往对初学者不友好,一上来就是一堆Fact,TypeNode,AlphaNode之类的术语,非常容易劝退。这里总结一下自己的学习过程,希望从问题出发,方便理解rete算法本身。举个例子:例如:我们需要将提供“机票+酒店”、“机票+酒店+贵宾休息室”两种类型的产品给旅客。机票、酒店、贵宾休息室需要满足一些基本的限制条件。并且:“机票+酒店”产品要保障:酒店位于目的地且到达当天可以入住。“机票+酒店+贵宾休息室”产品要保障:酒店位于目的地且到达当.
2021-06-22 21:37:44 1822 4
原创 用gradle开发IDEA插件
之前维护过IDEA插件GenerateO2O (https://plugins.jetbrains.com/plugin/7171-generateo2o),主要用来解决在分层架构中,每一层的对象装换的问题,比如DTO转换成DO,或者反过来。这个其实在字段数量很多,而且大部分长得一样的时候非常消耗人肉时间,而且容易错漏部分字段。当然可以使用类似Dozer这类动态BeanMapper工具。 但是这类工具的转换工程是黑盒的,实际使用中还是存在挺多问题。所以这个插件的初衷就是尽量减少维护机械代码的时间,提升...
2021-05-13 16:01:37 6379
原创 java线程状态研究
按照官方的说明java 的thread 有以下几种状态:NEW RUNNABLE BLOCKED WAITING TIMED_WAITING TERMINATED会发现通过jstack 打印出来的线程状态不是这样的。下面这个图是通过IBM 的jca 工具来分析jstack dump文件。顺便说一下jca 是目前发现最好的研究线程栈的工具,本地工具秒杀所有在线分析网站。可以从https://www.ibm.com/support/pages/ibm-thread-and-monitor-.
2020-10-08 22:41:22 962
原创 java 通用IO API 设计-- 赏玩
这里先贴一下原文内容:从https://github.com/oldratlee/translations/blob/master/generic-io-api-in-java-and-api-design/README.md上摘入。原文链接:A generic input/output API in Java-Rickard Öberg(PS:文章原始链路已失效)译文发在:【译】...
2019-10-24 11:43:19 254
原创 springboot2.* 解决域名带下划线出错的问题
项目中使用了springboot2.*版本,结果发现域名中包含下划线的时候,比如adc_test.***.com ,结果接直接返回400了。结果发现这个是在tomcat 版本在8.5.31以上都会出现问题找到个问题了接下来就是想解决方案,于是想着把tomcat 的版本给退回去,网上找了下资料,说是pom文件中配置tomcat的版本就可以了<tomcat.version>8.0...
2019-08-15 21:25:13 1530
原创 树状结构存储和快速匹配
背景:实际工作中有很多需要树状结构来表示某些数据关系,比如省市区,商品的几级类目,组织架构等。继承关系驱动的设计比较常规的设计是使用一个parent 字段来表示继承关系,构建二维关系表。这个方案的优点是:直观简单,非常容易理解,数据维护上成本也较低。但是缺点同样明显:查询的效率太差,比如我要在代码中构造出Food 这棵,需要先便利parent_id为1 的数据,再根据返回的...
2019-07-01 23:37:07 2780 1
原创 springboot同package多个ImportResource引起重复加载的问题
在写测试用例的时候,同一个package 的不同用例分别各自配置了application类,里面指定了配置文件@ImportResource(value = { "classpath*:spring-context-test.xml" })结果发现一直报重复bean定义的错误,怎么查找都定位不到,后来看了下启动日志,发现spring-context-test 被加载了多次,刚开始还没怀...
2019-07-01 19:24:50 4076 2
原创 单元测试的解答
接上篇https://blog.csdn.net/ykdsg/article/details/88410310来说说自己的思路,一家之言不一定对。针对上一篇的总结的几个问题:白盒测试需要针对代码的内部实现逻辑,成本较高。 数据初始化&准确性的问题:怎么保证每次跑用例的时候数据是可控的,不会被其他人篡改。 需要处理复杂的依赖关系,spring 容器一起来就是一堆,一不小心还...
2019-06-04 10:03:38 165
原创 线程级缓存ThreadLocalCache
很多时候一条操作链路上需要获取很多重复的基础信息,比如用户的信息,可能在AO层也有,Service层也有,这样造成的问题是每次都需要发起一次调用(数据库orRPC),这样造成的问题是对性能的无谓浪费,当然可以通过参数进行透传,但是这样带来的问题是必须修改方法的定义,一方面遗留代码需要大量修改,另一方面接口的参数也会极具庞大,特别是A->B->C,这样的方法调用链,如果只有A和C用到了用户数据,B就算没用到也需要定义一个用户信息的入参,这个对接口的定义造成了很大的污染。...
2019-03-21 10:11:24 6819 2
原创 单元测试的窘境
大家都知道单元测试的重要,网上也有很多讲单元测试的文章,但是脱离网上的case实际维护用例的时候就不是那么回事了。我们团队从17年开始摸索单测的实行,发现了在落地过程中的一些问题。 首先测试的类型是不一样的,先讲几种对单测比较友好的类型:第一种DAO层的单测,DBunit +SpringTest 事务回滚算是豪华套餐了,需要解决的问题就是验证sql是否符合预期。这种...
2019-03-11 23:19:51 256
原创 maven deploy 成功但是报错400
上周发现Nexus的release Repositories 设置的是Allow Redeploy,对于正式包来说不升级版本直接覆盖是很危险的行为,于是改为Disable Redeploy,结果本周有部分同学反馈正式包打包出错,而且就算事新的version也出错。[ERROR] Failed to execute goal org.apache.maven.plugins:maven-d...
2019-01-09 19:38:21 2520 1
原创 FastJson 泛型转换踩坑
一直用FastJson 做rest接口的序列化,FastJson对泛型的支持也非常好。经过一段时间使用后发现不定时的会报JsonObject can't covert to ****的错误,但是重启之后就好了。排查过程不赘述,直接上代码演示String itemJsonStr = "{\"models\":{\"_defaultModel\":{\"id\":824,\"itemName\":
2015-12-30 10:17:29 27286 2
原创 maven 插件开发
背景:项目中使用了一些内部的二房包,有些是公共的工具类封装,有些是一些client的api。在开发的时候通常使用的是SNAPSHOT 版本,在正式发布的时候通常需要使用正式版本,但是这个很容易忽视,导致下一次发布的时候可能因为版本的原因导致线上出错。所以这里开发一个maven插件,在打包的时候可以检验依赖树中内部二方包是否使用了SNAPSHOT版本。插件开发:maven插件相关
2015-12-16 21:28:16 715
原创 spring bean 动态替换
系统发展到一定程度就会面临分库分表的问题,我们要考虑的是怎么让系统平滑的从老的表迁移到新的表。通常新表的数据可以通过binlog同步的方式同步老表的数据,在某一个时间点通过开关的方式让读写老表的操作切换到新表。这里就涉及到如何方便的切换新老操作。加入了新表,必须要有新表的DAO,现在的问题是如何根据开关调用新老DAO来执行操作。先说下目标:能够方便的实现开关切换。对现有代码侵入尽量的少
2014-01-24 14:10:49 5381 1
原创 java 通过velocity导出word
项目需要通过程序生成word文档,就是业务方提供了一份模板,里面的有一份表格或者合同,程序主要就是把数据填到word中,并提供用户下载。首先想到的是iText和POI。iText操作pdf还不错,但是对word貌似就很吃力了。POI对excel读取和操作还行,对word的写入太复杂。上网搜了下java导出word,发现可以通过FreeMarker来完成还能保持word中复杂的样式。我们的工程中已经
2014-01-22 19:44:22 8133 1
原创 java.lang.instrument学习 (二),javassist实例练习
学习了instrument之后试着自己写点东西,上一篇的例子中使用的是asm,毕竟是面向字节码的,api还是比较复杂的。其实有时候的需求很简单,无非就是看下类里的方法啊之类的。javassist是基于源码级别的API比基于字节码的ASM简单。下面就是对使用到的类打印出所有方法的Transformer:public class TestTransformer implements Class
2013-11-02 12:02:54 4211 1
转载 java.lang.instrument 学习(一)
转自:http://jiangbo.me/blog/2012/02/21/java-lang-instrument/Instrumentation介绍:java Instrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序。这种监测和协助包括但不限于获取JVM运行时状态,替换和修改类定义等。 Java SE5中使用JVM TI替代
2013-09-27 09:37:26 26820 2
原创 python脚本替换指定行
工作中需要迁移代码,并把原来的日志系统更新到现在的格式,原来获取log的格式是AuctionPoolLoggerUtil.getLogger()现在获取log的格式是:LoggerFactory.getLogger(XXXXX.class)这里的XXXXX需要替换为当前的类名。如果这样的java文件不多还好,可以一个个人肉替换。一旦这样的文件很多,特别是迁移过来大量
2013-09-25 09:17:49 5854
原创 python脚本检查文件内容
python脚本,正则表达式python脚本检查文件内容这个是之前就在学python,欣赏python的小巧但是功能强大,是连电池都自带的语言。平时工作中用java ,觉得python在日常生活中比java用处要大,首先语法没那么复杂,特别是io的操作,java里要写一大坨没关的代码。还有就是不用编译,而且linux系统默认都会自带。这次遇到的问题是工作当中想要迁移一个系统中的
2013-09-08 18:00:00 3512
原创 Sikuli 图片识别
Sikuli 图片识别 ,轻松编写自动化测试脚本Sikuli这个是MIT开发的,可以通过图片进行自动化操作的 官网地址 从上图可以看到就是根据截图来操作,语法用的是python的。本来想用这个写个自动玩游戏的外挂,不过在mac上反应太慢了,通常是是匹配到图案,鼠标很迟才移动上去,然后再点击就没啥用了。不过用来做日常一些机械的操作还是挺好的。
2013-09-08 17:57:15 3242
原创 如何建立一个免费网站
通过github page 免费搭建个人网站从哪得到免费的主机服务github page可以提供主机服务支持jekyll,这个网上资料很多,使用jekyll从无到有搭建一个网站很容易,难的是怎么熟悉jekyll的语法。这方面中文资料比较少,不过官网的英文也还算简单。本网站使用的模板是展新同学开发的kunka可以参考:通过GitHub Pages建立个人站点markdown语
2013-09-08 17:57:14 1601
原创 快速任务处理框架
背景:用户在设定某一时刻触发某项任务,任务处理框架按照时间先后依次处理任务,即如果用户设置了9:30,9:31,9:32这3个时刻分别需要执行100个任务,那么任务系统在9:30时执行相应的任务,全部处理完之后再处理9:31的,也就是说9:31的任务是否执行不仅要看时间是否到点,还要看前面的任务是否完成。并且需要实现可扩展的架构,可以通过加机器来增加任务的处理能力。框架设计:1.任务的存储
2013-05-27 09:12:39 1141
原创 Intellj IDEA 启动参数调优
修改 IntellJ/bin/idea.exe.vmoptions (记得备份哦亲)修改成-Xms512m -Xmx512m -Xmn164m -XX:MaxPermSize=250m -XX:ReservedCodeCacheSize=64m -Xverify:none -Xnoclassgc -XX:+UseParNewGC -XX:+UseConcMark
2013-05-27 08:53:49 9241
转载 Java I/O通用api设计 (二)
上一篇处理了基本的I/O传输,我们常常还要做些其它的事。可能要计数一下传输了多少个数据,过滤一下数据,或者是每1000条数据做一下日志,又或者要看一下正在进行什么操作。既然输入输出已经分离,这些事变成在输入输出的协调代码中简单地插入一些逻辑。大部分协调代码有类似的功能,可以放到标准的工具方法中,更方便使用。第一个标准修饰器是一个过滤器。实现时我用到了Specification。pu
2013-04-20 10:08:50 774
转载 Java I/O通用api设计 (一)
原文A generic input/output API in Java(by Rickard Öberg)中给出了一个通用Java IO API设计,并且有API的Demo代码。更重要的一点是,这篇文章给出实现这个API设计本身的步骤和过程,这让API设计实现过程有了条理。文中示范了从 普通简单实现 整理成 正确分解、可以复用、可扩展的API设计 的过程。这个很值得理解和学习! PS:
2013-04-15 17:31:43 931
转载 程序员如何保持优秀
小范围的选择一些有用技术,透彻的学习它们,拥抱它们。然后不断的扩展这个范围。理解各种数据结构的优点和缺点,包括它们在内存中和在硬盘上的各自表现。理解各种算法的优点和缺点。了解你的工作领域。关上电脑,去做你的用户们在做的事。有准备,有愿望,有能力在任何时候投入到多种技术层面中。你必须知道表象下的技术原理。在“各个技术层面的掌握程度”和“编程能力”上有着
2013-04-06 10:21:18 581
原创 jrebel 使用
很早就关注jrebel的使用,因为java开发免不了重启服务器,现在一般的服务器所支持的热启动都是不改变类结构的前提下,比如不能新增,修改,删除已有的方法,只能改变方法体的实现。基本上没有太大的意义。之前用过jrebel但是效果不是很理想,一方面自己的机器配置比较低内存有限,jrebel用起来之后还是比较占内存的,通常多用几次热部署之后就会导致class重新加载不成功。现在机器好了不少,jrebe
2013-04-02 16:47:57 2133
原创 Git学习
首先这个不是入门教程,如果要入门的话可以google 下git入门,你会得到比较多的资料,这里主要是对git里的一些概念进行清晰的解释。如果你连git环境都没有的话就没必要看下去了,先goole下git 入门吧。推荐下一个git在线学习网站,可以通过例子来联系命令并看到返回结果http://pcottle.github.com/learnGitBranching/1.commit在
2013-03-25 09:50:34 1007
第一本DOCKER书 修订版
2017-12-15
一站式学习C编程
2013-06-19
osgi进阶.pdf
2009-08-20
OSGI实战.pdf
2009-08-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人