猪哥66

猪哥66 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑

微信搜索:裸睡的猪

个人动态

猪哥66 发布了文章 · 11月16日

Python就业指导

一年一度的金三银四招聘旺季又要到了,最近有很多同学希望我能给他们一些关于python的就业指导;之前出过一期关于java的就业指导,但是并不是很完善,所以希望这期关于python的就业指导能够很全面很详细的聊聊就业的那些事,以下都是猪哥的个人经验和建议,如有偏差还望指正!

一、就业方向

不管做任何事,一开始就有一个方向会让你有很高的效率;大家都听说python几乎无所不能,哪具体有哪些职位呢?

  1. 测试开发工程师
  2. 运维工程师
  3. 后端开发工程师
  4. web开发工程师
  5. 游戏开发工程师
  6. 爬虫工程师
  7. 全栈工程师
  8. 云计算工程师
  9. 教学讲师(可兼职)
  10. 数据分析/挖掘工程师
  11. 算法工程师
  12. 图像识别工程师
  13. 自然语言处理(NLP)工程师
  14. 量化策略工程师
  15. 人工智能相关
  16. 架构师

上面这些只是我所知道的职位,我相信还有很多关于python的职位,你是否已经有心仪的职位?

这几年招聘我感觉最大的变化是:相比过去现在招聘java或其他语言岗位时,很多都会要求面试者会一些python,不信你可以去招聘网上看看;

二、岗位要求

在选择完就业方向或者学习方向之后,我们需要具备什么能力或学习哪些知识之后就可以去找工作了呢?

因为技术的不断更新迭代,各种框架流行,想要知道当下需要学习哪些知识点可以直接去招聘上看看岗位要求,这里我列举几个和大家一起分享:

python测试开发工程师:


  • 熟练掌握 python ,熟悉 pytest
  • 熟练掌握 linux 命令,具备 shell 脚本开发能力* 熟悉交换机基本配置命令

python web开发工程师:


  • 熟悉 linux 的基本操
  • 至少熟悉一种 python 后端框架: flask / django 等
  • 掌握一种主流数据库( Mysql / MongoDB )的开发和实现原理,具备数据库设计经验
  • 熟悉 tcp / ip 协议、 http 协议,掌握 Web 开发相关技术
  • 精通 django 开发的优先

python爬虫工程师:


  • 熟悉一种开源爬虫框架,如 scrapy 、 webmagic 、 nutch 、 heritrix
  • 理解 http 协议,熟悉 HTML 、 DOM 、 XPath
  • 加分项:有大规模分布式海量数据处理经验优先(如 Hadoop / Hbase / Spark / Flink / Hive 等)有移动端抓取经验有爬虫框架开发经验熟悉反爬虫、验证码识别技术有数据仓库相关开发和使用经验有机器学习相关应用经验

python量化交易工程师:


  • 强学术背景,对数学,统计,算法基础扎实。尤其是随机微机分,随机过程,偏微分方程,统计概率,线性代数等
  • 熟练使用python、数据结构、算法等
  • 对神经网络,机器学习了解,包括但不仅限于:逻辑回归/支持向量机/高斯朴素贝叶斯/随机森林
  • 熟悉数字货币交易相关知识者优先
  • 有独立研发做事策略,统计套利,金融衍生品定价经验优先
  • 数学,物理,统计等理科硕士及以上毕业生,985/211加分。

更多岗位要求大家可以自己去招聘网站上看,就不一一列举。

三、刷面试题

刷面试题这一步是在面试之前必不可少的,相信有很多同学总是会感叹:自己做项目明明都会,可是一到面试的时候面试官一开始总是问一些用不上的知识点,这让我很头疼!其实面试官问这些题目一是考察你对语言及其原理是否有了解,二是考察你解决问题的思维方式,这都是体现你coding能力的重要因素;

有些知识的可能时间一长就忘记了,我们都知道艾宾浩斯遗忘曲线:最初遗忘速度很快,以后逐渐缓慢,所以考前复习是必不可少的;有些准备去bat的同学可能提前几个月就开始刷题,技术面试的好坏决定着你薪资的高低!

废话不多说直接上干货,送大家一份 《Python面试宝典》: 链接:https://pan.baidu.com/s/1ytJD... 提取码: t8tq

四、制作简历

我们经历了漫长的学习和枯燥的刷题,终于可以投简历了,可是却有很多同学发现投出去的简历如同扔进海里的针,几乎都没有人回复你,这又是为何?如果排除你投递职位不符合的话那只能说明你的简历被pass掉了,如何才能避免自己的简历不被hrbp pass呢?hr看简历可能只会看以下几个点:

  1. 学历
  2. 工作经历
  3. 技术栈

由于学历我们很难去包装,所以在写项目经历和技术栈时我们尽量写的高大上一些,这猪哥并不是要你去造假,而是注意技巧和用词,例如参与一个项目时你可以写自己是核心开发,而你在写技术栈的时候也可以多些一些,比如:熟练使用python,熟悉js,html,sql等,了解hadoop等大数据知识,具有高并发,高可用思想;

对于那些你不熟悉的知识,可以临时突击下,然后用了解、理解等等这些词,即使面试官问你你答不上来的时候也没关系,毕竟你只是说了解,过了简历塞选这关才是你的目的!

关于技术栈的编写大家可以参照企业招人的要求,比如xxx公司招人要求如下:

最简单我就按照他这几点要求写,然后再多送几个技术栈,相信hr看见你的简历都会有种似曾相识的感觉:确认过眼神,这是对的简历!

聊了这么多,简历模版再送一波:链接:https://pan.baidu.com/s/15yO7... 密码:sic3

五、投递简历

投递简历难道也有技巧吗?不就是在各个招聘app上投吗?

其实投简历的方式有很多种,先给大家说说在各个招聘app上投:58上有很多培训机构伪装为公司,然后你去了才发现他们要你报名培训,所以我基本不用;大街拉钩的话最近几年也慢慢不行了;一般用的话就是boss和智联招聘,而智联招聘出现过用户信息被卖的事情,所以现在基本用的最多就是boss;当然还有一个软件大家也可以逛逛:脉脉,这里会有技术人员直接发帖招聘,很多都是名企的程序员。

除了招聘网站投递,还有就是官网投递和内推,内推是双方都获利的方式,因为他内推你如果入坑成功他会有奖励金!

当然如果你在圈子中慢慢有了影响力,自然会有人找上门!

六、面试技巧

历经千辛万苦我们终于等来了面试机会,那面试的流程是怎样的呢?

首先我们来看下一般大厂的面试流程:

  1. 电话初面:自我介绍,然后聊语言原理,流行框架实现原理,最后聊聊项目;注重细节和原理,可能会有一到两次电话面试;
  2. 技术面谈:自我介绍,算法,项目,聊的知识面比较广;可能存在交叉面试(所谓交叉面试就是其他部门主管来面,避免裙带关系);
  3. 高管复试:他们最后的高管复试会涉及到相关的技术问题,大部分是对你的整体价值观做宏观的把控(比如上进心,责任心,心态,工作激情等)
  4. 基本就是从大方向了解一下您的心态、抗压能力,工作中的角色、未来大致的规划以及对公司的意向度

其次我们来看看每一步需要注意的点:

  • 在你接到心仪公司的电话面试时,你内心肯定是很激动的,这时候你需要确定你周围环境以及自己的状态是否合适面试,如果不适合的话可以和面试官说现在不方便能否推迟一点或约个时间,阿里电话面试一般会在晚上7-8点,这个时间比较合适。
  • 面试一般开始都会让你做一个简短的自我介绍,所以你可以之前准备一份简短的自我介绍然后背下来,说的时间最好控制在一分钟左右;
  • 技术面试没什么好说的,都是实打实的;说一下最后hr面试吧,如果你技术过了的话一般hr这关没什么问题,但和hr交流时需要注意技巧避免被套路,比如:hr肯定会问你在上一家公司的工资,这时候你可以说:公司有规定不允许向外透露公司的薪资结构;如果非要你说你也可以适当提高,他会根据你当前薪资做参考;即使后面需要你提供银行流水或薪资证明也是有办法的,大胆一点!

最后,猪哥想要告诉你的是:每一次面试都是一次与面试官之间的较量,谁掌握主动谁就在这次较量中胜出,而在面试中作为面试者很难去主动,那如何才能掌握主动呢,以下是我积累的几点小技巧: - 在与面试官第一次接触时主动询问他贵姓,以这种主动提问的方式来开始此次面试,这也是一种有礼貌的体现; - 在答题过程中尽量将知识点引向自己擅长的方向 - 如果面试中存在自己确实不了解的知识点可以大胆向面试官提问,这是一次难得的交流解疑答惑的机会,会给面试官一个谦虚好学不懂就问的好印象

总结

如果你面试成功,那么我恭喜你;如果你面试失败,我会由衷的替你开心,因为只有失败你才会去总结自己的缺点;

给大家讲一讲猪哥第一次面试经历,那是在我大三暑假的时候,因为自己当时也是个小萌新,所以肯定被pass了,而hr当着我的面把我的答题纸和简历撕掉扔到垃圾桶里,那次对我打击太大了!那个暑假我没回家,我把qq和微信都卸载了,一个人在寝室开始走上自学java之路。在经历半年自学之后工作也找到了,而且实习期间就是小组长,大四还参加了一个全国算法比赛虽然拿了第三但是自己并不满意。

