自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 收藏
  • 关注

原创 scala下DSL的设计与开发

我们考虑scala下的DSL实现,scala有一些特性可方便的支持内部DSL开发:函数curry化、隐式转换、对象方法调用无需点号和圆括号。 假设有下面的DSL: + 支持int、string、bool类型的字面量 + 支持in、not in操作,判断是否在一个tuple中,例如:”baba” in (“baba”, 1, 2) + 支持and、or操作符 + 字面量支持size方法 我

2017-08-18 20:59:18 3383

原创 python AST机制讨论

我们这里1+2是一个表达式,故使用eval模式解析。解析出的AST树可以传入compile函数,该函数不带标记时,默认编译为python code object,最后用eval执行python code object得到结果。python2里有个compiler.ast模块,用于分析、构建python ast。这个模块在python3里移除了,其能力分散到compile()函数+ast模块里。最近在python3下考虑把其它语言转成python字节码执行,为此,研究了python3的AST机制。

2024-09-16 10:26:34 221

原创 如何制作ubuntu启动U盘

当尝试在大于32GB的存储设备上使用FAT32格式化时,会遇到“卷大小太大”的错误。但过程很艰辛,遇到很多问题,特别记录一下。

2024-09-15 15:02:20 355

原创 ubuntu使用心得

入手了一台新机,装了ubuntu,总的说来,现在的linux桌面基本可用,虽然距windows的易用性还有一定距离。顺便记录一下使用心得。

2024-09-15 11:27:38 1219

原创 PyQT开发总结

用PyQT开发了一个界面小程序,记录一下。

2024-09-10 19:11:48 790

原创 PBE加密算法说明

上述代码里的salt + str2byte(password)就是准密钥,经过SHA256安全散列算法生成kek,这里我们为简单起见,只做了一次散列,实际是可以做多次的。kek我们不用存,因为它可以通过salt+口令计算生成,但msg_key我们要加密后存储,这里我们将salt和msg_key放到了一个单独的secret.bin文件里,这个secret.bin文件也要保护起来(通过权限或口令)。但对于攻击者而言,他是要用大量的候选key进行尝试的,再叠加多次散列算法执行,那就是一个很大的负担。

2024-09-07 16:56:55 325

原创 AES加密算法说明

首先,我们得了解AES加密算法的一些基本概念。AES是一种对称加密算法,所谓对称,是说它的加密、解密过程使用相同的密钥。还有非对称加密算法,例如RSA,加密解密使用的是公私钥对。AES同时是一种分组加密算法,分组的长度一般是16字节(128bit)。分组是什么意思呢?假设我有一段很长的明文T,我没法用AES加密整个T,只能将T分成若干16byte的明文组,接着对这些明文组逐个进行加密,得到一堆密文组,把密文组组合起来,才是最终的密文。

2024-09-06 19:47:57 699

原创 rust语法细节讨论

入门中文教程链接:https://kaisery.github.io/trpl-zh-cn/ch02-00-guessing-game-tutorial.html字节是u8,一个字节;字符是unicode编码,占4个字节。字符串的字节序列用as_bytes()返回,字符序列用chars()返回。字符串的len()返回的是字节数,而非字符数。字符数用s.chars().count()来获得。用+可以,但推荐使用format!宏。例如:常量常量在编译时被求值,它们的值会在使用的地方被内联。常量初始化时不能调

2024-08-26 14:38:17 1009

原创 py2exe打包

要用到py2exe打包python程序,记录一下。

2024-08-10 15:03:40 210

原创 sublime text插件开发

手工开发了一些ST的py插件,记录过程中遇到的一些问题。

2024-08-07 12:08:38 338

原创 用python做DDL的静态分析

顺带说一个小窍门,就是DDLParser有一个silent=True选项,默认是关闭的,跳过语法错。但如果发现有的DDL解析不出来,可以临时打开该选项,看看究竟是哪一处语法不支持,非常快捷。最近在用python做DDL SQL的分析,用的是simple_ddl_parser1.5.1。遇到了一些问题,记录一下。这种情况需要我们对DDL做一些预处理,才能获得表结构的信息。会被输出为我们需要的t_testtbl。

2024-07-06 17:03:49 299

原创 关于Spring Cacheable注解的讨论

Cacheable注解中,value或cacheNames表示缓存名,key表示缓存里的主键名,unless表示某些条件下不存缓存,condition表示只在某些条件下才存缓存(即unless的否定条件)。这里要特别注意:key属性使用的是SpEL表示,而非普通字符串。表示key名为key1,SpEL里字符串必须用单引号括起来。如果不使用SpEL指定key,,生成规则是:AppID+subAppID+@Cacheable.value+入参字符串。

2024-06-11 12:07:06 484

原创 SpEL讨论

SpEL是spring框架提供的表达式语言(expression language),用作spring框架或注解的一些配置。因为近期在做代码分析,需用PLY对SpEL做语法解析,所以着重研究了一下SpEL的语法。记录一下,以便查阅。

