JWang的博客

一点记录,一点想法,一点思考


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

Golang里面slice初始化的坑

发表于 2020-06-06 | 更新于 2021-12-15 | 分类于 Golang
| 字数统计 1k

相信很多人对Golang里面的数组都不陌生,但实际上99%的场景我们使用的都是slice,原因很简单,Go里面的数组类似C数组长度是固定的,局限太多,而slice则是一个变长的数组,可以自动扩容,类似JS、PHP等弱类型语言里面的数组。

但实际使用slice的过程中,我们一般会遇到2种写法,下面咱们就说说这2种方式的差异和存在的坑:

1
2
3
var s []string

var s = make([]string, 0)
阅读全文 »

详解Linux环境下各种代理设置

发表于 2020-05-30 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 1.9k

做技术的人都知道,有时候为了查询一些信息,必须访问一些国外资源,由于这些资源的服务器位于国外,速度较慢,有时候甚至是根本无法访问(你们懂的),这时候拥有一个VPN或者是代理就非常重要了,这也就是国内大部分人使用代理的主要目的,当然代理还有其它很多好处,比如隐藏自己的IP地址和来源。

首先,咱们常见代理有socks代理和http(s)代理之分,比如socks代理默认端口就是在1080。这2者有啥区别呢?http代理属于应用层代理,类似的还有ftp代理,socks代理与应用层代理不同,socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP请求)。所以,socks代理比其他应用层代理要快得多,目前用的最多的就是socks5代理。

阅读全文 »

疫情之下之口罩乱象

发表于 2020-05-16 | 更新于 2021-01-03 | 分类于 Life
| 字数统计 2.2k

这次疫情出人意料的持续时间长,口罩瞬间成为一种刚需和战略物资,虽然很多人可能不太愿意戴口罩,但是在中国如果你不戴口罩是没法出门的,这是一种强制措施。我国人多,对口罩的需求更大,在前期口罩基本上买不到,不仅需要抢,而且需要拖关系,甚至由于口罩闹出很多丑事,比如武汉红十字会。而且很多人喜欢囤积,假如你有找到了货源,你可能不会只买1个,你会买未来2个月的用量,那可能就是几百个。

我2月初回北京的时候只戴了一个布口罩,主要是确实没有医用口罩可用,对于我来说,这种口罩完全是形式大于实际意义,但是你如果不戴口罩是没法出门、坐火车,确实很无赖,对于检查人员来说,他们不关心你戴的是什么口罩,只要把脸遮住,哪怕是自己拿布缝的也没问题。

阅读全文 »

Golang第三方测试库GoConvey

发表于 2020-04-13 | 更新于 2020-04-13 | 分类于 Golang
| 字数统计 1.4k

之前写过一篇Go测试的文章,文章介绍的是Go自带的官方测试库,今天来介绍一下一个非常流行的Go第三方测试库GoConvey,其实官方的文档已经写的非常清楚了,有兴趣的可以查看其 Github主页 ,里面有非常详细的介绍,英文好的话可以看看。

阅读全文 »

Free ~ Will

发表于 2020-03-20 | 更新于 2020-03-20 | 分类于 Life
| 字数统计 902

如果现在你说你要去做一款社交软件APP,我大概率会劝你不做,我可能会从市场、资金、成本等多个方面给你分析一通,然后告诉你成功率非常低,你或许认为我总是从最坏的情况考虑,并没有考虑其中的机遇和意外。也许会有人从其它方面分析一通,然后告诉你大有可为,成功率非常高。如果你仔细一想,你会发现两者都有道理,但是只有你真正做了你才能知道哪个是对的,这就像是薛定谔的猫,你只有打开那个盒子才能知道猫是活的还是死的。

阅读全文 »

Ubuntu Nautilus隐藏文件(夹)

发表于 2020-03-15 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 410

如何在Ubuntu自带的文件夹管理器Nautilus里面隐藏文件或文件夹呢?

先说一下背景,之所以想到这个问题是因为我的电脑是 Win10+Ubuntu 双系统,有一块硬盘是共享的NTFS格式,在Windows下面分区会有2个文件夹,了解Windows的人应该知道,这是垃圾回收站和磁盘卷信息。

默认情况下在Windows里面这2个文件夹是隐藏的,但是当我切换到Ubuntu的时候,Ubuntu就会给显示出来了,这倒也正常,但是看起来很碍事,不爽,既然不爽我就要搞它。

阅读全文 »

Golang常见加密算法实现

发表于 2020-03-08 | 更新于 2021-12-15 | 分类于 Golang
| 字数统计 1.8k