声明下猪哥是三本学校并且成绩不好尤其是英语超烂的那种,学的是通信工程,所以也是自学编程入门,给大家讲这个故事是想让大家自信起来,勇敢的去面对每一次面试!坚信自己去新公司是去技术扶贫!!!

最后再送一波老男孩的就业指导视频:链接:https://pan.baidu.com/s/1VX2b... 密码:ypd1

希望您能学有所成!!!

查看原文

赞 0 收藏 0 评论 0

猪哥66 发布了文章 · 11月16日

Python学习路线

此视频资源收集于网络,如有侵权请联系删除!!! 此视频资源仅用作个人学习,请勿用于商业获利,造成后果自负!!!

经历长达近一个月的资源筛选过程终于结束,总共1.5T百度网盘的资源经过:去重、筛选、整理、归档之后一份粗略的Python学习曲线资源已经成型,虽然中间经历了很多坎坷,不过最终还是完成,猪哥也是第一时间与大家分享出来。

资料主要分为两部分:一、各个学习网站论坛等,二、百度云资料。网站论坛资源更新快,可以与大家互动;而百度云资源主要为视频,方便大家下载和在线观看,两种资源结合使用,学习和查找知识更方便!

一、网站论坛学习资源

  1. 名称链接说明实验楼:https://www.shiyanlou.com 提供免费的Linux实验环境
  2. Py资源中文大全:http://t.cn/Rq0C0ET 各种python包和管理工具
  3. PEP8 Py编码规范中文版:https://dwz.cn/30uIzs9W 代码规范与基础同样重要
  4. PEP20著名的Py之禅:https://dwz.cn/r2u2zV0c Py编程和设计的指导原则
  5. Google Py编程风格指南:https://dwz.cn/HDTKsCai 实践出真知
  6. Py Code Examples:https://dwz.cn/dawtruYk 精细到方法级别的代码案例
  7. Py Module of the Week:https://pymotw.com 每篇介绍一个 Py标准库的使用
  8. 菜鸟教程:http://t.cn/RLGeMuW 最经典的一个语言教程网站
  9. 廖雪峰Py教程:https://dwz.cn/drygpxjk 大牛带你简单快速入门
  10. Py自动化测试博客:https://dwz.cn/raopItkV 一个自动化测试大佬的博客
  11. Py中文学习大本营:http://www.pythondoc.com 一个不错的Flask学习网站
  12. 刘江的Django:https://dwz.cn/udQayyZY 最适合入门的Django教程
  13. 莫烦Py:https://morvanzhou.github.io 机器学习方面有着不错的造诣
  14. 吴恩达机器学习:https://dwz.cn/F8Aad3DY 网易云课堂(中/英字幕)
  15. 几个Py练习题:https://dwz.cn/ExJnmwOJ 有几个不错的实用练习题
  16. CheckiO:https://py.checkio.org 一个学习Py的有趣网站

二、学习曲线

这个学习曲线是我在某马论坛上看到的,觉得不错就推荐给大家,同时也感谢某马的开源免费精神,猪哥也是受益颇多!

image

三、优质资源

我把这些资源分为了七个不同的阶段,难度是依次递增,其实就是对应上面学习曲线图;

本资源一共800G,永久保存,并且会持续更新,建议大家转发收藏,方便以后查找学习;

这是猪哥推荐的Python学习曲线,基本上是某马的视频教程,这个学习曲线适合零基础的同学:

四、获取方式

  1. 链接:https://pan.baidu.com/s/1gTnXh3cee3LeH6Pb4PrqNg 密码:67c7
  2. 如果链接失效,可在下方留言或者私信猪哥哦,猪哥会及时更新!

五、猪哥有话说

如果你觉得此文章好请分享给你的每一位朋友:也许你一个不经意的善意之举,却是他人人生的一个转折点。

查看原文

赞 25 收藏 19 评论 6

猪哥66 发布了文章 · 8月15日

Pycharm、Idea、Goland 官方汉化来了

作为软件开发的编辑器,不得不提大名鼎鼎的 JetBrains 公司,其出品的软件:Pycharm、Idea、WebStorm、phpstorm、CLion、RubyMine、AppCode、DataGrid,目前来讲都是最受欢迎的!

可是由于软件都是英文的这对于一些新手来说很不适应,于是有很多人开始寻找汉化教程。

在官方没有出汉化插件之前,一直都用的是 平方X 的汉化教程,但是汉化必须要跟随这新版本的迭代,所以有些汉化难免不匹配或者会出现 无法点击 设置 的问题。

在Idea 2020.1 版本的新功能中,我们看到了 官方的汉化插件出现,这样极大的方便了新手的汉化,下面猪哥就给大家截图看看如何汉化吧!
在这里插入图片描述

具体步骤:
打开pycharm左上角的file(文件) > 选择settings(设置) > 打开plugins(插件) > 搜索chinese(中文插件),下载好后重启pycharm。

mac系统是 :Preferences > plugins(插件) > 搜索chinese(中文插件),下载好后重启pycharm。

看看汉化后的效果:
在这里插入图片描述

查看原文

赞 0 收藏 0 评论 0

猪哥66 发布了文章 · 4月2日

Python正则表达式,这一篇就够了!

之前我们讲解了 正则表达式语法 的起源、发展、流派、语法、引擎、优化等相关知识,今天我们主要来学习一下 正则表达式在 Python语言 中的应用

大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中关于 正则表达式的函数。
在这里插入图片描述
re模块主要定义了9个常量、12个函数、1个异常,每个常量和函数猪哥都会通过实际代码案例讲解,让大家能更直观的了解其作用!

注:为避免出现代码格式错乱,猪哥尽量使用代码截图演示哦。

一、re模块简介

聊到Python正则表达式的支持,首先肯定会想到re库,这是一个Python处理文本的标准库

标准库的意思表示这是一个Python内置模块,不需要额外下载,目前Python内置模块大概有300个。可以在这里查看Python所有的内置模块:https://docs.python.org/3/py-...

因为re是内置模块,所以不需要再下载,使用时直接引入即可:

import re

re模块官方文档:https://docs.python.org/zh-cn...
re模块库源码:https://github.com/python/cpy...

二、re模块常量

常量即表示不可更改的变量,一般用于做标记。

re模块中有9个常量,常量的值都是int类型!
在这里插入图片描述
上图我们可以看到,所有的常量都是在RegexFlag枚举类来实现,这是在Python 3.6做的改版。在Python 3.6以前版本是直接将常量写在re.py中,使用枚举的好处就是方便管理和使用!
在这里插入图片描述

下面我们来快速学习这些常量的作用及如何使用他们,按常用度排序!

1. IGNORECASE

语法: re.IGNORECASE 或简写为 re.I

作用: 进行忽略大小写匹配。

代码案例:
在这里插入图片描述
在默认匹配模式下大写字母B无法匹配小写字母b,而在 忽略大小写 模式下是可以的。

2. ASCII

语法: re.ASCII 或简写为 re.A

作用: 顾名思义,ASCII表示ASCII码的意思,让 \w, \W, \b, \B, \d, \D, \s\S 只匹配ASCII,而不是Unicode。

代码案例:
在这里插入图片描述
在默认匹配模式下\w+匹配到了所有字符串,而在ASCII模式下,只匹配到了a、b、c(ASCII编码支持的字符)。

注意:这只对字符串匹配模式有效,对字节匹配模式无效。

3. DOTALL

语法: re.DOTALL 或简写为 re.S

作用: DOT表示.,ALL表示所有,连起来就是.匹配所有,包括换行符\n默认模式下.是不能匹配行符\n

代码案例:
在这里插入图片描述
在默认匹配模式下.并没有匹配换行符\n,而是将字符串分开匹配;而在re.DOTALL模式下,换行符\n与字符串一起被匹配到。

注意:默认匹配模式下.并不会匹配换行符\n

4. MULTILINE

语法: re.MULTILINE 或简写为 re.M

作用: 多行模式,当某字符串中有换行符\n,默认模式下是不支持换行符特性的,比如:行开头 和 行结尾,而多行模式下是支持匹配行开头的。

代码案例:
在这里插入图片描述
正则表达式中^表示匹配行的开头,默认模式下它只能匹配字符串的开头;而在多行模式下,它还可以匹配 换行符\n后面的字符。

注意:正则语法中^匹配行开头、\A匹配字符串开头,单行模式下它两效果一致,多行模式下\A不能识别\n

5. VERBOSE

语法: re.VERBOSE 或简写为 re.X

作用: 详细模式,可以在正则表达式中加注解!

代码案例:
在这里插入图片描述
默认模式下并不能识别正则表达式中的注释,而详细模式是可以识别的。

当一个正则表达式十分复杂的时候,详细模式或许能为你提供另一种注释方式,但它不应该成为炫技的手段,建议谨慎考虑后使用!

6.LOCALE

语法: re.LOCALE 或简写为 re.L

作用: 由当前语言区域决定 \w, \W, \b, \B 和大小写敏感匹配,这个标记只能对byte样式有效。这个标记官方已经不推荐使用,因为语言区域机制很不可靠,它一次只能处理一个 "习惯”,而且只对8位字节有效。

注意: 由于这个标记官方已经不推荐使用,而且猪哥也没使用过,所以就不给出实际的案例!

7.UNICODE

语法: re.UNICODE 或简写为 re.U

作用: 与 ASCII 模式类似,匹配unicode编码支持的字符,但是 Python 3 默认字符串已经是Unicode,所以有点冗余。

8. DEBUG

语法: re.DEBUG

