关于进程/线程/协程以及一些相关概念的整理

本文涉及到的一些概念 多线程发展史 并发与并行 CPU的密集型(CPU-Bound) IO密集型 (I/O Bound) 各种IO模型 多线程发展史 起因:如何最大化的利用CPU CPU运算速度和IO速度的不平衡一直是计算机优化的一个课题,我们都知道CPU运算速度要以百倍千倍程度快于IO的速度,而在进行任务的执行的时候往往都会需要进行数据的IO(涉及硬盘io,网络io,内存io,cpu缓...

继续阅读 »

关于try catch的理解问题

以下来自于知乎的一位网友对try catch的理解, 并拿之和go的err做比较, 针对try catch说的比较好理解~~ 我们不谈Java的checked exception。这货在其他语言里面并不多见。我们只谈一般的异常处理。好,那么,throw是什么很差的设计么?当然不是。throw再差也比err code强。为什么呢?你仔细想想,throw和return从逻辑上(注意:抽象地从逻辑...

继续阅读 »

游戏中自动寻路算法: A*、NavMesh、WayPoint

注意: 这里可以查看https://github.com/qiao/PathFinding.js各种寻路算法,并查看其在线演示. A*(基础算法) 优点 简单,易于实现 对地图编辑器友好 特定方格的消耗/可通行性易于修改,当然重新加权的方格太多也会影响速度 从游戏地图位置容易映射到方格位置,坐标除以每个网格的边长即可 缺点 对于大型地图,方格属于内存密集型 通常需要对所得的路径进行路...

继续阅读 »

C#高级特性之LINQ(语言集成查询)

什么是linq, 它解决了什么问题 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找、过滤等等常见的任务的时候,我们该如何去做呢? 以前我们可以自己写代码去对集合中的每个对象进行遍历,检查变量的每个字段看其是否满足条件。 LINQ(Language Integrated Query)即语言集成查询, linq可以像SQL一样用来...

继续阅读 »

微信/支付宝个人免签收款方案

项目简介 多用户个人微信/支付宝免签收款方案基本功能列表 服务端 后台登录 添加应用,生成Appid(应用ID), Secret(秘钥), notify_url(开发者服务器), return_url(支付成功后跳转) 接收客户端的支付成功请求API 服务端通知开发者服务器API(失败延迟通知) 订单管理 收款码管理 支付方式(微信/支付宝) 监控端(收款监控,多个方案) [安卓]xp...

继续阅读 »

从0到1构建python web框架

框架功能 第一部分: WSGI(gunicorn)/请求处理程序/路由(简单和参数化) 新建项目gunicorn安装 # 新建项目目录 mkdir longfei cd longfei python -m venv venv # 创建虚拟环境 source venv/bin/activate # 激活虚拟环境 pip install gunicorn # 安装WSGI服务器 项目目录中, ...

继续阅读 »

通俗的理解设计模式-23种设计模式

设计模式的七大原则 开放-封闭原则 通俗:对扩展开放,对修改关闭 单一职责原则 通俗:一个类只做一件事 依赖倒转原则 通俗:程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,而不要用具体类来做这些事情。 迪米特法则(最少知道原则) 通俗:高内聚,低耦合。类对自己依赖的类知道的越少越好。 接口隔离原则 通俗:最小的接口, 互不关联的接口独立出来减少依赖 合成...

继续阅读 »

Python的import详解与模块自动加载

import与sys.path 模块import导入顺序 在 sys.modules 中查找,它缓存了所有已导入的模块, 这里默认在运行前会自动加载内置库. 此变量中包括了解释器的内置库,即在sys.builtin_module_names中搜索,返回第一个找到的结果 在 sys.meta_path 中查找,它支持自定义的加载器 按顺序在sys.path中搜索,排在前面的优先被找...

继续阅读 »

python的魔术方法大全与属性

魔术方法和内建属性 Python中有大量类似__dict__这种以双下划线开头和结尾的特殊成员及“魔法方法”,它们有着非常重要的地位和作用,也是Python语言独具特色的语法之一!重写魔术方法可以实现特殊功能~!当然重写前需明确其使用规则,不然很容易挖坑~ 那么什么是魔术方法(魔法方法) 魔术方法都不需要调用,需要触发!每个魔术方法触发条件都不同 魔术方法都是在python事先定义好的,在...

继续阅读 »

Anaconda是专注于数据分析的Python发行版本

Anaconda是专注于数据分析的Python发行版本,包含了conda、Python等190多个科学包及其依赖项。注意pip和conda是两个不同的东西,它们的包安装地址都不一样,不要混淆了。 为什么选择Anaconda 什么是 conda conda 是开源包(packages)和虚拟环境(environment)的管理系统。 packages 管理:一个类似于pip的包管理工具,不同...

继续阅读 »

Schedule—简单实用的 Python 周期任务调度工具

注意:Schedule主要作用是替代linux系统自带的Crontab命令,用于周期性的执行某个命令。 科普一下任务调度系统 任务调度系统的地位 任务调度系统在数据平台中算是非常核心的组件,相当于指挥部,指挥各个平台上各个组件的运行,并监督任务的运行情况。大数据平台中通常会有很多任务运行,有一个好的任务调度系统可以极大提高效率。 最简单的任务调度系统莫过于linux系统自带的Crontab工...

继续阅读 »

Github进行fork后如何与原仓库同步

如果你提交的 pull request 未被接受且得到回复说:“重新fork”。说明在你fork之后,源仓库又更新了。 通常的做法是,删掉自己fork的库,然后再修改。但是如果fork中有大量已修改的内容时这个方法就不行了。 操作步骤 1、执行命令 git remote -v 查看你的远程仓库的路径。 $ git remote -v origin https://github.com/e2...

继续阅读 »

编程语言中IO流的使用

什么是IO流 java的io是实现输入和输出的基础,都在java.io.*包下。 流(stream)是一种有顺序的,有起点和终点的字节集合 IO流的分类: 按照流的方向区分: 节点流,输入流(往内存中去)、输出流(内存中出来) java.io.InputStream 字节输入流 java.io.OutputStream 字节输出流 按照读取数据方式区分: 处理流,字节流、字符流 java.i...

继续阅读 »

编程语言中高级特性:集合

注意:同样以java为例说明 为什么说集合非常重要 集合可以说是学习 Java 中最重要的一块知识点了,无论做任何业务系统,集合总是最为基础的那块API。 在实际项目中,我们可以发现集合无处不在,因为凡是涉及到数据存储相关的问题都离不开集合,合理的使用集合可以极大的提高存储和检索的效率。集合也是很多数据结构的基础。 集合与集合框架 集合 集合是 Java 提供的一种存储对象的容器,同数组一样...

继续阅读 »

编程语言中高级特性:注解

注意:本文以java为例说明。 什么是注解 Java注解是JDK1.5的新特性,与注释比较类似,不同的是注释是给我们开发人员看的,注解是给代码看的,它是代码层面的解释说明,注解也被称为元数据。注解的使用也很简单,语法规则:@注解名称,比如我们常见的“@Override”。 注解本身没有任何意义,单独的注解就是一种注释,他需要结合其他如反射等技术才有意义。 Java注解它提供了一种安全的类似注...

继续阅读 »

编程语言中高级特性:反射

反射机制 这里以java反射机制加以说明,其他编程语言基本类似。 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 反射机制应用场景 通过配置信息调用类的方法 结合注解实现特殊功能 按需加载jar包或class 逆向代码 ,例如反编...

继续阅读 »

编程语言中高级特性:泛型

什么是泛型,为什么使用泛型 泛型:允许程序员在强类型程序设计语言中在类定义时不会设置类中的属性或方法参数的具体类型,而是在类实例化时(创建对象)再进行类型的定义,会在编译期检查类型是否错误。 使用泛型的目的 可重用,不使用泛型通常相同功能的代码,根据不同传入的参数类型的多少,就的重复写多次。 可扩展,可扩展不同的数据类型 类型安全,实例化时需指定类型,如果使用object代替类型,那么类型...

继续阅读 »

SEO简说

SEO与SEM SEO的发展历程 SEO是搜索引擎优化的意思,通过研究搜索引擎排序规则,使页面达到搜索排名前列的目的,从而达成曝光率。 SEO 的发展主要经历了以下几个发展阶段: 第一阶段:谷歌百度成立初期,SEO刚出现,此时的SEO是各种玄学,缺少理论和科学依据。 第二阶段:搜索引擎算法完善,PC端搜索引擎成了主要流量入口。再加上大量人员进入这个行业导致其野蛮发展,形成了产业链,同时通...

继续阅读 »