2024-05-29 11:45:37 247

原创 PLY使用心得

越靠前的,算符优先级越低,同一层的算符优先级相同。当优先级相同的算符连续出现时,就要看是左结合还是右结合(代码里left和right所表示的含义),比如+和-是左结合,那么a + b - c执行顺序是(a+b)-c;再比如赋值是右结合,那么a=b=c的执行顺序是a=(b=c)会导致将关键字and和or也解析为ID,这不是我们想要的行为。最近在利用python做语法解析,使用了PLY,就是pyton里的lex+yacc。

2024-05-21 15:38:17 195

原创 spring bean的注册讨论

注册spring bean的方法总结在类上加@Component、@Service、@Named等注解。在类上加@Configuration注解,类成员方法上加@Bean。在spring.factories里配置EnableAutoConfiguration对应的类,在类方法上定义@Bean。应该算是@Configuration+@Bean的特化处理吧。EnableAutoConfiguration能根据应用程序的依赖和类路径自动配置所需的bean 。在BeanFactoryPostProcess

2024-05-16 16:47:00 148

原创 对rust语言的一些理解

近来在研究rust语言,作为老牌的C++程序员及拥有近10年经验的java程序员,觉得有必要通过语言间的对比来加深对rust的理解。

2024-05-13 17:24:50 980

原创 用python做java语言的静态分析

我们可以把javalang解析出的语法树进行再加工,生成我们需要的元信息,再结合校验规则,做一些常见编码问题的分析。最近在对java语言做静态分析,发现javalang这个好用的python包。这就是lint类工具的一般性原理。

2024-03-08 17:13:54 516

原创 python深度讨论

我们一般用python的unittest写单元测试。

2024-03-01 14:52:58 404

原创 正则表达式的一些高级用法

不允许出现某个单词,使用?!(?!Pattern).\.matches表示.matches之前的不能是Pattern非贪婪匹配,在匹配项后加?matches\((.*?)\)这里在.*后加问号,表示尽可能少的匹配。防范redos攻击,可使用Cyber-Redos-Terminator检查开发使用的正则表达式

2024-02-20 16:49:43 1530

原创 java语言深度讨论

我们会看到,try-with-resource依然会翻译为try-finally,在finally里面,是要明确判断构造对象parser是否为null,不为null,才会调用其close方法的。一旦构造器抛异常,parser肯定是null,所以其close不会调用。所以,如果构造器里涉及某些资源创建(例如文件),同时可能抛异常,就要在构造器里做好异常下的资源清理,而不能指望close方法自动完成。逻辑上很好理解,你对象都没成功创建,我为啥要调close啊。这样的处理逻辑跟C++也是一样的。

2024-01-29 11:53:43 409

原创 swagger标签说明

指定了x-ref-external的数据结构里的properties只是起到一个方便阅读的作用,并不会根据properties真的生成属性。

2024-01-16 16:09:53 478

原创 lombok注解说明

@Data是包含了@EqualsAndHashCode和@ToString的@EqualsAndHashCode默认是不比较父类的属性的,如需比较,设置callSuper=true

2024-01-16 11:39:30 387

原创 springboot下rest接口抛异常的定制处理

主要是定制ExceptionMapper,作为jaxrs框架的provider,即可将rest接口实现里抛的异常截住,并转化为Response发送给前台。

2023-12-08 15:25:52 544

原创 mysql使用进阶----索引原理

mysql索引使用B+树。详细原理可参考。

2023-11-02 15:58:54 141

原创 mysql使用进阶----查询计划

解释一下type、possible_keys 和key等几个字段的含义。

2023-11-02 14:24:04 126

原创 xss漏洞及排查

它直接返回前端输入的名字。界面会弹出domain域的对话框。上述攻击是后端将前端的输入未做任何处理,直接返回到web界面上造成,称之为反射型xss。还有一种存储型xss,后端对前端输入未做处理,存到数据库中。后续每个用户来访问页面,数据库的数据都会加载到界面上,从而形成xss攻击。这两种xss,客观上形成了一种动态页面或非法链接,造成浏览器解释非法脚本。

2023-10-11 10:48:53 218

原创 跨域问题讨论

。也就是说,一旦允许跨域,意味着允许恶意网站随意攻击可信网站,带来安全风险。这里面有一个前提:用户必须先登录可信站点A才行(登录cookie会保存在客户本地)。SOP:same-origin policy,同源策略现代浏览器默认遵循同源策略,即网站A的请求不能去访问网站B。但,、、所以,即使在浏览器支持SOP的情况下,前例中的恶意网站仍可以构造例如img src这样的恶意代码,绕过浏览器的SOP规则,访问正常网站A。不受SOP限制的资源清单:脚本文件 js图片资源样式资源cssiframe展示其他的

2023-09-28 10:55:36 194

原创 预防Dos攻击