作用: 显示编译时的debug信息。

代码案例:
在这里插入图片描述

虽然debug模式下确实会打印编译信息,但猪哥并不理解这是什么语言 以及表达的含义,希望了解的朋友能不吝赐教。

9.TEMPLATE

语法: re.TEMPLATE 或简写为 re.T

作用: 猪哥也没搞懂TEMPLATE的具体用处,源码注释中写着:disable backtracking(禁用回溯),有了解的同学可以留言告知!
在这里插入图片描述

10. 常量总结

  1. 9个常量中,前5个(IGNORECASE、ASCII、DOTALL、MULTILINE、VERBOSE)有用处,两个(LOCALE、UNICODE)官方不建议使用、两个(TEMPLATE、DEBUG)试验性功能,不能依赖。
  2. 常量在re常用函数中都可以使用,查看源码可得知。在这里插入图片描述
  3. 常量可叠加使用,因为常量值都是2的幂次方值,所以是可以叠加使用的,叠加时请使用 | 符号,请勿使用+ 符号!在这里插入图片描述

最后来一张思维导图总结一下re模块中的常量吧。
在这里插入图片描述

三、re模块函数

re模块有12个函数,猪哥将以功能分类来讲解;这样更具有比较性,同时也方便记忆。

1.查找一个匹配项

查找并返回一个匹配项的函数有3个:search、match、fullmatch,他们的区别分别是:

  1. search: 查找任意位置的匹配项
  2. match: 必须从字符串开头匹配
  3. fullmatch: 整个字符串与正则完全匹配

我们再来根据实际的代码案例比较:

案例1:
在这里插入图片描述
案例1中search函数是在字符串中任意位置匹配,只要有符合正则表达式的字符串就匹配成功,其实有两个匹配项,但search函数值返回一个。

match函数是要从头开始匹配,而字符串开头多了个字母a,所以无法匹配,fullmatch函数需要完全相同,故也不匹配!

案例2:
在这里插入图片描述
案例2删除了text最开头的字母a,这样match函数就可以匹配啦,而fullmatch函数依然不能完全匹配!

案例3:
在这里插入图片描述
案例3中,我们只留下一段文字,并且与正则表达式一致;这时fullmatch函数终于可以匹配了。

完整案例:
在这里插入图片描述
注意:查找 一个匹配项 返回的都是一个匹配对象(Match)。

2.查找多个匹配项

讲完查找一项,现在来看看查找多项吧,查找多项函数主要有:findall函数finditer函数

  1. findall: 从字符串任意位置查找,返回一个列表
  2. finditer:从字符串任意位置查找,返回一个迭代器

两个方法基本类似,只不过一个是返回列表,一个是返回迭代器。我们知道列表是一次性生成在内存中,而迭代器是需要使用时一点一点生成出来的,内存使用更优。

在这里插入图片描述
如果可能存在大量的匹配项的话,建议使用finditer函数,一般情况使用findall函数基本没啥影响。

3.分割

re.split(pattern, string, maxsplit=0, flags=0) 函数:用 pattern 分开 string , maxsplit表示最多进行分割次数, flags表示模式,就是上面我们讲解的常量!

在这里插入图片描述
注意:str模块也有一个 split函数 ,那这两个函数该怎么选呢?
str.split函数功能简单,不支持正则分割,而re.split支持正则。

关于二者的速度如何? 猪哥实际测试一下,在相同数据量的情况下使用re.split函数与str.split函数执行次数执行时间 对比图:
在这里插入图片描述
通过上图对比发现,1000次循环以内str.split函数更快,而循环次数1000次以上后re.split函数明显更快,而且次数越多差距越大!

所以结论是:在 不需要正则支持 且 数据量和数次不多 的情况下使用str.split函数更合适,反之则使用re.split函数。

注:具体执行时间与测试数据有关!

4.替换

替换主要有sub函数subn函数,他们功能类似!

先来看看sub函数的用法:

re.sub(pattern, repl, string, count=0, flags=0) 函数参数讲解:repl替换掉string中被pattern匹配的字符, count表示最大替换次数,flags表示正则表达式的常量。

值得注意的是:sub函数中的入参:repl替换内容既可以是字符串,也可以是一个函数哦! 如果repl为函数时,只能有一个入参:Match匹配对象。

在这里插入图片描述

re.subn(pattern, repl, string, count=0, flags=0) 函数与 re.sub函数 功能一致,只不过返回一个元组 (字符串, 替换次数)。
在这里插入图片描述

5.编译正则对象

compile函数template函数 将正则表达式的样式编译为一个 正则表达式对象 (正则对象Pattern),这个对象与re模块有同样的正则函数(后面我们会讲解Pattern正则对象)。
在这里插入图片描述
template函数compile函数 类似,只不过是增加了我们之前说的re.TEMPLATE 模式,我们可以看看源码。
在这里插入图片描述

6.其他

re.escape(pattern) 可以转义正则表达式中具有特殊含义的字符,比如:. 或者 * ,举个实际的案例:
在这里插入图片描述
re.escape(pattern) 看似非常好用省去了我们自己加转义,但是使用它很容易出现转义错误的问题,所以并不建议使用它转义,而建议大家自己手动转义!

re.purge() 函数作用就是清除 正则表达式缓存,具体有什么缓存呢?我们来看看源码就知道它背地里干了 什么:
在这里插入图片描述
看方法大概是清除缓存吧,我们再来看看具体的案例:
在这里插入图片描述
猪哥在两个案例之间使用了re.purge() 函数清除缓存,然后分别比较前后案例源码里面的缓存,看看是否有变化!
在这里插入图片描述

7.总结

同样最后来一张思维导图总结一下re模块中的函数吧。
在这里插入图片描述

四、re模块异常

re模块还包含了一个正则表达式的编译错误,当我们给出的正则表达式是一个无效的表达式(就是表达式本身有问题)时,就会raise一个异常!

我们来看看具体的案例吧:
在这里插入图片描述
上图案例中我们可以看到,在编写正则表达式中我们多写了一个括号,这导致执行结果报错;而且是在其他所有案例执行之前,所以说明是在正则表达式编译时期就报错了。

注意:这个异常一定是 正则表达式 本身是无效的,与要匹配的字符串无关!

五、正则对象Pattern

关于re模块的常量、函数、异常我们都讲解完毕,但是完全有必要再讲讲正则对象Pattern

1. 与re模块 函数一致

re模块的函数中有一个重要的函数 compile函数 ,这个函数可以预编译返回一个正则对象,此正则对象拥有与re模块相同的函数,我们来看看Pattern类的源码。
在这里插入图片描述
既然是一致的,那到底该用re模块 还是 正则对象Pattern

而且,有些同学可能看过re模块的源码,你会发现其实compile函数 与 其他 re函数(search、split、sub等等) 内部调用的是同一个函数,最终还是调用正则对象的函数!
在这里插入图片描述
也就是说下面 两种代码写法 底层实现 其实是一致的:

# re函数
re.search(pattern, text)

# 正则对象函数
compile = re.compile(pattern)
compile.search(text)

那还有必要使用compile函数 得到正则对象再去调用 search函数 吗?直接调用re.search 是不是就可以?

2. 官方文档怎么说

关于到底该用re模块 还是 正则对象Pattern ,官方文档是否有说明呢?

在这里插入图片描述
官方文档推荐:在多次使用某个正则表达式时推荐使用正则对象Pattern 以增加复用性,因为通过 re.compile(pattern) 编译后的模块级函数会被缓存!

3. 实际测试又如何?

上面官方文档推荐我们在 多次使用某个正则表达式时使用正则对象,那实际情况真的是这样的吗?

我们在实测一下吧

在这里插入图片描述
猪哥编写了两个函数,一个使用re.search函数 另一个使用 compile.search函数 ,分别(不同时)循环执行count次(count从1-1万),比较两者的耗时!

得出的结果猪哥绘制成折线图:
在这里插入图片描述
得出的结论是:100次循环以内两者的速度基本一致,当超出100次后,使用 正则对象Pattern 的函数 耗时明显更短,所以比re模块 要快!

通过实际测试得知:Python 官方文档推荐 多次使用某个正则表达式时使用正则对象函数 基本属实!

六、注意事项

Python 正则表达式知识基本讲解完毕,最后稍微给大家提一提需要注意的点。

1.字节串 与 字符串

模式和被搜索的字符串既可以是 Unicode 字符串 (str) ,也可以是8位字节串 (bytes)。 但是,Unicode 字符串与8位字节串不能混用!

2.r 的作用

正则表达式使用反斜杠('')来表示特殊形式,或者把特殊字符转义成普通字符。

而反斜杠在普通的 Python 字符串里也有相同的作用,所以就产生了冲突。

解决办法是对于正则表达式样式使用 Python 的原始字符串表示法;在带有 'r' 前缀的字符串字面值中,反斜杠不必做任何特殊处理。

3.正则查找函数 返回匹配对象

查找一个匹配项(search、match、fullmatch)的函数返回值都是一个 匹配对象Match ,需要通过match.group() 获取匹配值,这个很容易忘记。
在这里插入图片描述
另外还需要注意:match.group()match.groups() 函数的差别!

4.重复使用某个正则

如果要重复使用某个正则表达式,推荐先使用 re.compile(pattern)函数 返回一个正则对象,然后复用这个正则对象,这样会更快!

5.Python 正则面试

笔试可能会遇到需要使用Python正则表达式,不过不会太难的,大家只要记住那几个方法的区别,会正确使用,基本问题不大。

