Amp

C++ 九阴真经之命令控制模式

穿精又带淫゛_ 提交于 2020-08-15 10:03:09
所谓命令控制模式,就是对应的行为进行封装,通过命令就能控制,你可以理解为linux下指令操作。 比如一个操作包括,A1、A2、.....A10这10步操作,如果某一步失败,那么就进行倒回,如果这10个操作的业务类型各不相同,并且所需要的参数也不尽相同,操作起来就比较困难,如果我能将他们全部封装成指令模式,只通过A1到A10这10个字符串就触发,那么实现起来就容易的多。 对于网络编程,命令控制就变得必不可少了,该模型可以帮你将网络层与业务层完美的管理在一起。 实现约束: 1、每一类业务我需要划分为一个业务入口类,便于统一管理。 2、我有很多类的业务,为了便于扩展,每添加一个业务类,我需要尽量少改动框架内容。 3、我可以将每一个业务入口类的函数定义成一个命令。 4、每一个命令字允许我传入不同的参数列表 基于上述约束,实现起来可能有点困难,所以在此进行梳理一下,分两步进行: 第一步:业务入口类的管理实现 实现原理: 1、模板类静态成员在有调用的情况下,编译器会自动展开。 2、静态成员会在main函数之前进行初始化 3、在每一个业务入口类中,定义一个指定静态函数,在函数中使用模板类,以达到让编译器生成模板类实例的目的; 4、模板类的静态成员初始化为业务类的静态函数地址。 5、静态成员初始化时,让模板类之间形成一个链表 基于以上原理,我们可以实现一个如下图所示的,父类与子类的关系: 第二步

LinkedList源码分析