Dos----拒绝服务攻击,一般是构造特殊的输入,使得后台的处理耗时远超正常水平,随着请求越来越多,后台服务越发疲于奔命,最后因资源耗尽,无法再接受新的请求,最终造成拒绝服务的效果。对于后者,往往是在post请求里,可以做一个filter来处理所有的incoming request。对于前者,做一个公共函数检查pageSize的大小,确定合理的范围即可。分页查询时传一个很大的pageSize;入参是一个很大的集合。

2023-09-11 16:29:28 409

原创 android开发心得

因E2E开发和架构设计需要,对android要有基本的开发能力,结合项目,有一些总结,记录之。

2023-09-01 10:40:08 169

原创 java内存模型讨论及案例分析

Xmx: 最大堆大小-Xms:最小堆大小-Xss :线程堆栈大小,默认1M生产环境最好保持 Xms = Xmx。

2023-08-29 15:38:16 729

原创 vue心得

不是专业的前端开发,但因为E2E开发和架构设计的需要,必须对前端框架有一些了解。这两年项目前端在用vue,就记录一下vue的使用心得。

2023-08-29 11:40:38 422

原创 proxysql使用心得

解释下这个3层的配置系统。最底层的是disk库和config file。这里需要注意,这里的config file就是传统的配置文件,默认为/etc/proxysql.cnf,ProxySQL启动时,主要是从disk库中读取配置加载到内存并最终加载到runtime生效,只有极少的几个特定配置内容是从config file中加载的,除非是第一次初始化ProxySQL运行环境(或者disk库为空)。中间层的是memory,表示的是内存数据库,其实就是main库。

2023-08-24 16:11:32 1256 1

原创 mysql使用心得----进阶

现象:如果有事务正在修改某张表T,此时执行alter table T语句会挂住。另外,将alter table放在一个事务中,模拟大表的长时操作,发现此时查询、删除这张表的记录均无问题。是否说明alter table并不锁表呢?我们先来看看alter table的原理,mysql5.7的手册上有一段alter table有两种算法,一种是就地(inplace)修改或重建表,一种是把数据复制到新表,最后把新表rename回老表(rename动作是原子的,而且非常快)。

2023-08-24 16:06:43 262

原创 mysql使用心得

用户定义变量 是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用 “@变量 名” 使用就可以,其作用域为当前会话,即在会话1中定义的变量在会话2中是不能使用的;注:之前讲的2个@符号是系统变量名,一个@符号是用户自定义变量。

2023-08-23 17:22:51 881

原创 一个mongodb问题分析

表的个数:生产上常用的表就10来个。sharding cluster + replica set方式部署:9个shard server, 每个shard server 1主2从, 大量数据写入时或对大表创建索引时,可能有主从复制延迟问题。实测下来,20亿表的索引创建导致主从延时4小时,因为从表在建索引的时候会停掉主从复制。一个shard server挂掉,恢复起来很慢,一般要半个小时。而且一个shard server挂掉,目前会导致整个集群不可用,。

2023-08-22 11:58:14 900

原创 mongodb使用心得

collection:相当于db的表document:相当于表的记录。

2023-08-21 20:00:16 1064

原创 C++写文件的几种方式及效率对比

将100万条字符串写入到文件里,有几种方法.方法一,直接流入std::ofstream耗时13s。仅耗时1s。不过,这里效率的提升是以可靠性为代价的,一旦当前进程core掉,未及时刷到os缓冲区的内容会丢失掉。方法二,先流入std::ostringstream,凑够一定的条数,再流入std::ofstream耗时1s。方法二相比于方法一没有提升,是因为std::ofstream里已经有一个write buffer了,无需我们在应用程序里额外做一个。

2023-08-21 15:44:58 1852

原创 C++编码规范解读

好处:代码整体结构清晰、明了。java里强制如此。

2023-08-18 11:45:00 461

原创 flask使用心得

flask不像django那样重量,它非常轻巧,可由程序员自己深度掌控。很适合用来做一些原型快速开发。首先,flask使用注解来绑定url和其处理函数,比django更直观,近似于java web框架的做法了。其次,flask对日志的使用,就跟普通程序里使用logging一样,不用像django那样受限于框架。

2023-08-17 16:05:24 762

原创 spark使用心得

为此,常规的做法是使用构建工具,生成单个大JAR 包,包含应用的所有的传递依赖。因此,一个application的运行会有若干管理开销,比如数据的跨节点传输、启停executor进程、启停executor进程里的线程池等,若数据量较小,这些管理开销占的比重反而较大,得不偿失。我个人的猜测,由于spark计算的效率瓶颈应该在分布式计算上,使用python的效率未必比java或scala相差很多,就好比我们产品的程序,性能瓶颈都在sql上,用啥语言组织业务更多的出于使用方便的考量。

2023-08-17 10:42:48 757

空空如也

空空如也

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

TA关注的人

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