查看原文

赞 51 收藏 37 评论 5

猪哥66 发布了文章 · 2月23日

GoLand 2020永久激活

注意:本教程补丁来源于https://zhile.io ,如有侵权请联系作者删除!

本项目只做学习研究之用,不得用于商业用途!

本教程适用于GoLand所有版本

2020.2019.11.29 jetbrains公司发布了Go的最强编辑器GoLand 2019.3。本次更新软件消耗更少的CPU和更快的性能,增强了对Go Modules的支持,添加了一组新的快速修复程序,并增强了重构。可以通过Evaluate Expression调用嵌入式字段的方法,并使用Mozilla rr远程调试应用程序。

一、激活前注意事项

  1. GoLand一定要是在官网下载:https://www.jetbrains.com/goland/download/
  2. 本教程适用于GoLand所有版本
  3. 本教程适用于jetbrains全系列产品(Pycharm、Idea、WebStorm、phpstorm、CLion、RubyMine、AppCode、DataGrid)
  4. 不需要修改hosts文件,以及任何配置文件
  5. 如果按照此教程还无法激活,加猪哥微信拉你进激活群图片

二、激活教程

1.下载破解补丁

点击链接 https://pan.baidu.com/s/1v4g_fNTZse7piY9aPXNN9g 下载补丁文件 jetbrains-agent.jar (如果链接失效可关注微信公众号「裸睡的猪」回复激活群,补丁来源于https://zhile.io

图片

2.将补丁放在lib目录

将刚才下载的补丁文件 jetbrains-agent.jar 放置在GoLand安装目录里面的lib目录里面

图片

3.点击试用

将补丁 jetbrains-agent.jar 放置到lib目录后,我们就可以启动软件了。

图片图片

进入到主页面后我们点击 “Evaluate for free”免费试用,最后退出软件自动关闭。

图片图片

4.激活

在点完试用退出后,我们只需要重新再打开GoLand软件就会弹出激活窗口,点击 Install jetbrains-agent for GoLand 按钮就完成激活。

图片图片

5.查看有效期

查看有效期的步骤为点击:Help->About这里可以看到你的GoLand的版本号、许可来源、有效期、以及一些环境

显示你电脑的用户名即表示永久激活成功,如果是 to GoLand Evaluator 则表示没有激活,按照教程再多试几次!

图片

三、激活失败

如果激活失败,可添加猪哥微信拉你入激活群大家帮你解决!

图片

查看原文

赞 1 收藏 0 评论 0

猪哥66 发布了文章 · 2月23日

Idea 2020永久激活

注意:本教程补丁来源于https://zhile.io ,如有侵权请联系作者删除!

本项目只做学习研究之用,不得用于商业用途!

2019.11.28 jetbrains公司发布了Java的最强编辑器IntelliJ IDEA 2019.3。本次更新提供了重大的性能和可用性改进,包括更快的启动,主题和键盘映射插件的更容易安装,增强的VCS工作流以及增加了对微服务框架,MongoDB等的支持。

本教程适用于Idea所有版本

一、激活前注意事项

  1. Idea一定要是在官网下载:https://www.jetbrains.com/idea/download/
  2. 本教程适用于Idea所有版本
  3. 本教程适用于jetbrains全系列产品(Pycharm、Idea、WebStorm、phpstorm、CLion、RubyMine、AppCode、DataGrid)
  4. 不需要修改hosts文件,以及任何配置文件
  5. 如果按照此教程还无法激活,加猪哥微信拉你进激活群(已经加过猪哥微信的请勿重复添加)图片

二、激活教程

1.下载破解补丁

点击链接 https://pan.baidu.com/s/1v4g_fNTZse7piY9aPXNN9g 下载补丁文件 jetbrains-agent.jar (如果链接失效可关注微信公众号「裸睡的猪」回复激活群,补丁来源于https://zhile.io

图片

2.将补丁放在lib目录

将刚才下载的补丁文件 jetbrains-agent.jar 放置在Idea安装目录里面的lib目录里面

图片

3.点击试用

将补丁 jetbrains-agent.jar 放置到lib目录后,我们就可以启动软件了。

图片图片

进入到主页面后我们点击 “Evaluate for free”免费试用,最后退出软件自动关闭。

图片图片

4.激活

在点完试用退出后,我们只需要重新再打开Py

Charm软件就会弹出激活窗口,点击 Install jetbrains-agent for Python 按钮就完成激活。

图片图片

5.查看有效期

查看有效期的步骤为点击:Help->About这里可以看到你的Idea的版本号、许可来源、有效期、以及一些环境

显示你电脑的用户名即表示永久激活成功,如果是 to Idea Evaluator 则表示没有激活,按照教程再多试几次!

图片

三、激活失败

如果激活失败,可添加猪哥微信拉你入激活群大家帮你解决!

图片

查看原文

赞 2 收藏 1 评论 0

猪哥66 发布了文章 · 2月22日

HTTP详解

爬虫又称网络爬虫,所以在讲解爬虫之前,我们有必要了解一下什么是网络?网络是由若干节点和连接这些节点的链路构成,然后网络与网络之间所串连成的庞大网络叫做互联网,而我们今天要讲的HTTP(HyperText Transfer Protocol 超文本传输协议)是互联网上应用最为广泛的一种网络协议,它是由万维网协会(World Wide Web Consortium)制定发布。

文章主要以一次HTTP请求的整个过程来讲解(DNS解析不讲):HTTP起源、TCP/IP协议、建立TCP连接、客户端请求、服务端响应、断开TCP连接,文章最后还捎带讲了与HTTP相关知识。文章较长,建议收藏或转发后阅读!
在这里插入图片描述

一、简介

1.起源

