![](https://img-blog.csdnimg.cn/20200215234418813.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
编程语言
编程语言Golang, Java,JavaScript, Lisp-Racket, Python相关。
ka__ka__
软件工程师
展开
-
Python的模块搜索路径和包管理
Python模块搜索路径Python模块搜索路径的官方文档:https://docs.python.org/3/tutorial/modules.html#the-module-search-pathWhen a module named spam is imported, the interpreter first searches for a built-in module with ...原创 2020-03-04 23:31:45 · 646 阅读 · 0 评论 -
Golang笔记:包管理机制
Go语言使用包组织源代码,并实现命名空间的管理。Go不强制包名和所在目录同名,但好的工程实践建议同名。包定义不包括目录路径,但引用一般是相对GOPATH的全路径引用,所以包一般都会放在公司或个人的域名目录下。包引用Go语言自带标准库的包在$GOROOT/src下面,可直接引用;自定义的包和第三方包需要放在$GOPATH/src下面才能被引用;引用了包,但是代码中没有用到,编译器会报错。...原创 2020-03-01 17:54:35 · 395 阅读 · 0 评论 -
Golang笔记:iota常量生成器
Golang的常量表达式值在编译期计算,iota是Golang提供的常量生成器,用于生成一组以相似规则初始化的常量。一个例子:const ( Zero = iota // 0 First // 1 Second // 2 Hi = 0 // 0, 被打断后,后续值不变直到iota显示回复 Four ...原创 2019-02-28 22:45:39 · 588 阅读 · 0 评论 -
Go语言使用Protobuf举例
Golang是内存安全的带垃圾回收的强类型语言,那么必然不鼓励直接拿到一个地址随便进行类型强转的,虽然通过unsafe包也可以做到。并且,Golang的结构体是不能设置单字节对齐的,所以发送一个结构化的msg给另一个进程时一定要做序列化,接收端收到再做对应的反序列化。当然,也可以使用XML/Json来做通信格式,但是它们是字符串,编解码效率更低,而且也得需要库的支持。有没有一个更加简单高效的编解码...原创 2018-12-12 00:39:07 · 970 阅读 · 0 评论 -
Go语言模型:可变参函数的实现机制
Golang的可变参实现跟C/C++的不太一样,编译器把可变参解析成了一个切片结构传给了函数,充分利用了Go内置的数据结构。而C/C++的实现则要结合x86平台调用约定和ABI手册了,可以看:Linux C variadic可变参数:va_list 在x86和x64下的区别与实现原理。一个Go的简单例子:func sum2(vals []int) int { total := 0 for ...原创 2018-11-29 23:30:03 · 273 阅读 · 0 评论 -
Go语言模型:string的底层数据结构与高效操作
Golang的string类型底层数据结构简单,本质也是一个结构体实例,且是const不可变。string的底层数据结构通过下面一个例子来看:package mainimport ( "fmt" "unsafe")// from: string.go 在GoLand IDE中双击shift快速找到type stringS原创 2018-11-25 11:44:42 · 5554 阅读 · 5 评论 -
Go语言模型:切片slice的底层实现
Go语言的切片实现可以看runtime的slice.go文件,切片是Go语言内置的数据结构,编译器识别到切片语法操作时会自动调用runtime对应底层实现,所以用起来就非常方便,这也是语言级的实现比库实现的优势。可以通过一个例子来看切片的内存模型:// go version: 1.7package mainimport ( "fmt" "reflect" &原创 2018-11-21 23:44:00 · 1001 阅读 · 0 评论 -
Go语言模型:通过runtime源码和汇编看interface的底层实现
Go的汇编要看懂Go的内存模型,就需要对Go runtime的源码和Go的汇编指令有一定的了解。Go的汇编是基于 Pan9 汇编的风格,。Go的runtime源码中有大量的汇编,比如goroutine的上下文切换肯定是要汇编的,切换栈帧和寄存器,这些是无法通过简单的function call来完成的,操作系统的线程上下文切换同样类似。在Linux平台,我们通过Go runtime的源码和GDB...原创 2018-11-19 00:07:45 · 1191 阅读 · 0 评论 -
Go语言模型:Linux线程调度 vs Goroutine调度
调度本质上体现了对CPU资源的抢占。调度的方式可以分为:抢占式调度。依赖的是中断机制,通过中断抢回CPU执行权限然后进行调度,如Linux内核对线程的调度。协作式调度。需要主动让出CPU,调用调度代码进行调度,如协程,没有中断机制一般无法真正做到抢占。Linux NPTL 线程库看操作系统方面的文章时,要注意区分其描述的是通用操作系统还是某种特定的操作系统(如: Windows/...原创 2019-01-31 23:10:42 · 2221 阅读 · 0 评论 -
Restlet+Fastjson 快速构建轻量级 Java RESTful Webservice
Restlet+Json 快速构建轻量级Java RESTful Webservice原创 2014-04-29 16:01:22 · 3924 阅读 · 0 评论 -
Java 正则表达式小例子
这个周末学习了下正则表达式。自己写了一个小程序,从键盘获取pattern,匹配文件(默认本工程下tests.txt, 也可以自己输入文件路径)中的字符串,并逐行显示匹配结果,方便验证自己写的正则表达式。原创 2014-04-27 15:39:27 · 1928 阅读 · 0 评论 -
Java JDBC 小例子
一直以来项目都是用Hibernate,JDBC反而没有正经练习过,现在将JDBC的基本使用做个小练习。1. 使用MySQL建立一个test数据库,里面建立一个mytable表,3列(id,name,age);将url, user, password配制成properties文件,放到 工程resource源代码包下面,这里将其命名为db_connect.properties文件url =...原创 2014-03-28 13:11:57 · 2023 阅读 · 0 评论 -
Java Web 项目前端推荐方案 Bootstrap+Sitemesh+Struts2
最近的参与的Java B/S管理系统,前端的的解决方案是:Bootstrap + Sitemesh + Struts2. 效果非常不错。关于Bootstrap主题,用的是 https://wrapbootstrap.com/ 的商业主题,物美价廉;关于Sitemesh框架,Sitemesh是由一个基于Web页面布局、装饰及与现存Web应用整合的框架;关于Struts2框架,这个自然不必多说,经典M...原创 2013-11-28 23:40:25 · 4879 阅读 · 1 评论 -
Java EE 常用开发工具总结
半年以来,自己参与了两个Java EE的项目,一个是学校的项目做WebService,另一个是企业的项目做的是B/S管理系统。两个项目给我最大的感受就是,企业的项目标准和质量比学校的高很多,难度也大很多。学校的项目我用的是MyEclipse 10.0,Hibernate配置等还是用xml配置文件,没有用注解,Spring 基本没有使用,没有用JUnit进行单元测试,没有使用SVN版本控制工具,代码...原创 2013-11-27 11:06:04 · 3665 阅读 · 0 评论 -
Python 爬虫批量下载美剧 from 人人影视 HR-HDTV
本人比较喜欢看美剧,尤其喜欢人人影视上HR-HDTV 的 1024 分辨率的高清双字美剧,这里写了一个脚本来批量获得指定美剧的所有 HR-HDTV 的 ed2k下载链接,并按照先后顺序写入到文本文件。这个 python 爬虫比较短,就用到了 urllib.request 和 re 这两个模块,前者负责抓取网页,后者负责解析文本。想进一步加强爬虫的功能,可以用爬虫框架 Scrapy。还有就是,网页内容多是 javascript 生成,就需要一个 js 引擎了,PyV8 可以拿来试试,再有就是基于 js 的爬虫原创 2014-10-11 20:10:05 · 10875 阅读 · 0 评论 -
Python 专用方法和迭代机制
Python 设计哲学是“优雅”、“明确”、“简单”,对于一件事只用一种最好的方法来做,而这种优雅在于背后很自然的隐藏了很多细节。比如对一些对象直接用for 语句来迭代,一些全局函数可以作用于很多具有共同特征的对象,还有生成器装饰器自省等特性。其中很多实现都是借助 Python 内部专用方法,而对外则使用统一的全局函数来进行操作,在配合一些语法糖,使得 Python 写起来愈发的方便,符合人的直觉。原创 2014-09-15 14:21:15 · 2702 阅读 · 0 评论 -
Java 和 Python 的 Socket 通信
网络上两个程序通过一个双向通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket支持的协议有多种,这里主要介绍基于 TCP/IP 协议族的 Socket 编程。首先,IP协议族决定了socket的地址类型,在通信中必须采用对应的地址。AF_INET(AF 表示 Adress Family)表示要用 ipv4 地址(32位)与端口号(16位)的组合。然后,根据传输协议又分为:流式 Socket(SOCK_STREAM) 和数据报式 Socket(SOCK_DGRAM):流式 SOC原创 2014-07-04 20:43:44 · 8470 阅读 · 0 评论 -
PyCharm (Python IDE) 在win7 下的推荐设置
最近学习Python,刚开始可以用自带IDLE, 但是调试总归不太方面,这里推荐PyCharm,最好的Python IDE(知乎的一个问答)。对于想在Windows入门Python的同学,这里推荐安装ActivePython,自带了许多Windows环境下必备的库,非常的方便。这里在PyCharm的配置中,设置了暗调主题,显示了行号,快捷键风格改了Eclipse风格(适合写Java习惯了Eclip...原创 2013-11-03 17:29:51 · 15985 阅读 · 0 评论 -
Python 读取Win7 环境变量path,写到桌面文本文件
经常在win7中查看系统环境变量path,但是操作总是感觉挺繁琐,最近刚开始学习Python,正好写了脚本可以读取系统环境变量,输出到桌面txt文件中,安装Python后直接运行这个脚本即可,(Python 3.3 版本) 代码:import osimport getpasspath = os.environ['path']path = list(path)filename = 'C:/...原创 2013-11-03 16:09:56 · 3667 阅读 · 0 评论 -
从 Racket 入门函数式编程
一直想学学LISP,今天总算开了个头。现在我学习LISP不是为了马上能够用于实际项目的应用,而是为了学习一下函数式的思维方式,能够更加深入的了解计算的本质,能够更好的用C++, Java, Python等编写程序。更何况,这些主流语言都逐渐增加了函数式编程的特征,C++,Java现在都引入了 Lambda 表达式。如果能够系统学习一下LISP,相信对自己以后掌握这些语言的新特新特征,对自己写JavaScript、Python,对自己了解闭包、高阶函数、Lambda表达式都会有很大帮助。原创 2014-05-16 22:03:51 · 10752 阅读 · 0 评论 -
Node.js 爬虫批量下载美剧 from 人人影视 HR-HDTV
这两天发现了一个叫看知乎的网站,是知乎的苏莉安做的,其中爬虫使用的 Node.js。这里就针对上一篇博客中的美剧小爬虫,改用 nodejs 进行实现一下,体验一下强大的 Node.js。如果之前没有用过 JavaScript,不妨到 http://www.codecademy.com/ 做一下 JavaScript 和 jQuery 的入门练习,快速熟悉一下基本语法,有其他语言基础的话一天时间足够。对其有基本的了解后,就会发现 JavaScript 的两大特点:使用基于原型(prototype)的方式来原创 2014-10-23 21:46:46 · 5415 阅读 · 0 评论