说完Go里面的md5的用法,这篇文章咱说说用的比较多的加密方式在Go里面如何实现。首先,科普一下,一般待加密的内容被叫作明文,加密使用的关键元素被称为秘钥,加密的结果被称为密文,当然其中还有一个非常关键的加密算法。

一般加密算法可分为对称加密和非对称加密这两个分类,这两者区别很明显,对称加密是指我们拿到秘钥和密文可以解密出明文,在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

阅读全文 »

Golang计算文件MD5

发表于 2020-03-07 | 更新于 2020-03-09 | 分类于 Golang
| 字数统计 678

前面这篇文章<Golang里面MD5的写法和性能>介绍了如何计算字符串的md5,下面我们来说说如何计算文件的md5。

阅读全文 »

Golang计算MD5的写法和性能

发表于 2020-03-05 | 更新于 2021-01-03 | 分类于 Golang
| 字数统计 1.1k

用过PHP的童鞋知道在PHP里面md5很简单,是一个内置函数,可以直接调用:

1
2
3
4
5
jwang@jun:~$ php -a
Interactive mode enabled

php > echo md5("12345");
827ccb0eea8a706c4c34a16891f84e7b

纠正一个错误的说法,很多人一直把md5叫作加密算法,实际上md5并不是加密,它既不是对称加密,也不是非对称加密,它只是一个摘要函数,一般被用于签名或者校验数据完整性。

虽然现在有文章说不推荐使用md5了,因为碰撞几率比较大,实际上,这个几率非常非常非常低,大只是相对于其它摘要函数来说,纯自然的情况下基本不可能碰撞,虽然可以用工具构造出来,但非常复杂。如果实在不放心,可以用sha1或者sha256,或者两者集合起来用,速度会慢一点,但安全性高一点,总之,md5由于速度快,简单易用,现在用的还是蛮多的。

阅读全文 »

如何高效的学习编程?

发表于 2020-03-03 | 更新于 2021-12-15 | 分类于 Life
| 字数统计 2.2k

今天想聊一聊学习这个话题,理想情况下,每个人都应该有适合自己的一套学习方法和节奏,主要因为不同人对知识的理解和吸收速度不一样,举个非常简单的例子,在网上看视频或者电影,有些人觉得2倍速播放刚刚好,而有些人甚至还要降速才能看明白,才能Get到点。即便如此,我觉得有些学习的经验和方法是可以共享的,虽然它不一定适合所有人。

人一生都在学习,学习不一定是在课堂上,特别是在互联网时代,我们可以随时随地打开手机观看各种课程,尤其是在编程行业,更需要不断持续的学习才能保持竞争力。我也是自学入行编程,期间也看过很多网上的视频教程,平时学习的时候也经常看一些博客教程,可以说现在也基本上是靠自学成长,颇有感触。

阅读全文 »

谈一谈阿里外包工作

发表于 2020-03-01 | 更新于 2020-03-09 | 分类于 Life
| 字数统计 4.8k

之前写过几篇文章名字叫《一个野生程序员的北漂之路》,这篇文章应该算是后续吧,聊聊我如何进阿里外包,主要是结合我的经历和我所了解的一些事实谈谈我的感受和看法,仅供其他朋友参考。

上家公司残局

看过前面文章的人应该知道我上一家公司因为是P2P行业受到打击,目前已经处于立案阶段,整个公司几百员工都失业了,我也不例外。刚开始我对公司还抱有希望,在家休息等待了2周之后我才明白公司是真的没了,自己找工作吧,当时公司为了不仅欠了我们半月工资,而且连社保也没钱缴纳(财务账户被冻结),甚至都无法给员工办理离职(公章被扣押),没人有操心这几百号员工怎么办,但是社保断了对很多人有很大影响,很多人都在问怎么办,最后公司的HR出来告诉我们可以自己找人代缴,但是由考虑到风险,需要员工签一个离职声明,然后公司才可以把社保做减员处理,于是大家争相签离职声明。

阅读全文 »

那些年,318徒步搭车之旅(二)

发表于 2020-02-25 | 更新于 2021-01-03 | 分类于 Life
| 字数统计 900

每个人对旅行都有自己想法或出于各种目的,对于我当时来说,我并不完全是在旅行,只是把工作和对自由的追求结合在一起。但在这几年的旅行中,我都是独自一人踏遍大江南北,期间也遇到很多和我一样一个人出来旅行的人,我虽不善于交际,但是也在途中结识不少,大多萍水相逢,随后结伴而行度过一段时光,最后各奔东西,相忘于江湖。。。

阅读全文 »

那些年,318徒步搭车之旅(一)

发表于 2020-02-12 | 更新于 2021-01-03 | 分类于 Life
| 字数统计 1.4k