今天我们能够在网络中畅游,都得益于一位计算机科学家蒂姆·伯纳斯·李的构想。1991年8月6日,蒂姆·伯纳斯·李在位于欧洲粒子物理研究所(CERN)的NeXT计算机上,正式公开运行世界上第一个Web网站(http://info.cern.ch ),建立起基本的互联网基础概念和技术体系,由此开启了网络信息时代的序幕。
在这里插入图片描述
伯纳斯·李的提案包含了网络的基本概念并逐步建立了所有必要的工具:

  1. 提出HTTP (Hypertext Transfer Protocol) 超文本传输协议,允许用户通过单击超链接访问资源;
  2. 提出使用HTML超文本标记语言(Hypertext Markup Language)作为创建网页的标准;
  3. 创建了统一资源定位器URL (Uniform Resource Locator)作为网站地址系统,就是沿用至今的http://www URL格式;
  4. 创建第一个Web浏览器,称为万维网浏览器,这也是一个Web编辑器;
  5. 创建第一个Web服务器http://info.cern.ch)以及描述项目本身的第一个Web页面。

2.特点

HTTP 协议一共有五大特点:

  1. 支持客户/服务器模式。
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
  3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
  4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  5. 无状态:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息(Cookie和Session孕育而生,后期再讲)。

二、TCP/IP协议

我们经常听到一句话就是:HTTP是一个基于TCP/IP协议簇来传递数据

如何理解上面那句话?我们来看看TCP/IP四层模型就明白了。
在这里插入图片描述
从上图我们可以清晰的看到HTTP使用的传输层协议为TCP协议,而网络层使用的是IP协议(当然还使用了很多其他协议),所以说HTTP是一个基于TCP/IP协议簇来传递数据

同样我们可以看到ping走的ICMP协议,这也就是为什么有时候我们开vps可以上网,但是ping google却ping不通的原因,因为走的是不同的协议。

那TCP/IP协议簇大致是如何工作的,我们再来看看下图:
在这里插入图片描述
我们可以看到在数据发送端是一层一层封装数据,数据接收端一层一层拆封,最后应用层获得数据。

三、建立TCP连接

我们知道了TCP/IP协议簇大致的工作原理之后,我们来看看HTTP是如何建立连接的。

1.TCP包头信息

前面咱们讲过HTTP是一个基于TCP/IP协议簇来传递数据,所以这HTTP建立连接也就是建立TCP连接,TCP如何建立连接,一起来看看TCP包信息结构吧。
在这里插入图片描述
TCP报文包=TCP头信息+TCP数据体,而在TCP头信息中包含了6种控制位(上图红色框中),这六种标志位就代表着TCP连接的状态:

  1. URG:紧急数据(urgent data)---这是一条紧急信息
  2. ACK:确认已收到
  3. PSH:提示接收端应用程序应该立即从tcp接受缓冲区中读走数据
  4. RST:表示要求对方重新建立连接
  5. SYN:表示请求建立一个连接
  6. FIN:表示通知对方本端要关闭连接了

2.建立连接过程

了解了TCP包头信息之后,我们就可以正式看看TCP建立连接的三次握手了。
在这里插入图片描述
三次握手讲解:

  1. 客户端发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,服务器由SYN=1知道客户端要求建立联机(客户端:我要连接你)
  2. 服务器收到请求后要确认联机信息,向A发送ack number=(客户端的seq+1),syn=1,ack=1,随机产生seq=7654321的包(服务器:好的,你来连吧)
  3. 客户端收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,客户端会再发送ack number=(服务器的seq+1),ack=1,服务器收到后确认seq值与ack=1则连接建立成功。(客户端:好的,我来了)
面试官:为什么http建立连接需要三次握手,不是两次或四次
答:三次是最少的安全次数,两次不安全,四次浪费资源

四、客户端请求

客户端与服务器连接上了之后,客户端就可以开始向服务器请求资源,就可以开始发送HTTP请求了。

1.HTTP请求报文结构

我们之前说过TCP报文包=TCP头信息+TCP数据体,TCP头信息我们已经讲了,现在来讲TCP数据体,也就是我们的HTTP请求报文
在这里插入图片描述

2.HTTP请求实例

来看看实际的HTTP请求例子:
在这里插入图片描述

  1. ①是请求方法,HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT
  2. ②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL
  3. ③是协议名称及版本号
  4. ④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息
  5. ⑤是报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。

请求头参数非常多,猪哥就不一一说明,只说明两个低级的反扒参数:

  1. User-Agent:客户端使用的操作系统和浏览器的名称和版本,有些网站会限制请求浏览器
  2. Referer:先前网页的地址,表示此请求来自哪里,有些网站会限制请求来源

五、服务端响应

服务器在收到客户端请求处理完需要响应并返回给客户端,而HTTP响应报文结构与请求结构体一致。

1.HTTP响应报文结构

在这里插入图片描述

2.HTTP响应实例

在这里插入图片描述

3.响应状态码

响应报文中我们重点关注下:服务器的响应状态码,面试也很容易问到,下面猪哥只列出分类,详细状态码自行上网查找了解。
在这里插入图片描述

六、断开连接

在服务器响应完毕后,一次会话就结束了,请问这时候连接会断开吗?

1.长短连接

是否断开我们需要区分HTTP版本:

  • 在HTTP/1.0版本的时候,客户端与服务器完成一个请求/响应之后,会将之前建立的TCP连接断开,下次请求的时候又要重新建立TCP连接,这也被称为短连接
  • 在HTTP1.0发布仅半年后(1997年1月) ,HTTP/1.1版本发布并带来一个新的功能:在客户端与服务器完成一次请求/响应之后,允许不断开TCP连接,这意味着下次请求就直接使用这个TCP连接而不再需要重新握手建立新连接,这也被称为长连接

注意:长连接是指一次TCP连接允许多次HTTP会话,HTTP永远都是一次请求/响应,会话结束,HTTP本身不存在长连接之说。

早在1999年HTTP1.1就推广普及,所以现在浏览器在请求时请求头中都会携带一个参数:Connection:keep-alive,这表示浏览器要求与服务器建立长连接,而服务器也可以设置是否愿意建立长连接。

2.长连接优缺点

对于服务器来说建立长连接有优点也有缺点:

  • 优点:当网站中有大量静态资源(图片、css、js等)就可以开启长连接,这也几张图片就可以通过一次TCP连接发送。
  • 缺点:当客户端请求一次时候不在请求,而服务器却开着长连接资源被占用着,这是严重浪费资源。

所以是否开启长连接,长连接时间都需要根据网站自身来合理设置。

ps:大家不要小看这一个TCP连接,在一次客户端HTTP完整的请求中(DNS寻址、建立TCP连接、请求、等待、解析网页、断开TCP连接)建立TCP连接占用的时间比还是很大的。

3.断开连接过程

在建立TCP连接时是三次握手,而断开TCP连接是四次挥手!
在这里插入图片描述
在前面讲TCP/IP协议时我们说过标志位:FIN表示通知对方本端要关闭连接了那断开连接为何需要四次挥手呢?这里给大家的课后作业,可以在留言中给出你的理解,看看是否正确。

七、题外话

1.面试必考题:http三次握手、四次挥手

面试官:为何建立连接需要三次握手而关闭连接却需要四次挥手。给大家的课后作业,在留言中给出你的见解!

2.http2.0

在这里插入图片描述
HTTP/1.1已经为我们服务了20年,而HTTP/2.0其实在2015就发布了,但是还没有推广开来,关于HTTP/2.0新特性大家也可以去网上查阅相关资料

3.http&rpc

因为http响应慢请求头体积大等缺点,所以在微服务时代,大家都使用rpc来调用服务,rpc相关概念感兴趣同学自行网上学习。

4.http&https

http还有两个很大的缺点就是明文不能保证完整性,所以目前会渐渐被HTTPS代替,HTTPS知识猪哥下期将会为大家讲解。

更多Python学习教程,可关注猪哥微信公众号「裸睡的猪」获取!

查看原文

赞 7 收藏 6 评论 0

猪哥66 发布了文章 · 2月19日

正则表达式引擎执行原理——从未如此清晰!

目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。

使用正则表达式去匹配字符串Hello World 中的 Hello
伪代码:/Hello/, "Hello World"
输出:Hello

如何写好一篇关于 正则表达式 的文章,我思考了一周的时间,从未有一篇文章能让猪哥如此费神。

因为我觉得正则表达式 :难记忆、难描述、广而深且不受重视,有人说正则表达式既好写也难写!

  1. 好写:无非写一些常用、实用的案例,说实话你们每个人都能写出这种:在网上百度一下然后结合一点自己的实际经验,一篇文章就出来了。
  2. 难写:很多人都认为正则简单,不用记,要用就百度一下。但是绝大多数人了解的只是正则的一个小面,真正的精髓却很少关注!

猪哥希望大家能了解到正则的知识点其实非常非常多,尤其是正则引擎执行原理以及正则优化,这算是正则表达式的进阶知识点,面试中也可能会被问到。
在这里插入图片描述

一、起源与发展

我们在学习一门技术的时候有必要了解其起源与发展过程,这对我们去理解技术本身有一定的帮助!

20世纪40年代:正则表达式最初的想法来自两位神经学家:沃尔特·皮茨与麦卡洛克,他们研究出了一种用数学方式来描述神经网络的模型。

1956年:一位名叫Stephen Kleene的数学科学家发表了一篇题目是《神经网事件的表示法》的论文,利用称之为正则集合的数学符号来描述此模型,引入了正则表达式的概念。正则表达式被作为用来描述其称之为“正则集的代数”的一种表达式,因而采用了“正则表达式”这个术语。

1968年:C语言之父、UNIX之父肯·汤普森把这个“正则表达式”的理论成果用于做一些搜索算法的研究,他描述了一种正则表达式的编译器,于是出现了应该算是最早的正则表达式的编译器qed(这也就成为后来的grep编辑器)。

Unix使用正则之后,正则表达式不断的发展壮大,然后大规模应用于各种领域,根据这些领域各自的条件需要,又发展出了许多版本的正则表达式,出现了许多的分支。我们把这些分支叫做“流派”。

1987年:Perl语言诞生了,它综合了其他的语言,用正则表达式作为基础,开创了一个新的流派,Perl流派。之后很多编程语言如:Python、Java、Ruby、.Net、PHP等等在设计正则式支持的时候都参考Perl正则表达式
在这里插入图片描述

到这里我们也就知道为什么众多编程语言的正则表达式基本一样,因为他们都师从Perl

注:Perl语言是一种擅长处理文本的语言,但因晦涩语法和古怪符号不利于理解和记忆导致很多开发者并不喜欢。

二、语法

完整的正则表达式由两种字符构成:特殊字符(元字符)和普通字符。

ps:元字符表示正则表达式功能的最小单位,如 *^$\d 等等

关于语法部分猪哥并不想过多的讲解,给大家做一个详细的归纳整理,供大家日后快速查找吧!
在这里插入图片描述

如果想系统学习正则表达式的语法部分,猪哥推荐 菜鸟教程:https://www.runoob.com/regexp...
在这里插入图片描述

三、匹配原理

匹配原理是猪哥想要重点讲解的部分,也希望同学们可以认真了解这部分的内容。

很多人觉得开车没必要了解车的构造原理,但是我们学编程的还真的需要了解原理。

因为了解原理,你才能调优,这往往也是初级工程师与中高级工程师之间的差别点之一!

1.执行过程

正则表达是的执行,是由正则表达引擎编译执行的,大致的执行流程猪哥也花了一个流程图给大家看看。
在这里插入图片描述

这里给大家提一点就是:预编译(pre-use compile)

猪哥建议大家在生产环境中使用预编译功能,为什么呢?

以Python语言内置re模块举例:

  1. 通过re.compile(pattern)预编译返回Pattern对象,在后面代码中可以直接引用。
  2. 通过re.match(pattern, text)即用编译,虽然也会有缓存Pattern对象,但是每次使用都需要去缓存中取出,比预编译多一步取操作。

猪哥也通过实际测试来 验证预编译 确实比 即用编译 要快!

pattern = r'http:\/\/(?:.?\w+)+'
text = '<a href="http://www.xxx.com">xxx.com</a>'

在这里插入图片描述

2.引擎

既然正则表达式由执行引擎执行,那我们就来讲讲正则表达式的引擎吧,这一块是重点,希望大家仔细看看,弄懂了理解了才行!

正则引擎主要可以分为基本不同的两大类:

  1. DFA (Deterministic finite automaton) 确定型有穷自动机
  2. NFA (Non-deterministic finite automaton) 非确定型有穷自动机

ps:当然还有一种引擎为:POSIX NFA,这是根据NFA引擎出的规范版本,但因为使用较少所以我们这里也就不重点讲解。

这里需要和大家解释下何为确定型有穷自动机这几个名词:

  1. 确定型与非确定型:假设有一个字符串(text=abc)需要匹配,在没有编写正则表达式的前提下,就直接可以确定字符匹配顺序的就是确定型,不能确定字符匹配顺序的则为非确定型。
  2. 有穷:有穷即表示有限的意思,这里表示有限次数内能得到结果。
  3. 自动机:自动机便是自动完成,在我们设置好匹配规则后由引擎自动完成,不需要人为干预!

根据上面的解释我们可得知DFA引擎 和 NFA引擎 的区别就在于:在没有编写正则表达式的前提下,是否能确定字符执行顺序!

DFA引擎执行原理:
为了大家能很清楚的理解DFA引擎执行原理,猪哥制作了一个简易的动态执行过程图给大家看看
在这里插入图片描述
根据上面的动图我们可以得出DFA引擎的一些特点:

  1. 文本主导:按照文本的顺序执行,这也就能说明为什么DFA引擎是确定型(deterministic)了,稳定!
  2. 记录当前有效的所有可能:我们看到当执行到(d|b)时,同时比较表达式中的db,所以会需要更多的内存。
  3. 每个字符只检查一次:这提高了执行效率,而且速度与正则表达式无关。
  4. 不能使用反向引用等功能:因为每个字符只检查一次,文本零宽度(位置)只记录当前比较值,所以不能使用反向引用、环视等一些功能!

NFA引擎执行原理:
猪哥同样画了一个简易的NFA引擎执行过程图方便大家理解
在这里插入图片描述
根据上面的动图我们可以得出NFA引擎的一些特点:

  1. 文表达式主导:按照表达式的一部分执行,如果不匹配换其他部分继续匹配,直到表达式匹配完成。
  2. 会记录某个位置:我们看到当执行到(d|b)时,NFA引擎会记录字符的位置(零宽度),然后选择其中一个先匹配。
  3. 单个字符可能检查多次:我们看到当执行到(d|b)时,比较d后发现不匹配,于是NFA引擎换表达式的另一个分支b,同时文本位置回退,重新匹配字符'b'。这也是NFA引擎是非确定型的原因,同时带来另一个问题效率可能没有DFA引擎高。
  4. 可实现反向引用等功能:因为具有回退这一步,所以可以很容易的实现反向引用、环视等一些功能!

针对两种引擎的区别,猪哥进行了比较
在这里插入图片描述
关于这两种引擎的总结,猪哥引用《精通正则表达式》书本中的一句话来概括:

DFA(是电动机) 和NFA(汽油机) 都有很长的历史,不过,正如汽油机一样,NFA 的历史更长一些。也有些系统采用了混合引擎,它们会根据任务的不同选择合适的引擎(甚至对同一表达式中的不同部分采用不同的引擎,以求得功能与速度之间的最佳平衡)。 ——《精通正则表达式》

3.回溯

作为绝大多数编程语言都选择的引擎——NFA (非确定型有穷自动机) 引擎,我们当然要再详细了解一下它的精髓——回溯
在这里插入图片描述
动图中,我们可以看到当某个正则分支匹配不成功之后,文本的位置需要回退,然后换另一个分支匹配,而回退这步专业术语就叫:回溯

回溯的原理类似我们走迷宫时走过的路设置一个标志物,如果不对则原路返回,换另一条路。
在这里插入图片描述

回溯机制不但需要重新计算正则表达式文本的对应位置,也需要维护括号内的子表达式所匹配文本的状态(b匹配成功),保存到内存中以数字编号的组中,这就叫捕获组

保存括号内的匹配结果之后,我们在后面的正则表达式中就可以使用,这就是我们所说的反向引用,在上面的案例中只有一个捕获,所以$1=b

回溯陷阱:讲到回溯必须提到回溯陷阱,它导致的结果就是机器CPU使用率爆满(超100%),机器就卡死了。

举个例子:text=aaaaa,pattern=/^(a*)b$/,匹配过程大致是

  1. (a*):匹配到了文本中的aaaaa
  2. 匹配正则中的b,但是失败,因为(a*)已经把text都吃了
  3. 这时候引擎会要求(a*)吐出最后一个字符(a),但是无法匹配b
  4. 第二次是吐出倒数第二个字符(还是a),依然无法匹配
  5. 就这样引擎会要求(a*)逐个将吃进去的字符都吐出来
  6. 但是到最后都无法匹配b

这里的重点就在于 引擎会要求*匹配的东西一点一点吐回,我们假设如果文本长度为几万,那引擎就要回溯几万次,这对机器的CPU来说简直是灾难。

有些复杂的正则表达式可能有多个部分都要回溯,那回溯次数就是指数型。如果文本长度为500,一个表达式有两部分都要回溯,那次数可能是500^2=25万次,这谁受得了!

关于更多更详细的回溯介绍,推荐大家可以阅读《精通正则表达式》这本书!

四、优化

编写巧妙的正则表达式不仅仅是一种技能,而且还是一种艺术。

上面我们了解到,绝大多数的编程语言都采用的是NFA引擎,而NFA引擎的特点是:功能强大、但有回溯机制所以效率慢。所以我们需要学习一些NFA引擎的一些优化技巧,以减少引擎回溯次数以及更直接的匹配到结果!

针对NFA引擎的可优化的点其实挺多的,为了方便大家记忆,猪哥也画幅结构图归纳一下,方便大家收藏细看。
在这里插入图片描述
在面试过程中也许会被问到关于正则的优化,大家记住几点就可以。

五、推荐

上面我们讲解了关于正则表达式的诞生和发展、引擎、优化等知识,但是关于正则表达式的知识点远远不止这些,所以最后猪哥推荐一些好的学习资料,大家有空可以了解学习下。

1.书

推荐正则表达式的书,那必然是《精通正则表达式》 ,目前这本书已经出了第三版,豆瓣评分8.9。

内容虽然稍有啰嗦,但是对于正则新手很友好,唯一不足是Python案例少。
在这里插入图片描述

2.博客

入门:菜鸟教程:https://www.runoob.com/regexp...

3.在线测试工具

https://regex101.com/,这个网站可以选择不同编程语言的正则支持,有语义分析、匹配测试、参考列表等,非常实用。
在这里插入图片描述

4.常用案例

一些简单常用的小案例汇总,菜鸟教程:http://c.runoob.com/front-end...
在这里插入图片描述

最后祝愿大家都能搞定正则表达式,处理文本可以得心应手!

更多优质教程可关注猪哥微信公众号「裸睡的猪」!

查看原文

赞 123 收藏 83 评论 10

猪哥66 发布了文章 · 2月5日

破14亿,Python分析我国存在哪些人口危机!

2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿

猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。

今天我们就来分析一下我们国家的人口数据吧!

一、背景

1.人口突破14亿

2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个省、自治区、直辖市和中国人民解放军现役军人,不包括香港、澳门特别行政区和台湾省以及海外华侨人数)140005万人

