最近用Python写了个外挂,需要部署到Linux环境的服务器上,由于之前本地开发时使用virtualenv,使用这个虚拟环境有个好处是项目中依赖的库不会是全局的,只在当前项目的目录下有效,因为我是Mac系统,virtualenv环境下的库文件和linux上所需要的库不通用,所以不能简单的将整个env拷贝到服务器运行,需要做一些额外的工作。
动态替换JVM中的Class字节码
将程序打包提测,然后测试小姐姐过来跟你说程序有bug的时候就不得不改完bug然后重新替换部署到测试服重新运行。这样不仅非常麻烦而且还浪费了很多时间。既然只是改了一小部分的代码,那我们试想一下能不能动态替换JVM中的的某个类的字节码,达到每次只要更新修改的代码就可以自动进行动态替换,不需要做打包和重启的工作。经过验证发现这种方案是可行的。
使用Kotlin提高开发效率
Kotlin是现代跨平台的静态类型程序设计语言,不仅仅是Android官方支持的开发语言,同时在Web后端也在大量的使用。就我目前的工作而言,已经在完全使用Kotlin来编写基于Spring Boot的后端服务。为什么要使用Kotlin来开发应用?主要是因为它百分之百兼容Java,可以编译成JVM的字节码。Java的各种第三方库和Spring生态成为企业大型应用开发的最佳方案,使用Kotlin可以提高开发效率。
使用Python自动化获取全国每个城市的车牌代码
最近有这样一需求,需要获取12123交管查询网站上的全国每个城市对应的城市id和车牌代码。最初的想法是直接用Python写个爬虫,遍历每个城市,然后用Xpath提取DOM节点数据就好了。然而在实际操作中发现城市id的DOM节点如果用简单的获取网页数据的爬虫是取不到id值的,这个城市id值必须用浏览器打开的方式去访问,然后网站的js脚本再动态的将城市id插入DOM节点。于是乎想到了用自动化测试工具来做,使用selenium库来操作webdriver,驱动Chrome浏览器进行自动化操作。
使用远程Debug来分析问题
经常会遇到这样一个场景,项目部署到测试服务器上,当测试人员测出一些问题的时候,我们需要通过运行日志来查找问题并解决。但是并不是所有的问题都可以通过日志来解决的,比如要查看用户请求的变量和对象的一些信息,我们就需要通过断点来调试查看。正常的断点一般是在本地,但其实远程服务器的程序用Debug模式运行,然后本地连接上Debug端口,直接在本地打断点进行远程调试也未尝不可。
使用Spring Boot开发应用程序
Spring Boot是一个开发框架,用来快速开发各种应用程序,目前用的最多的主要是后端服务的开发。Spring Boot使用特定的方式对Spring的模板化配置进行了简化,并且集成很多第三方库的默认配置。
默认内置了Tomcat容器并且可以替换为其他容器,无需部署War文件,可以直接打成jar包独立运行。Spring Boot依赖于Spring家族的生态圈,你能想到的功能都应有尽有,总结起来就是:方便和快捷。
编写爬虫分析商品评论内容
最近看上一款很时尚的水杯,我要买的初衷就是因为杯子好看,但是我也很注重杯子的质量,比如是否有异味等。这款商品在淘宝上的评论有十几万条,里面掺杂着各种各样的评价,这么多评论一条一条的看显然是个笨方法,我的需求很简单,就是想马上知道这么多评论里究竟有多少人评论有异味。如果质量不过关,我马上换其他商品,这样可以节省我的购物时间。
作为一只程序猿,这种体力劳动当然是要用编程来解决了,只需要写一个爬虫并且分析评论内容即可。
搭建ngrok服务器
在开发的时候难免会遇到一些特殊场景,比如需要在测试服务器上进行远程调试。为了方便我们将工程使用Debug模式部署在测试服务器上,然后本地可以进行远程断点调试。但是这样做还是不够方便,比如开发者本地新增或者修改了代码,就没法实时进行远程断点调试了。
目前比较好的方案就是把开发者自己的电脑当做测试服务器,搭建一个属于自己的ngrok服务器,实现内网穿透,外网通过绑定的域名进行访问,开发者就可以直接在本机进行需要域名才能调试的开发任务,比如微信开发。
Hello World 的漏洞
任何程序都有漏洞,包括简单的 Hello World程序,这是一个客观存在的事实。也许你会质疑,一个用C/C++语言编写的输出一句 Hello World 的程序漏洞在哪里?
实际上,程序漏洞不一定全部都来自代码逻辑,漏洞还发生在程序运行时期。通过技术手段干扰程序执行,使程序不能得到预期的执行结果,那么这个程序就出现了漏洞。