编程
文章平均质量分 95
胡拉哥
生活研究生(ID:LifeAlpha)
展开
-
快速傅立叶变换
介绍快速傅立叶变换(含代码)原创 2022-02-11 09:53:34 · 598 阅读 · 0 评论 -
用正六边形分割地图
给定地图上的区域(用多边形顶点的经纬度表示), 我们用正多边形(三角形/正方形/六边形)对地图上的区域进行填充. 在一些实际应用中, 我们这样做的是为了提供标准的作业单元, 例如定义共享自行车的骑行范围, 物流的配送范围, 外卖骑手的接单范围等.效果如下:问题描述给定地图区域边界顶点的集合V={(x1,y1),(x2,y2),…,(xn,yn)}V=\{(x_1, y_1), (x_2, y...原创 2020-03-31 23:15:00 · 3597 阅读 · 4 评论 -
Python的装饰器
在Python中使用装饰器可以在不修改代码的前提下为已有的函数添加新功能. 例如计算函数的运行时间, 打印函数的运行日志, 缓存数据, 用户授权等.为什么需要装饰器为什么需要把某个功能用装饰器的方式实现? 换句话说, 为什么不直接在函数中实现某个功能? 或者为什么不单独用一个类(class)来实现某个功能, 然后在函数中调用?以提供缓存功能的装饰器为例. 假如我们的业务代码负责向数据库读取数...原创 2020-03-23 20:07:46 · 184 阅读 · 0 评论 -
编程思想: 面向切面编程(Aspect-Oreinted Programming - AOP)
面向对象编程(Object-Orentied Programming - OOP)的特点是继承, 多态和封装, 其中封装指的是把属性和方法按类(Class)进行划分, 从而复用代码并降低编程的复杂性. 随着业务的变化, 项目中的类越来越多, 开发者又发现了新的问题:不同类之间重复的代码越来越多. 例如每个类的方法中都要打日志.方法中除了业务逻辑之外, 要实现大量与业务无关的功能, 例如调试,...原创 2020-03-19 23:28:23 · 458 阅读 · 2 评论 -
编程思想: 控制反转(Inversion of Control - IoC)
本文参考PHP开发框架phalcon的文档1. 它从一个简单的例子出发, 描述了编码中遇到的一系列问题, 然后一步步去解决, 最后得到一个解决方案. 在这个例子中我们了解到:一种设计模式: 依赖注入(Dependency Injection)控制反转是什么?控制反转是为了解决什么问题?在这个例子中, 我们要写一个类SomeComponent来实现某个功能. 由于它依赖连接数据库, 我们...原创 2020-03-19 23:26:47 · 369 阅读 · 0 评论 -
面向对象设计原则: The SOLID Principles
本文主要参考Robert C. Martin. Design Principles and Design Patterns1和butUncleBob.com2.设计糟糕的表现(Symptoms of Rotting Design)僵化(Rigidity)软件变得难以修改, 每次修改都会造成对应依赖模块的修改. 换句话说, 模块之间耦合性太严重, 因此在中大型项目中多人合作难以协同.脆弱(F...原创 2020-03-19 23:24:48 · 530 阅读 · 0 评论 -
算法WEB服务开发实践(入门)
本文为缺乏WEB工程经验的算法工程师 提供一个起步的WEB项目实践. 我们用一个简单的例子来说明如何开发一个完整的算法服务(基于HTTP协议).需求 nnn个用户分配资产, 总金额为MMM. 我们需要为用户提供一个资产分配的算法服务.考虑因素分配方式有多种: 例如平均分, 按比例分. 不同的场景下可能会采用不同的分配方式.考虑业务约束: 年龄段在18岁至60岁之间的用户才能分到钱...原创 2020-03-19 23:23:35 · 460 阅读 · 0 评论 -
使用IntelliJ IDEA构建Spring Boot项目示例
我们介绍新建Spring Boot项目的流程, 主要内容包含创建项目配置日志环境使用配置文件多环境下的配置文件写一个demo服务打包和部署1. 创建项目打开IntelliJ IDEA, 选择菜单File->New->Project.输入组织名称(Group)和项目名称(Artifact).添加依赖包. 添加Web: Web即可. 我们建议添加一个...原创 2020-03-19 23:20:48 · 462 阅读 · 0 评论