那是2015年8月,我在拉萨停留几日,期间逛了下大昭寺、布达拉宫门口等打卡地点,作为一个非宗教人士,我对拉萨的这些宗教文化并无太多感触,也并不觉得灵魂有什么升华。大街上的商店大部分也都是卖着义乌批发制品,他们的售卖对象其实不是游客,而且来自西藏各地的牧民,但我花了100多买了一双山地运动鞋,扔掉了我脚上穿的特步运动鞋,这双运动鞋我在外穿了几个月,虽然也很便宜但是非常轻便,但是过于轻薄,因为我在策划一场没有安排和计划的318之旅,从拉萨坐火车往回走太远,不如走国道再去云南大理转转。

后记,那双鞋质量很差,差的突破预期。。。

阅读全文 »

Golang测试用例编写

发表于 2020-02-10 | 更新于 2020-03-09 | 分类于 Golang
| 字数统计 1.8k

如果你看过很多开源库的源码,你会发现大部分项目都有很多详细的测试代码,一般来说测试覆盖率越高说明这个项目的质量越高,所以好的项目测试是少不了的。很多公司对代码测试覆盖率也有要求,不为别的,只为更好的代码质量。

1.分类

虽然业界有一直开发模式叫做测试驱动开发(TDD),但是了解的人都知道TDD对开发要求太高了,它要求你先写测试用例然后再写代码,需要你写代码之前思考很多,需要大量时间,我实际开发中并没有采用过这种模式,估计国内都应该很少。

我们可以粗略的把测试用例简单划分为2种类型,一种是单元测试,它是针对某个模块、函数、方法的测试,另一种是功能测试(集成测试),它是针对整个项目功能是否可用的测试。举个例子,你写个了Web服务接口,单元测试可能是针对这个接口里面调用的一个函数测试,而功能测试就是测试这个接口是否可用,因为一个接口可能调用了多个函数。

2.单元测试

Golang里面的测试和其它大部分语言的测试不多,只不过表示形式略有不同,比如Go的单元测试通常情况下是和被测试的代码放在一起的,以xxx_test.go命名并且测试的函数名必须以Test开头。

阅读全文 »

你是否真的需要使用Linux?

发表于 2020-02-10 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 2k

自从跨入IT编程行业一直都在使用Linux桌面系统办公(尝试过挺多发行版,最终选择Ubuntu),平时生活也在用,不知不觉已经4年多了,也安利了身边很多人使用Linux,从最早的疯狂折腾到现在追求稳定,其实也颇有感触,闲来无事聊一聊。

我和很多人一样,最早接触的都是Windows系统的电脑,我也一度是Windows的爱好者,记得当年还对XP、IE情有独钟,装系统、优化系统这些事情当年也没少做,也没少折腾,基本上到了打开任务管理器,对里面每一个进程的作用以及关闭某个进程会导致什么问题都了解的地步。而当时我对Linux的印象也停留在黑框框上面,觉得很神秘,对技术要求很高,只在很多电影里面看见黑客会用到,毕竟那会我对OS需求只是到用的地步,并没有接触编程开发。

阅读全文 »

谈谈城市化和农村现状

发表于 2020-02-07 | 更新于 2021-01-03 | 分类于 Life
| 字数统计 2.9k

此次疫情爆发,有人说现在农村最安全,因为农村一般都是自建房,分布零散,而城市里面都在小区里面,住在火柴盒一样的格子楼里面,进出同一个楼道,同一个电梯,被感染的几率大很多。

我从小在农村长大,自始至今,依然是个农村人(户口还在农村),大学之后,基本上都在城里面上班工作,但是过年还是在老家。有时候早上还在车水马龙、遍布高楼大厦的城里面,晚上就来到了农村蛙声一片的田野边,一个是现代化的城市,另一个是传统的农村,感触十分之深。

今天我就聊聊我一些关于农村和城市的事和想法,可能比较零散,纯属回忆!

阅读全文 »

“武汉肺炎”小记

发表于 2020-02-06 | 更新于 2021-01-03 | 分类于 Life
| 字数统计 1.4k

截止我写这篇文章的时候,这次肺炎病毒已经感染了数万人,而且还在持续增长!

每天醒来第一件事情就是打开手机,刷新一下数据,从最开始的几百人、到几千人、再到现在的几万人。。。在这里我想说说自己看到或者了解到的一些社会现象,谈谈自己的感受。

在我的记忆力,2003年还非常遥远,那时候我应该还在上初中,记得那时候学校被封闭,外人不得进出,教室每天早上都会有一股浓厚的消毒水味。

阅读全文 »