也就是说2019年底我国人口突破14亿!

在这里插入图片描述

报告链接:http://www.stats.gov.cn/tjsj/...

2.人口普查年

根据2010年5月12日国务院第111次常务会议通过的《全国人口普查条例》第一章 第八条规定:人口普查每10年进行一次,尾数逢0的年份为普查年度,标准时点为普查年度的11月1日零时。

在这里插入图片描述
也就是说2020年11月将进行第七次人口普查,新中国成立后前六次人口普查分别为:1953、1964、1982、1990、2000、2010年。

ps:有些同学可能会有疑问:十年普查一次,那其他年份人口数怎么得来?在非普查年,当年总人口=上年总人口+当年出生人口-当年死亡人口 而计算得出!

3.全面放开二胎

《中华人民共和国人口与计划生育法修正案(草案)》明确规定,“全面两孩”政策2016年元旦开始即可实施。全面实施一对夫妇可生育两个孩子政策,是中国生育政策的一次历史性调整,实行了36年的独生子女政策全面终止。

二、分析目标

新中国成立70,经历了许许多多的风风雨雨,政策、经济、文化也有很多的变化,人口也随之变化。

人口变化对社会经济发展带来巨大而深远的影响,所以今天我们从多角度来分析我国人口变化:

  1. 人口总数
  2. 男女比
  3. 城镇化
  4. 增长率
  5. 人口结构

三、爬取数据

关于我国人口的数据来源,可以从“国家数据”网站中获取。这是一个由国家统计局提供的网站,里面有很多国家公开的数据信息!
03-国家数据.jpg

1.请求单页数据

在国家数据网站中,有从新中国成立到2018年的人口相关数据。
在这里插入图片描述
在人口数据中,有三项是我们需要的数据:总人口、增长率、人口结构

我们按F12查看一下请求的链接,然后复制链接使用requests请求数据。
在这里插入图片描述
只使用一个简单的get请求,就把数据获取了,而且返回的直接是json数据!
在这里插入图片描述

2.分页数据

我们此次的目的是抓取从新中国至今的所有人口数据,而页面中最多可以获取近20年的数据,所以我们需要分析网页请求中关于分页的参数。
在这里插入图片描述
分析请求参数猪哥发现主要有两个参数:zbsj,分别表示指标时间

在这里插入图片描述
在这里插入图片描述
参数:sj=LAST10,表示近10年,于是猪哥猜想:sj=LAST70 是不是就可以获取70年的数据呢?
在这里插入图片描述
然后我们再将zb参数更换,获取到所有的数据!
在这里插入图片描述

3.保存Excel

获取到数据之后,我们先将数据清洗,提取出我们需要的数据,然后整理保存到Excel中,数据处理方面我们仍然使用 潘大师(pandas)。
在这里插入图片描述
我们来看看保存的excel文件数据。
在这里插入图片描述

4.2019年数据