非 Y 不嫁゛ 提交于 2020-08-15 09:20:48
/** * 1、是否允许空:允许 * <p> * 2、是否允许重复数据:允许 * <p> * 3、是否有序,有序的意思是读取数据的顺序和存放数据的顺序是否一致:无序 * <p> * 4、是否线程安全:非线程安全 * <p> * 5、底层数据结构:双向链表。实现了Deque这个接口,所以也可以当栈和队列使用 */ package java.util ; import java.util.function.Consumer ; public class LinkedList<E> extends AbstractSequentialList<E> implements List<E> , Deque<E> , Cloneable , java.io.Serializable { /** * 元素个数 */ transient int size = 0 ; /** * 指向首节点 * Pointer to first node. * Invariant: (first == null && last == null) || * (first.prev == null && first.item != null) */ transient Node<E> first ; /** * 指向尾结点 * Pointer to last node. * Invariant: (first ==

在线公开课 | 免运维、弹性伸缩、按需付费...Serverless还有多少惊喜是我不知道的?

时光怂恿深爱的人放手 提交于 2020-08-15 09:09:37
课程概要 云计算的出现改变了传统IT架构和运维方式,容器、微服务为代表的技术在各个层面不断升级云服务的技术能力,它们在应用和环境中的很多通用能力变成了一种服务。 在云原生时代,应用开发的新理念和新技术层出不穷,Serverless 也称为了热门选择,随着这些技术的不断发展,能让开发者更加心无旁骛聚焦业务开发,无需再去操心云计算的基础底层概念,甚至以近乎无感的方式获得云计算的帮助,提升效率及产出。 据Gartner 报告表明,到2020年,全球20%的企业将采用Serverless 技术部署。同时各大企业都在Serverless领域进行探索。Serverless 从底层进行技术变革计算资源的形态,为企业的软件架构设计和应用服务部署引入创新的技术设计思路。 4月 28 日,京东云与AI事业部云产品研发部架构师张金柱,带来了 《六周玩转云原生》终结篇:Serverless 架构设计与落地应用。 从云原生的定义开始,渐进式详解了Serverless 对于云原生的价值、挑战,深入探讨Serverless 的架构设计模式与落地应用。 以下是精华分享内容,咱们一起来看看 六周玩转云原生 Serverless 架构设计与落地应用 — 京东云与AI产品研发部架构师 张金柱 — 1 从云原生说起 在了解 Serverless 之前,张金柱老师先带大家回顾了什么是云原生(Cloud Native)

PHP实现微信申请退款功能

偶尔善良 提交于 2020-08-15 07:33:58
前期准备: 一定要先搞定了微信支付,不然怎么退款,这次使用官方的demo。当然网上可能也有很多大神自己重写和封装了demo,或许更加好用简洁,但是我还是不提倡用,原因如下: (1)可能功能不全,或许他只是实现了微信支付,但是还有申请退款、查询退款、订单查询、撤销订单等业务功能可能是你后续需要的,如果你依赖于大神的SDK的便捷,如果有新的业务需求,你就懵逼了; (2)安全考虑,涉及到支付涉及到金钱,必须要非常安全。官方SDK虽然我也吐槽,但至少会相对比较安全,再次重写,虽然暂时没看出问题,但是万一有漏洞就不好了。 本篇还是使用到官方提供的SDK中的最重要的一个类文件WxPay.Api.PHP中提供的refund()方法来实现,此方法在WxPay.Api.php文件的第141行,代码如下: /** * * 申请退款,WxPayRefund中out_trade_no、transaction_id至少填一个且 * out_refund_no、total_fee、refund_fee、op_user_id为必填参数 * appid、mchid、spbill_create_ip、nonce_str不需要填入 * @param WxPayRefund $inputObj * @param int $timeOut * @throws WxPayException * @return 成功时返回

如何在 Linux 中设置主机名

邮差的信 提交于 2020-08-15 07:04:32
如何在 Linux 中设置主机名? 如果你对 Linux 命令行比较熟悉的话,你可以使用命令 sudo hostnamectl set-hostname host.example.com 设置主机名,设置主机名成功后,不要忘记也要在 hosts 文件中配置下 127.0.0.1. 另外,你也可以使用 nmtui 命令来进行设置。 你可以在你的字符环境中,直接运行 nmtui 命令。 NetworkManager 文本用户界面(TUI)工具 nmtui 可提供一个文本界面配置由 NetworkManager 控制的网络。该工具包含在 NetworkManager-tui 子软件包中。 写入时,不会默认随 NetworkManager 安装该子软件包。要安装 NetworkManager-tui ,请作为 root 运行以下命令: 如果你的操作系统中没有安装的话,请运行下面的命令进行安装: yum install NetworkManager-tui 此时会出现文本用户界面。要在该界面中导航,请使用箭头键,或按 Tab 在选项间前进,按 press Shift + Tab 后退。按 Enter 选择某个选项。 Space 键切换选择库状态。 然后选中设置系统主机名。 然后回车后输入你需要设置的主机名: 通过移动光标后保存退出。 这个字符文本界面提供了一个更好的选择。 https:/

leetcode面试题 10.03(搜索旋转数组)--Java语言实现

匆匆过客 提交于 2020-08-15 05:38:15
求: 搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。 示例1: 输入: arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 5 输出: 8(元素5在该数组中的索引) 示例2: 输入:arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 11 输出:-1 (没有找到) 提示: arr 长度范围在[1, 1000000]之间 题目链接: https://leetcode-cn.com/problems/search-rotate-array-lcci/ 解: 1、二分搜索子数组 因为要求返回的是与target相等的数组元素的最小索引,因此想到从左往后搜索,将旋转数组拆分为若干个有序的子数组,然后对每个子数组进行二分搜索,如果能够找到与target相等的元素,还需要考虑重复的问题,因此要向前遍历,直到找到索引最小的与target相同的元素。如果找不到与target相等的元素,返回-1。 时间复杂度:O(NlogN) 空间复杂度:O(1) public int search ( int [] arr , int

Linux常用命令大全

旧巷老猫 提交于 2020-08-15 05:15:37
systemd systemctl start service //启动service systemctl stop service //停止service systemctl restart service //重启service systemctl enable service //service开机自启 systemctl disable service //service禁止开机自启 systemctl status service //查看service systemctl is-enabled service //查看service是否开机自启 查看系统信息 arch #显示机器的处理器架构 uname -m #显示机器的处理器架构 uname -r #显示正在使用的内核版本 dmidecode -q #显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda #罗列一个磁盘的架构特性 hdparm -tT /dev/sda #在磁盘上执行测试性读取操作 cat /proc/cpuinfo #显示CPU info的信息 cat /proc/interrupts #显示中断 cat /proc/meminfo #校验内存使用 cat /proc/swaps #显示哪些swap被使用 cat /proc/version #显示内核的版本

Deno MySQL 增删查改 (包含页面)

↘锁芯ラ 提交于 2020-08-15 05:15:00
视频演示: https://www.bilibili.com/video/BV1BT4y1E7Nh/?p=10 一起来完成以下步骤: 使用之前工程代码(09.MySQL增删查改API)),如果你还没有看过09视频,建议看一下 添加CRUD页面,使用ejs 页面模板 修改Controller相应的CRUD代码(Service到Repository层无需修改代码) 测试 #controllers/employeeController.ts //后台redirect import { Context, REDIRECT_BACK } from "https://deno.land/x/oak/mod.ts" ; import { Employee } from "../models/employee.ts" ; import employeeService from "../services/employeeService.ts" ; //解析Form import { multiParser } from 'https://raw.githubusercontent.com/deligenius/multiparser/master/mod.ts' const { cwd } = Deno; class Controller { static async list(ctx: any )

数据结构与算法之美_41_动态规划理论:一篇文章带你彻底搞懂最优子结构、无后效性和重复子问题

喜你入骨 提交于 2020-08-15 04:52:15
上一节,我们通过两个非常经典的问题,展示了用动态规划解决问题的过程。 今天我们来学习下动态规划的一些理论知识。学完这节内容,可以帮我们解决这样几个问题:什么样的问题可以用动态规划解决?解决动态规划问题的一般思考过程是什么样的?贪心、分支、回溯、动态规划这四种思想又有什么区别和联系呢? “一个模型三个特征”理论讲解 什么样的问题适合用动态规划来解决呢?换句话说,动态规划能解决的问题有什么规律可循呢?实际上,动态规划作为一个非常成熟的算法思想,很多人对此已经做了非常全面的总结。我们把这部分理论总结为“一个模型三个特征”。 “一个模型”指的是动态规划适合解决的问题的模型。我们把这个模型定义为“多阶段最优解模型”。 我们一般是用动态规划来解决最优问题。而解决问题的过程,需要经历多个决策阶段。每个决策阶段都对应着一组状态。然后我们寻找一组决策序列,经过这组决策序列,能够产生最终期望求解的最优值。 现在,我们再来看看,什么是“三个特征”?它们分别是==最优子结构==、==无后效性==和==重复子问题==。这三个概念比较抽象,我们逐一解释下。 1. 最优子结构 最优子结构指的是,问题的最优解包含子问题的最优解。反过来说就是,我们可以通过子问题的最优解,推导出问题的最优解。如果我们把最优子结构,对应到我们前面定义的动态规划问题模型上,那我们也可以理解为,后面阶段的状态可以通过前面阶段的状态推导出来

ElasticSearch的基本操作与命令

独自空忆成欢 提交于 2020-08-15 04:46:51
注:例子中的json有的是截取的部分数据,不可完全照搬,需灵活使用。 获取集群健康值: GET /_cluster/health 创建索引:PUT /index_test { "settings": { "index": { "number_of_shards": "3", "number_of_replicas": "0" } } } 删除索引: DELETE /index_test 查询索引的相关信息:GET /_cat/indices?v mappings自定义创建:PUT /index_test 在创建索引时加入: "mappings": { "properties": { "username": { "type": "text", "index": true }, "password": { "type": "keyword", "index": false } } } analyze分词器的使用 : GET /index_test2/_analyze { "field": "text", "text": "icoding is very well!" } 如果在创建完索引后没有创建mapping,可以后续添加:POST /index_test/_mapping { "properties": { "username": { "type": "text", "index"