一个野生程序员的北漂之路(三)

发表于 2020-01-22 | 更新于 2021-01-03 | 分类于 Life
| 字数统计 2.3k

上篇文章说到我二家公司由于经营不善,濒临倒闭,拖欠工资,最终我选择自离找工作。

2018年03月,这次找工作非常顺序,我请假面了大概5个公司拿到2个offer,最后选择了一家我觉得还可以的公司,xx网,工资15k。

xx网实际上是某大型教育公司下面一个部门的网站,专门面向程序员,并不是公司名字,很多学习编程的同学应该看过他们网站的课程。

之前也看过他们网站的课程,觉得很不错,这个部门有100多人,其中技术40多人,在这家公司的上班体验总体还不错,除了每天早上无聊的站会以及每周周会,公司属于业务驱动型,大多做的一些业务开发。

直到2018年底春节放假那天,技术老大拉我进屋,悄悄告诉我,经过公司决定,你今年没有年终奖,我当时一脸懵逼,问他为什么?

阅读全文 »

一个野生程序员的北漂之路(二)

发表于 2020-01-22 | 更新于 2021-01-03 | 分类于 Life
| 字数统计 2.1k

上篇文章说到我第一家公司因为融资断裂,发不起工资,解散了。这时候我们开发里面一位大佬,这里我称他为Q哥,他也刚进公司不久,如果按职级分,他应该属于高级开发工程师,平时带我们做项目,也会参与开发,毕竟当时公司开发人员不多。

当时他说他有个朋友给他介绍了一个公司,这公司非常缺人,可以直接带我们过去,不用技术面试,他和老板聊好了,我们过去见一下老板就行了。

阅读全文 »

一个野生程序员的北漂之路(一)

发表于 2020-01-21 | 更新于 2021-01-03 | 分类于 Life
| 字数统计 1.9k

虽然2020年已经到来,但是真正象征着新的一年的农历新年才刚刚开始,北漂4年多,IT这条路越走越窄,突然萌生出回家的念头,毕竟年龄也不小,算是90后最早一批奔三的人,还未成家,也谈不上立业。

在此回顾一下这些年在北京这几年的职业生涯,作为一种记录,也算是总结吧!

这些年在北京,工作换了很多个,几乎每年面试一次,微信里面同事倒是加了不少,除了聊的好的几个,大部分再也不联系。住的地方也是一年换一次,住过上下铺、地下室、天通苑、自如、一居室。。。

  • 2016年06月 第一家公司 –> 融资失败、解散
  • 2016年11月 第二家公司 –> 濒临倒闭、欠薪
  • 2018年03月 第三家公司 –> 经营不善、裁员
  • 2019年03月 第四家公司 –> 涉及p2p、查封
阅读全文 »

Hexo+Github搭建免费技术博客

发表于 2020-01-08 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 1.5k

最近想搭建了一个自己的博客网站,经过调研,最终决定使用Hexo+Github的形式搭建,大概花了3个小时的时间,这里简单记录一下过程,备用。

综述

Github提供了一个免费的GIthub Pages功能,简单说就是可以让你存放静态的资源文件,比如css、js、html、image,同时会给你分配一个免费域名,格式:https://xxx.github.io

所以你只需要注册一个Github账号,然后新建一个repository就行了,一毛线都不用花。

由于Github Pages只能托管静态资源,所以像WordPress这类博客肯定是无法运行的,这时候你有2种选择:

  1. 手写静态页面,如果是前端大牛可以尝试这样
  2. 第三方博客工具生成,如Hexo、jekyll
阅读全文 »

解决Golang测试配置文件加载问题

发表于 2019-11-19 | 更新于 2020-03-09 | 分类于 Golang
| 字数统计 843

最近在写Go的项目,使用的框架是Gin,众所周知,Gin是一个比较简单的框架,只提供了核心功能,并没有配置文件模块,所以这块得自己搞了,Go的第三方解析配置的库非常多,无论是ini、yaml、json文件支持都非常好,而且Go的项目一般都是常驻进程的,所以只需要在项目启动的时候解析一次就行可以了。

示例

最简单的办法通常就是定义一个全局的配置变量供其它包使用,在init函数里面初始化加载配置文件,示例如下:

阅读全文 »

浅谈Golang的recover异常处理机制

发表于 2019-11-10 | 更新于 2020-03-09 | 分类于 Golang
| 字数统计 1.6k

1.error

Golang被诟病非常多的一点就是缺少强大方便的异常处理机制,大部分高级编程语言,比如Java、PHP、Python等都拥有一种try catch机制,这种异常捕获机制可以非常方便的处理程序运行中可能出现的各种意外情况。