目前数据唯一的不完整就是没有2019年的数据,因为2019年刚刚完结所以数据还没有登记到网站上,我们只能自己算出来然后补齐。
在这里插入图片描述
猪哥根据2020年1月17日,国家统计局发布了 2019年国民经济报告中关于人口的数据得出了2019年的相关数据。
在这里插入图片描述
来看看完整的70年人口数据。
在这里插入图片描述

四、数据分析

数据保存完毕后我们就可以开始数据分析步骤了,一般在我们数据分析之前我们需要有个思路:要分析什么?从哪些角度分析?选择何种可视化图形?得出了什么结论?(当然实际工作时的分析报告需要更为严谨,但大体思路类似。)

1.总人口

首先我们提取Excel中的“年末总人口”这一列的数据进行分析。
在这里插入图片描述
直接上代码,猪哥先使用潘大师读取Excel,然后再获取总人口的列数据(完整代码请查看源码)。在这里插入图片描述
上面的代码和之前画曲线有点不同的是:添加了自定义曲线背景色和区域色的功能,下次有同学想自定义pyecharts曲线背景就可以参考这里的代码。

在下图中猪哥标注了四个点:

  1. 1949年:新中国成立,总人口 5.42亿
  2. 1980年:计划生育正式开始,总人口 9.87亿
  3. 2016年:全面放开二胎,总人口 13.83亿
  4. 2019年:总人口 14亿

在这里插入图片描述
通过观察总人口曲线图得知:

  1. 人口总体在增加,但增长曲线慢慢放缓,据社科院预测:中国人口将在2029年达到峰值14.42亿,往后逐步下降
  2. 新中国成立至今(2020年)唯一出现人口减少的是1960和1961年,这两年是我国的自然灾害年。在这里插入图片描述
  3. 根据总人口数,我们再来分析一下 执行计划生育生育前31年与 后31年增长的人口分别是多少?

在这里插入图片描述
根据上图我们可以看出:计划生育确实控制了人口的增长!

而放开二胎后并未迎来生育高峰期,联合国相关机构发布的《世界人口展望》2017修订版给出了类似的预期。它倾向于认定中国人口已经开始了倒V型反转,在人口到达高峰后,2050年将会保持13亿多,然后就会加速下滑(低、中、高三种生育率,来自联合国人口基金)。(中国人口趋势预测,分低、中、高三种生育率,来自联合国人口基金)

2.男女人口比例

我们经常会听到别人说:“中国男女比例失衡,将有3000万中国男性娶不到老婆”。

其实这是我国男女比例失衡造成的结果。
在这里插入图片描述

下面猪哥就从以下4个角度来分析我国男女比例的关系:

  1. 2019年男女比
  2. 男性占总人口比例
  3. 男女人口数曲线
  4. 男女人口数差值

在这里插入图片描述
根据上面4图我们可以得出一些结论:

  1. 新中国成立以来男性人口一直比女性人口多,可能与我国重男轻女思想有一定关系。
  2. 男性占比最高是在新中国成立之初为51.96%,最低是在1996年为50.82%。下图是来自快易数据提供的 中国、印度、日本、英国、美国 五国的男性占比图,从图中可以清晰看出中国与印度的男女比一直处于失衡状态。在这里插入图片描述
  3. 2000年我国男女人口差值最大为4131万人,最小差值是在1965年为1718万人。
  4. 2006年以来我国男女比例失衡状况逐年缓解

我国到底有多少男性同胞们会打光棍? 由于篇幅有限,我们下期做一个专题分析这个问题!

3.人口城镇化

有很多同学不理解何为“人口城镇化”,下面猪哥引用百度百科的介绍:

人口城镇化是指农村人口转变为城镇人口、农业人口转变为非农业人口的过程,它是社会生产力发展到一定阶段的产物。

城镇化是一个综合指标,可以用来衡量当地经济发展情况、基础设施和人民生活水平。

同时,城镇化的进程也是房地产市场在需求层面的重要支撑力量,下图是一张人口城镇化与社会发展关系的图。
在这里插入图片描述
根据美国地理学家诺瑟姆对世界各国城市化的研究,世界城市化分为三个阶段:  

  1. 初期(人口城镇化在30%以下):农村人口占优势,工农业生产力水平较低,工业提供就业机会少,农业剩余劳动力得不到释放。  
  2. 中期(人口城镇化30%~70%):工业基础比较雄厚,经济实力明显增强,农村劳动生产率提高,剩余劳动力转向工业,城市人口比重快速突破50%,而后上升到70%。  
  3. 后期(人口城镇化70%~90%):农村人口向城镇人口的转化趋于停止,农村人口占比稳定在10%左右,城市人口可以达到90%左右,趋于饱和,这个过程的城市化不再是人口从农村流向城市,而是城市人口在产业之间的结构性转移,主要是从第二产业向第三产业转移。  

来看看我国人口城镇化数据分析:
在这里插入图片描述
由上图分析可知:

  1. 2019年我国人口城镇化达到60.6%,处于人口城镇化的中期。
  2. 1995年我国乡村人口达到峰值:8.59亿。
  3. 1996年我国城镇化步伐加快,同年城镇化超过30%,进入城镇化的中期。
  4. 在2010年我国城市人口与乡村人口持平约为6.7亿,城镇化为50%。

联合国对中国人口城镇化进程进行了预测:我国城镇化初期是1949年~1995年,中期是1996年~2032年,后期是2033年以后
在这里插入图片描述

4.人口增长率

数据可视化的代码猪哥就不放出来了,想看的同学直接取看源码吧,我们直接看图片。
在这里插入图片描述
由上图得知:

  1. 在自然灾害三年(1959、1960、1961)我国人口死亡率陡增,出生率也下降,人口出现新中国成立以来第一次负增长!
  2. 在自然灾害过后的两年(1962、1963)迎来我国最大的一波生育潮,我们通过2010年人口第五次普查的数据也可以验证这个结论。在这里插入图片描述
  3. 自然灾害三年过后我国的死亡率一直趋于稳定,维持在6-7‰左右。
  4. 我国出生率整体一直在下降,在计划生育之前出生率就在下降。
  5. 在2016年我国全面放开二胎之后的三年(2017-2019),出生率并没有出现好转,反而持续走低。

目前的育龄妇女基本都是85-90后,受计划生育(1980年)影响,育龄妇女人数比以前少了,生孩子的数量自然就比以前少了,这一情况会持续下去。

出生率降低,死亡率增加,人口增长就慢慢放缓,社科院预测在2029年左右我国人口达到峰值(14.42亿)之后慢慢减少!

题外话:猪哥在爬取数据之后,发现 国家数据网站 提供的数据也是有误的:1961年人口比1960年人口下降,而增长率却为整数!
在这里插入图片描述

5.年龄结构

人口年龄结构是衡量 老龄化人口红利 的指标。

老龄化:指老年人口相对增多,在总人口中所占比例不断上升的过程,国际上通常看法是,当一个国家或地区60岁以上老年人口占人口总数的10%,或65岁以上老年人口占人口总数的7%,即意味着这个国家或地区的人口处于老龄化社会。 ——百度百科

老龄化是每个国家每个社会都会经历的阶段,目前来讲发达国家的老龄化问题比发展中国家更严重,据快易数据提供的一份 世界各国老龄化排名来看,中国只排到了65名,第一名是日本,而前几名基本都是欧洲国家。
在这里插入图片描述

人口红利:经济学术语,是指一个国家的劳动年龄人口占总人口比重较大,抚养率比较低,为经济发展创造了有利的人口条件,整个国家的经济呈高储蓄、高投资和高增长的局面。

人口红利简单来说就是 劳动力人口数 大于 非 劳动力人口,劳动人口比例较高,保证了经济增长中的劳动力需求,劳动力资源丰富和成本优势已经使中国成为世界工厂和世界经济增长的引擎。
在这里插入图片描述
从上面三图分析我们可得:

  1. 1982年我国 0-14岁少儿占比33.59%,而2019年减至17.9%,比例减至近半。
  2. 2019年我国65岁以上人口占比为12.57%,已经进入老龄化社会。世界有92个国家进入老龄化,中国排在65。
  3. 2010年我国总抚养比达到最低为:34.2%,意味着每3个劳动力需要养一个老人或小孩。
  4. 人口红利在2010年达到顶峰,之后在慢慢降低。

2019年我国老年人口为1.76亿,中国的老龄化即将进入快速老龄化阶段,目前我国多个省的养老金告急,我国养老金体系改革迫在眉睫。

五、总结

由于篇幅过长,很多分析代码并未放出,如果想学习的同学可以查看源码(https://github.com/pig6/china...)。

我们来总结一下我们今天分析的结果吧:

  1. 总人口:我国总人口稳步增长,据社科院预测:中国人口将在2029年达到峰值14.42亿,往后逐步下降(中国人口趋势预测,分低、中、高三种生育率,来自联合国人口基金)
  2. 男女比例:我国自新中国成立以来,一直处于男多女少的状态中,2019年男女差为3000万。因为老年人中女性多于男女,所以年轻男女的差值应该会更大,下期我们可以专门分析一下:中国将会有多少光棍?在这里插入图片描述
  3. 人口城镇化:2019年我国城镇化超过60%,处于城镇化发展的中期阶段。联合国对中国人口城镇化进程进行了预测:我国城镇化初期是1949年~1995年,中期是1996年~2032年,后期是2033年以后在这里插入图片描述
  4. 人口增长率:我国出生率持续走低,在全面放开二胎之后并未出现生育潮,人口增长慢慢放缓,据社科院预测在2029年人口增长率为0,之后出现负增长,生育率低使得我的老龄化进程加快。在这里插入图片描述
  5. 人口年龄结构:人口年龄结构影响着两个重要的指标:人口红利、老龄化。我国人口红利在2010年达到顶峰,之后慢慢减少。老龄化问题是国际普遍存在的问题,尤其是发达国家。据快易数据显示:2018年全世界有92个国家进入老龄化,排在第一的日本老龄化为:27.58%,我国老龄化排在第65位。但随着时间推移我国即将进入快速老化期,养老问题日益凸显!在这里插入图片描述

总结来说我国人口结构存在两个严峻的问题:

  1. 养老问题:生育率低、劳动力萎缩、老龄化加速、人口即将见顶、人口红利消失、多省养老金告急,需中央补贴!
  2. 剩男问题:计划生育实行后男女人口差拉大,男女失衡,剩男问题严峻,越南买媳妇新闻屡见不鲜!

面对两个严峻的考验,希望有专业人士能为我们国家出谋划策,希望我们的国家早日实现伟大复兴!

数据来源:
1、http://data.stats.gov.cn/easy...
2、http://www.stats.gov.cn/tjsj/...
3、https://www.kylc.com/stats

参考:
1、https://yq.aliyun.com/article...
2、https://mp.weixin.qq.com/s/Sm...
3、https://www.ssap.com.cn/c/201...

源码地址:https://github.com/pig6/china...

更多有趣的分析,可关注猪哥微信公众号「裸睡的猪」!

查看原文

赞 9 收藏 2 评论 5

猪哥66 发布了文章 · 2019-12-18

GoLand 2019.3激活破解教程(永久)

注意:本教程补丁、激活码收集与网络,如有侵权请联系作者删除!

2019.11.28 jetbrains公司发布了Go的最强编辑器GoLand 2019.3。本次更新软件消耗更少的CPU和更快的性能,增强了对Go Modules的支持,添加了一组新的快速修复程序,并增强了重构。可以通过Evaluate Expression调用嵌入式字段的方法,并使用Mozilla rr远程调试应用程序。

本教程适用于GoLand所有版本

一、激活前注意事项

  1. GoLand一定要是在官网下载:https://www.jetbrains.com/go/...
  2. 本教程适用于GoLand所有版本
  3. 本教程适用于jetbrains全系列产品(Pycharm、Idea、WebStorm、phpstorm、CLion、RubyMine、AppCode、DataGrid)
  4. 不需要修改hosts文件,如果修改请移除jetbrains相关的项目
  5. 配置文件修改已经不在bin目录下直接修改,而是通过GoLand修改
  6. 如果按照此教程还无法激活,微信扫描下方二维关注猪哥微信公众号,回复:激活群在这里插入图片描述

二、激活教程

1.下载破解补丁

点击链接 https://pan.baidu.com/s/112tS3XjAENIHaJ-aSCe0dA 下载补丁文件 jetbrains-agent.jar (如果链接失效可关注微信公众号「裸睡的猪」回复激活群)并将它放置到 GoLand安装目录的bin目录下(位置可随意,放这里是怕误操作删除了破解文件,补丁来源于https://zhile.io)。
在这里插入图片描述

2.先点击试用

如果你是刚下载的GoLand,则需要点击激活窗口的“Evaluate for free”免费试用,然后再创建一个空项目,这样就可以进入到GoLand的工作页面

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191218161705261.png?)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.修改配置文件

配置文件修改已经不在bin目录下直接修改,而是通过GoLand修改
配置文件修改已经不在bin目录下直接修改,而是通过GoLand修改
配置文件修改已经不在bin目录下直接修改,而是通过GoLand修改

我们现创建一个空项目
在这里插入图片描述
默认就好
在这里插入图片描述

进入到项目界面后,点击GoLand最上面的菜单栏中的 “Help” -> “Edit Custom VM Options …”。
在这里插入图片描述
如果提示是否要创建文件,请点”Yes”。
在这里插入图片描述
在打开的vmoptions编辑窗口末行添加:-javaagent:你GoLand的安装目录\jetbrains-agent.jar请仔细检查补丁路径是否正确,如果错误则会出现GoLand打不开的情况。
在这里插入图片描述
**修改完配置文件之后切记重启GoLand软件
修改完配置文件之后切记重启GoLand软件
修改完配置文件之后切记重启GoLand软件**

如果修改完打不开软件,或者提示没有jdk等问题,这时候可以删除用户目录下的GoLand文件夹,注意这个文件夹是隐藏目录!

windwos:C:Users用户名\
macos:~/Library/Preferences/
ubuntu:~/.
在这里插入图片描述

4.输入激活码

修改完配置文件之后重启GoLand,点击菜单栏中的 “Help” -> “Register …”
在这里插入图片描述
选择最后一种License server激活方式,地址填入:http://jetbrains-license-server (应该会自动填上),或者点击按钮:”Discover Server”来自动填充地址,完成激活。

注意:服务器激活需要联网!
在这里插入图片描述
如果服务器激活方式无法激活,还可以选择Activation code方式激活,复制下面激活码即可(激活码来源于https://zhile.io)!

激活码激活不需要联网!
在这里插入图片描述

JQE11SV0BR-eyJsaWNlbnNlSWQiOiJKUUUxMVNWMEJSIiwibGljZW5zZWVOYW1lIjoicGlnNiIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IkFDIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IkRQTiIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJQUyIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJHTyIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJETSIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJDTCIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJSUzAiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUkMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUkQiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUEMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUk0iLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiV1MiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiREIiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiREMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUlNVIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9XSwiaGFzaCI6IjEyNzk2ODc3LzAiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-khgsQrnDiglknF0m+yyoYGJXX4vFE3IIVaoMd0bkpfAlMiYM4FUK1JM7uMnVSN0NBC7qtZjYlNzPscEyKE8634uGuY/uToFQnIOCtyUfBxB6j0wF/DcCjhKMNDbnJ1RKZ2VaALuC9B6d6lhtEKm9+urXWTBq7h2VfIBv5wk1Ul9T/m9Dwkz/LccTqnxO0PP288fF13ZbmcLI1/D0dqp/QxYshW6CLR+2Tvk6QCPoaOTKDU/eL1AssD7/mO1g2ZJA+k//8qfRMLgdLmLrMdyiaIhrsM/jJk2qDfTaMcCNylkWXLgKwSvEQG95IhitLN9+GQ4pBW3gOTNl82Gem7jEkA==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5ndaik1GD0nyTdqkZgURQZGW+RGxCdBITPXIwpjhhaD0SXGa4XSZBEBoiPdY6XV6pOfUJeyfi9dXsY4MmT0D+sKoST3rSw96xaf9FXPvOjn4prMTdj3Ji3CyQrGWeQU2nzYqFrp1QYNLAbaViHRKuJrYHI6GCvqCbJe0LQ8qqUiVMA9wG/PQwScpNmTF9Kp2Iej+Z5OUxF33zzm+vg/nYV31HLF7fJUAplI/1nM+ZG8K+AXWgYKChtknl3sW9PCQa3a3imPL9GVToUNxc0wcuTil8mqveWcSQCHYxsIaUajWLpFzoO2AhK4mfYBSStAqEjoXRTuj17mo8Q6M2SHOcwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQBonMu8oa3vmNAa4RQP8gPGlX3SQaA3WCRUAj6Zrlk8AesKV1YSkh5D2l+yUk6njysgzfr1bIR5xF8eup5xXc4/G7NtVYRSMvrd6rfQcHOyK5UFJLm+8utmyMIDrZOzLQuTsT8NxFpbCVCfV5wNRu4rChrCuArYVGaKbmp9ymkw1PU6+HoO5i2wU3ikTmRv8IRjrlSStyNzXpnPTwt7bja19ousk56r40SmlmC04GdDHErr0ei2UbjUua5kw71Qn9g02tL9fERI2sSRjQrvPbn9INwRWl5+k05mlKekbtbu2ev2woJFZK4WEXAd/GaAdeZZdumv8T2idDFL7cAirJwcrbfpawPeXr52oKTPnXfi0l5+g9Gnt/wfiXCrPElX6ycTR6iL3GC2VR4jTz6YatT4Ntz59/THOT7NJQhr6AyLkhhJCdkzE2cob/KouVp4ivV7Q3Fc6HX7eepHAAF/DpxwgOrg9smX6coXLgfp0b1RU2u/tUNID04rpNxTMueTtrT8WSskqvaJd3RH8r7cnRj6Y2hltkja82HlpDURDxDTRvv+krbwMr26SB/40BjpMUrDRCeKuiBahC0DCoU/4+ze1l94wVUhdkCfL0GpJrMSCDEK+XEurU18Hb7WT+ThXbkdl6VpFdHsRvqAnhR2g4b+Qzgidmuky5NUZVfEaZqV/g==

三、查看有效期

当你激活完毕后,GoLand右下角会有个Registration小长条提示框,大致的内容为:You copy is Licensed to XXX意思就会告诉你:兄弟,你已经激活成功了,激活码的许可来源是:XXX。
查看有效期的步骤为点击:Help->About这里可以看到你的GoLand的版本号、许可来源、有效期、以及一些环境
服务器激活是没有期限的,即为永久有效
在这里插入图片描述
如果激活失败,微信扫描下方二维关注猪哥微信公众号:裸睡的猪,回复:激活群
在这里插入图片描述

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 246 次点赞
  • 获得 2 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 2 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2019-08-04
个人主页被 5.1k 人浏览