严格来说,在Go里面,错误和异常是2种不同的类型,错误一般是指程序产生的逻辑错误,或者意料之中的意外情况,而且异常一般就是panic,比如角标越界、段错误。

阅读全文 »

Protobuf入门和实战

发表于 2019-10-22 | 更新于 2020-03-09 | 分类于 Golang
| 字数统计 2.1k

1.简介

Protobuf(Google Protocol Buffer)是 Google公司内部的混合语言数据标准,目前已经开源,支持多种语言(C++、C#、Go、JS、Java、Python、PHP),它是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

说简单点,Protobuf就是类似JSON、XML这样的数据交换格式,当今互联网JSON是最流行的格式了,XML用的也挺多,最初接触到Protobuf是因为gRPC默认使用它作为数据编码,相比于JSON和XML,它更小,更快!

阅读全文 »

GRPC入门和实践

发表于 2019-08-28 | 更新于 2020-03-09 | 分类于 Golang
| 字数统计 2.3k

gPRC

首先,先阐述一个误区,很多人以为gRPC只能go语言使用,以为这个g代表的就是go,其实并不是,这个g应该理解成Google,这个rpc框架是Google出品,不过Go对这个框架的支持确实非常好,看一下官网的介绍:

gRPC is a modern open source high performance RPC framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authentication. It is also applicable in last mile of distributed computing to connect devices, mobile applications and browsers to backend services.

详细的介绍可以参考官网(grpc.io),简单说,gRPC是一个开源的高性能rpc框架。

说到rpc,很多搞微服务的都喜欢用,特别是Java领域,rpc全称 Remote Procedure Call,翻译过来叫远程过程调用,这个翻译并不是特别好理解。

阅读全文 »

短网址原理和实现

发表于 2019-07-09 | 更新于 2020-04-25 | 分类于 Coding
| 字数统计 1.6k

1.背景介绍

相信很多人手机上都收到过一些营销短信,短信里面有时候会附带一些网址,如下图

这些网址往往都是非常短,但是当我们打开之后,如果你仔细观察,中间会有跳转,最终浏览器地址栏显示的网址并不是你短信里面看到的网址,这就是短网址!

阅读全文 »

Ubuntu 下nvidia显卡驱动安装

发表于 2019-07-01 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 1.2k

Linux下面的显卡驱动一直是个麻烦事,主要是独立显卡,特别是(NVIDIA)英伟达的显卡,气的当年祖师爷怒竖中指,虽然很多年过去了,情况有所改变,但也不是特别好!

集成显卡

如果你在Linux下面不打游戏,也不搞深度学习,强烈建议你卸载独立显卡已提高性能,当然前提是你使用的intel带集显CPU,大部分intel自带集显的性能已经能满足了

Intel对Linux支持很好,所以Linux下面的intel集显驱动非常好,内核自带,不需要额外安装,流畅度也挺高,1080p下面60fps不是问题,但是如果你使用4k显示器,intel集显大部分都是带不动。

阅读全文 »

Golang的常用数据结构

发表于 2019-06-19 | 更新于 2020-03-09 | 分类于 Golang
| 字数统计 2.4k

闲着无事,随便写写,初学Go,望各位大神轻喷!Go自带的几个复合数据类型,基本数据类型咱就不说了,大部分语言常见的几种复合数据类型大概有数组、字典、对象等,不同语言叫法不一样,用法也有差异,比如说PHP里面数组其实严格来说不算数组。

阅读全文 »

解决sudo command not found 报错

发表于 2019-06-02 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 387

偶尔发现的一个问题,平时主要使用 Ubuntu 操作系统,有时候安装一些软件会用加一些自定义PATH,往往为了方便都会把配置写到 /etc/environment 里面,这样所有用户包括root都有效:

1
2
3
4
jwang@jwang:~$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
/bin:/usr/games:/usr/local/games:/home/jwang/MyBin:/opt/go/bin"
export GOPATH=/home/jwang/Go
阅读全文 »

Golang的依赖注入简介

发表于 2019-05-15 | 更新于 2020-03-09 | 分类于 Golang
| 字数统计 782

DI - Dependency Injection,即“依赖注入”,是指组件之间依赖关系由容器在运行期决定,与此同时还有一个叫作IOC的词汇,IOC即控制反转。

理论上讲,这2个概念都是基于OOP编程而产生的思想,在OOP编程里面,我们强调对象之间的依赖关系,比如说对象B依赖对象A的某些功能,我们就说B依赖A。

DI毕竟不是Go语言的专利,它是一种编程思想,在很多语言里面都有体现和实现,相信很多具有编程经验的人也有所了解,下面咱们直接开始讲在Go语言里面怎么使用DI。

阅读全文 »

Golang处理TCP“粘包”问题

发表于 2019-05-10 | 更新于 2021-01-06 | 分类于 Golang
| 字数统计 2.2k

1.什么是粘包?

“粘包”这个说法已经被诟病很久了,既然坊间流传这个说法咱们就沿用吧,关于这个问题比较准确的解释可以参考下面几点:

  1. TCP是流传输协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议
  2. TCP没有包的概念,它只负责传输字节序列,UDP是面向数据报的协议,所以不存在拆包粘包问题
  3. 应该由应用层来维护消息和消息的边界,即需要一个应用层协议,比如HTTP

所以,本质上这是一个没有正确使用TCP协议的而产生的问题,有网友说了一句非常形象的话:“打开家里的水龙头, 看着自来水往下流, 然后你告诉我, 看, 自来水粘在一起了, 不是有病?”

阅读全文 »

Ubuntu 4K显示器缩放设置

发表于 2019-05-03 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 1.2k

开头一张图介绍一下我现在日常生活和开发使用的电脑配置:Ubuntu 16.04 + i7-8700k + 1060 + nvme ssd + 32G RAM + 4k显示器,这个配置倒不算很高端,但是开发用体验很高,系统的流畅程度非常高

阅读全文 »

Go面向对象写法

发表于 2019-04-19 | 更新于 2020-03-09 | 分类于 Golang
| 字数统计 866

Go并不是一个类似于Java、C++,或PHP这样内置面向对象语法的操作的语言,在Go里面名义上是没有类(class)这个概念的,但是这并不代表Go不能面向对象,毕竟面向对象只是一种设计思想!

为什么Go并不原生支持面向对象呢?这是一个问题

接下来,我会从面向对象的三大特性封装、继承、多态这个几个方面来讲讲Go是怎么实现的OOP的。

阅读全文 »

忆往事之富士康

发表于 2019-03-23 | 更新于 2021-01-03 | 分类于 Life
| 字数统计 2.9k

讲述2012年去富士康短暂的工作体验,由于年代久远,记忆可能有所偏差,本着回忆和思考的方向,记录一下当时的我,以及现在的我的一些想法。

2012年冬,郑州市公园的菊花正值盛开,我站在马路立交桥下,看见路边有很多民工摆摊,广告牌上面写着装修水电,其实我对这座城市并没有什么想法,不知为什么会停下脚步。

阅读全文 »

详解中间件设计模式

发表于 2019-03-12 | 更新于 2020-03-09 | 分类于 Coding
| 字数统计 1.3k

说到中间件(middleware),很多人应该都听说过,但是大体有2种意思,一种是一些衔接不同软件活系统的中间软件,比如说数据库中间件、消息中间件。另一种是在Web软件开发中代码层面的一种设计模式,比如说用户认证中间件、日志中间件,这些中间件的主要作用就是以一种集中统一、几乎无侵入的的方式去处理用户请求,而今天我们要讲的就是中间件设计模式。

阅读全文 »

Golang字符串处理函数浅析

发表于 2019-02-12 | 更新于 2020-03-09 | 分类于 Golang
| 字数统计 1.3k
很多从PHP转Go的小伙伴经常会怀恋PHP丰富的字符串函数,Go的标准库针对字符串的操作函数虽然不少但是还是不够丰富,很多时候还得自己造,下面我就结合PHP里面字符串的操作函数来说说Go里面怎么实现。 StringGo是强类型语言,有一个单独的字符串类型 string,如果熟悉Go语言的人应该了解string底层是切片,切片底层是数组,所以字符串也叫字符数组。 举个最简单的例子,有一个字符串 12ab34cd56, 我们要获取其第3到第5个字符之间的元素怎么做呢? 熟悉PHP的童鞋可以会想到PHP里面有一个 substr的函数可以做到,但是Go里面呢? 我们打开IDE看一下,其实标准库里面的 ...
阅读全文 »

Web开发中用到的Cache

发表于 2019-02-01 | 更新于 2021-01-03 | 分类于 Coding
| 字数统计 2.2k

1.什么是Cache?

Cache(音: 侃屎),中文称为缓存,缓存可以说是计算机系统里面一味良药,在很多地方的设计都用到了Cache,比如在CPU里面的一级缓存,二级缓存,好的CPU还有三级缓存。硬盘也有缓存,比如一般1T的机械硬盘会有64M的闪存缓存。

在软件系统里面,缓存更是无处不在,比如浏览器本地缓存、网络缓存、CDN缓存、代理缓存…

阅读全文 »

JWT Token的刷新和作废

发表于 2019-01-21 | 更新于 2020-03-09 | 分类于 Coding
| 字数统计 1.6k

之前一篇简单介绍了下JWT的用法,涉及到token的签发和验证。有人说JWT不适合用于替换传统的 session+cookies 机制用于Web应用的用户登录状态维护,很大原因就是这块问题。

虽然之前的案例里面,我们可以成功在登录后获取一个Token,然后访问服务器的时候带着这个Token,服务器就可以知道当前访问的用户Uid了,假设现在有一下需求:

  • 登录后7天不用重复登录

  • 超过30天没有访问网站则需重新登录,否则一直有效

  • 修改密码功能

阅读全文 »

Token 和 JWT Token

发表于 2019-01-03 | 更新于 2020-03-09 | 分类于 Coding
| 字数统计 1.9k

1.Token的用途

在很多计算机系统里面都少不了用户认证这一步骤,最常见的认证就是账号密码认证,也就是注册、登录这一流程。

在现实生活中,人也需要认证,大家应该都有个 身份证,回想一下这个身份证是从哪里来的呢?
办过身份证的应该都知道,一般情况下,身份证需要本人带着 户口本 去 公安局 (不知道现在改了木有?)办理,工作人员在核对了相关信息,确认无误的情况下会给你颁发一个身份证, 有效期 一般是10-20年,在一些需要认证的时候,你就可以拿出身份证 校验 核对身份,比如买火车票,出国,或者办理其它证件.

阅读全文 »

浅谈Golang协程

发表于 2018-12-10 | 更新于 2020-03-09 | 分类于 Golang
| 字数统计 3.4k

前言

学习和使用golang也有一段时间了,golang最近2年在国内很火,提起golang和其它语言最大区别莫过于协程,不过咱今天先不说协程,我先说一下自己的一些理解。

对c熟悉的人应该对go不陌生,它们都属于强类型静态编译型语言,在语法上和PHP这种弱类型动态解释型语言不一样,虽然差异很大,但是基本语法都是差不多,掌握一种语言之后再去学其它语言语法不是什么大问题。

在IT行业,编程语言之争一直是个很热闹的话题,编程语言之间的区别不仅仅在于语法和特性,语法只是表达编程思想的方式,一个编程语言的背后往往是其强大的生态圈,比如c语言之所以经久不衰,那是因为它几乎可以认为是创世纪语言,是当代编程的起点,而PHP则以快速处理文本,快速搭建web网站出名,JS则是浏览器编程的唯一选择,Python拥有的科学计算库是其它语言没有的。

说到go的优点,一般都集中在静态编译、毫秒级GC、简洁、并发并行等特性上面,go是2008年诞生的,由C语言之父设计,相对其它语言来说比较年轻,可以说在设计之初吸收了各大语言的优点。

阅读全文 »

自建梯子访问Google等学术网站

发表于 2018-12-09 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 1.6k

这个话题有点敏感,但是我首先说明一下,此处只做一个记录,网上类似的文章超级多,而且我纯粹是拿来上Google学习用,搞web开发的应该没几个不用Chrome的,Chrome配上Google账号同步简直完美。

阅读全文 »

闲谈Linux桌面系统下常用工具

发表于 2018-12-08 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 1.2k

前言

作为一个编程开发人员,Linux操作系统的诞生就是一个传奇故事,如今Linux内核系统更是遍布在咱们日常生活中各种电子设备,比如智能路由器(openWrt)、安卓手机(Android)、服务器。。。而Linux桌面系统的使用率其实也不低,尤其在国外,毕竟Linux开源免费,而国内由于Windows盗版横行,用Linux的相对来说少一点!

本人使用了一年多的Ubuntu和Mint桌面发行版,主要做PHP开发,今天来谈谈自己经常用的工具,欢迎大家点评!

阅读全文 »

Linux下挂载NTFS硬盘和Samba共享

发表于 2018-12-02 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 1.2k

1.挂载 NTFS 硬盘

讲道理是不建议在Linux下面使用ntfs这种文件系统,Linux有个专用的文件系统ext4,但是为什么这么用呢?主要原因还是为了兼容Windows,ntfs是Windows最常用的文件系统。

还有一种情况是双系统,为了能在Linux和Windows下面都能读取到,只能使用ntfs格式,毕竟Linux对ntfs格式还算是挺友好的,但是Windows对ext4貌似不是那么友好,虽然也有软件能读取,但是麻烦!

阅读全文 »

解决Deepin-Wine-QQ或微信图标Bug

发表于 2018-12-01 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 524

之前写过一篇文章说在Linux下面使用deepin的wine QQ和微信, 虽然这个版本挺好用,但是一直以来有个bug困扰我:QQ和微信的图标都是wine的小图标,一模一样不说,还重叠在一起,当你使用 ctrl+tab 切换应用的时候很头疼,用过的人应该生有感受!

阅读全文 »

Bitmap原理和应用

发表于 2018-11-08 | 更新于 2020-03-09 | 分类于 Coding
| 字数统计 2.3k

问: “有10亿个不重复的无序的数字,如果快速排序?”

原理

面试中经常会问到类似问题,看上去很简单,就是一个排序而已,但是你好好想想大部分排序算法都需要把数据放到内存里面操作,这10亿个数字得占用多少内存?好吧,你可以使用外部排序算法,在磁盘上完成排序!当然这些传统算法肯定是可以解决的,不过这里有一个更好的方案,采用bitmap排序,介绍如下:

bitmap是什么? 大家都知道在计算机中一个字节(byte) = 8位(bit), 这里的bit就是位,数据的最小表示单位,map一般是表示地图或者映射,加一起叫作位图?貌似不太形象

阅读全文 »

科学上网之socks代理转http(s)

发表于 2018-11-03 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 516

从事IT开发行业的总免不了用用Google,看看国外互联网,但是呢有道墙大家都懂的,其中有一种socks5的梯子,一般都是配置浏览器,如何在命令行下也使用呢?有过使用经验的都知道,Linux终端是不走socks代理配置的,除此之外,很多软件或者应用也不支持socks代理设置,但是有一个软件是可以把socks代理转为http代理,这个软件就叫做privoxy,下面简单介绍下这个软件使用:

阅读全文 »

内网穿透之SSH端口转发

发表于 2018-10-03 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 874

1.场景需求:

有些公司喜欢把svn或者git,或者是内部测试服务器放在公司,一般来说,由于NAT的原因,这种访问是单向的,举个例子,我们可以访问百度的服务器,但是百度服务器是没法访问我们电脑的。

由于只能通过公司内网访问,员工回家之后就无法访问了,安全是安全了,但是万一有个需求需要从公司外部访问呢?

对路由器比较熟悉的童鞋会说:“在路由器上作端口映射转发即可”。这个方案确实可以,但是有2个问题,首先,你得能控制路由器并且可以在上面做设置。其次,一般公司的宽带都没有固定ip,这意味着这个公网ip每隔10-20小时就会变动…

阅读全文 »

Mysql主从复制实践

发表于 2018-09-05 | 更新于 2020-03-09 | 分类于 Coding
| 字数统计 1.6k

1.安装

很多人都知道可以用apt或者yum安装,但是实际生产环境很少采用这种方式安装,有些会采用源码编译(据说性能高?),有些会从官网下载编译好的二进制安装包!

为什么不直接用命令安装呢?因为命令安装的位置不同发行版不一样,而且其配置文件存放的位置又各有差异,现实中大部分公司都有一个约定的规则,比如说所有的安装都安装在 /data 目录下,如果需要开机自启,需自行编写脚本,不依赖系统服务。

还有一个重要的原因是因为很多时候数据库是安装在单独的数据库服务器,但是一台电脑比如说32核64G内存这样的配置,是需要安装多个Mysql实例的,用不同的端口区分,这些库可能是不同的项目所用到。

阅读全文 »

Qt-运行-cant't-find-lGL

发表于 2018-09-03 | 更新于 2022-01-13 | 分类于 Linux
| 字数统计 761

实验问题:运行最简单”hello world!”,出现can’t find -lGL的问题

实验阵地: ubuntu14.04+qt5.2

问题分析:
出现该类问题的原因有2个:

(1)没有安装libGL;

(2)libGL没有正确链接。

阅读全文 »

PHP依赖注入和控制反转

发表于 2018-07-13 | 更新于 2020-03-09 | 分类于 Coding
| 字数统计 1.6k

这2个其实都算得上是一种设计模式或者说是一种软件设计思想,目的都是为了增加软件可维护性和扩展性,比如在Java Web框架SpringMVC 和PHP Web框架laravel里面都有应用。

首先得理解什么叫依赖?从宏观上看,得益于开源软件运行的兴起,很多时候我们写项目并不是什么都是从零开始,我们往往会利用很多现成的开源代码进行快速开发,能不重复造轮子最好,所以我们往往依赖很多开源组件。gradle、npm、composer 等工具的部分功能就是解决项目依赖问题。

阅读全文 »
Prev123Next
Ben Jun

Ben Jun

132 日志
6 分类
36 标签
RSS
© 2022 Ben Jun
由 Hexo 强力驱动
主题 - NexT.Gemini
UV PV