技术文章

面试官:如何保障消息100%投递成功、消息幂等性?

假装没事ソ 提交于 2021-02-20 04:22:13
关注“Java后端技术全栈” 回复“面试”获取全套面试资料 来源:kil57.cn/TcIUf 一、前言 [ 金三银四,如何涨薪看这里] 我们小伙伴应该都听说够消息中间件MQ,如:RabbitMQ,RocketMQ,Kafka等。引入中间件的好处可以起到抗高并发,削峰,业务解耦的作用。 如上图: (1)订单服务投递消息给MQ中间件 (2)物流服务监听MQ中间件消息,从而进行消费 我们这篇文章讨论一下,如何保障订单服务把消息成功投递给MQ中间件,以RabbitMQ举例。 二、分析问题 小伙伴们对此会有些疑问,订单服务发起消息服务,返回成功不就成功了吗?如下面的伪代码: 上面代码中,一般发送消息就是这么写的,小伙伴们觉得有什么问题吗? 下边说一个场景,如果MQ服务器突然宕机了会出现什么情况?是不是我们订单服务发过去的消息全部没有了吗?是的,一般MQ中间件为了提高系统的吞吐量会把消息保存在内存中,如果不作其他处理,MQ服务器一旦宕机,消息将全部丢失。这个是业务不允许的,造成很大的影响,关注公众号码猿技术专栏,获取更多面试资源。 三、持久化 有经验的小伙伴会说,我知道一个方法就是把消息持久化,RabbitMQ中发消息的时候会有个durable参数可以设置,设置为true,就会持久化。 这样的话MQ服务器即使宕机,重启后磁盘文件中有消息的存储,这样就不会丢失了吧

好消息,第二期PaddleHub创意赛要开始啦!

戏子无情 提交于 2021-02-20 04:21:36
在4月初举办的第一期 PaddleHub AI创意赛:人像抠图大赛中,很多开发者积极参与,也涌现了不少的好文章和好作品( 来看看大家把AI抠图玩出了什么花 ),但也有开发者反映因为各种原因错过了比赛也错过了大奖,期待尽快开第二期。没问题,第二期马上要开始啦。 这期创意赛主题是啥呢?别着急,我们先从几个真实小场景需求开始讲讲: 场景1:人像美颜 虽然有人说,P图是每个女生的必备技能,但女生P图是一个很大的工程,需要花费很长时间,如果你几十行代码就能帮你女神或者闺蜜P好一张图,那应该会显得自己很酷炫吧! 通过检测脸部轮廓,五官位置等,实现自然的美颜效果。 效果图如下: 如果感觉还不够,眼睛放大系数和瘦脸系数都可以调整。赶紧fork,然后帮你女神或者闺蜜设计一个适合她的全自动P图程序吧。 教程地址: https://aistudio.baidu.com/aistudio/projectdetail/389512 对了,刚才提到的技术点,就是脸部识别、五官检测,是不是很感兴趣怎么做的,它还能做什么?下面让刚酒醒的码仙李白带带你。 场景2:头部姿态识别 又是农历十五,码仙李白手里拿着酒,抬起头望着天空。 “你又抬头看明月了”,一段机器语音打断了李白的思绪。是他用刚学会的 PaddleHub 开发的机器人,识别到了他的脸部在移动。 “这个月你已经抬头看明月233次了,我的主人,不早了,快点睡吧

js学习笔记----JavaScript中DOM扩展的那些事

与世无争的帅哥 提交于 2021-02-20 04:20:53
什么都不说,先上总结的图~ Selectors API(选择符API) querySelector()方法 接收一个css选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null. //取得 body 元素 var body = document.querySelector( "body"); //取得 ID 为"myDiv"的元素 var myDiv = document.querySelector( "#myDiv"); //取得类为"selected"的第一个元素 var selected = document.querySelector( ".selected"); //取得类为"button"的第一个图像元素 var img = document.body.querySelector( "img.button"); 通过Document类型调用querySelector()时,会在文档元素的范围内查找匹配的元素 通过Element类型调用querySelector()时,只会在该元素后代元素的范围内查找匹配的元素. 如果传入不被支持的css选择符,querySelector()会抛出错误. querySelectorAll()方法 querySelectorAll()参数也是一个CSS选择符,返回的是所匹配的元素而不是仅仅一个元素

Mysql视图、触发器、存储过程

做~自己de王妃 提交于 2021-02-20 04:19:59
视图 视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】, 用户使用时只需使用【名称】即可获取结果集,并可以将其当作表来使用。 1、创建视图 --格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v1 AS SELET nid, name FROM A WHERE nid > 4 2、删除视图 --格式:DROP VIEW 视图名称 DROP VIEW v1 3、修改视图 -- 格式:ALTER VIEW 视图名称 AS SQL语句 ALTER VIEW v1 AS SELET A.nid, B. NAME FROM A LEFT JOIN B ON A.id = B.nid LEFT JOIN C ON A.id = C.nid WHERE A.id > 2 AND C.nid < 5 4、使用视图 使用视图时,将其当作表进行操作即可,由于视图是虚拟表, 所以无法使用其对真实表进行创建、更新和删除操作,仅能做查询用。 触发器 对某个表进行【增/删/改】操作的前后如果希望触发某个特定的行为时, 可以使用触发器,触发器用于定制用户对表的行进行【增/删/改】前后的行为。 1、创建基本触发器 # 插入前 CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1

git指令

ε祈祈猫儿з 提交于 2021-02-20 04:19:28
==============版本管理员操作======================== 第一步: 创建数据仓库 git init --bare shared.git ==============开发人员1操作============================= 第二步:复制仓库到本地 git clone /f/software/repository/git/shared.git/ . (注意有个点,表明当前目录) 第三步:设置个人信息 git config user.name "user1" git config user.email "user1@163.com" 第五步:新建一个文件 echo "User1 add content" > index.jsp 第六步:提交文件 git add index.jsp git commit -m "User1 add the file" 第七步:把自己的仓库提交到公共服务器 git push origin master ==============开发人员2操作============================= 第八步:复制仓库到本地 git clone /f/software/repository/git/shared.git/ . 第九步:设置个人信息 git config user.name "user2"

wemall

纵然是瞬间 提交于 2021-02-20 03:53:15
做百货的朋友这两年一直都在诉苦,感叹当年的风光日子不再,绞尽脑汁想个活动还不如网上造个节呢。他还不无悲观地慨叹,估计以后我们的现实生活中就剩下餐馆和二十四小时便利店了。然而就是刚刚过了生日、在广东已经开了711家便利店的7-Elven,生日庆典的鱼丸半价、思乐冰一元等各项优惠活动都还是在它的微信平台上发布的。 未来会是怎样暂且不再争论,但不争的事实是在淘宝、天猫之后,一大波品牌又开始在微信上开店了。微信平台相对封闭,如果不是你主动去找,其搜索性能真的不怎么强大。听起来挺没有商业价值的对不对?不过,封闭可能窄众,但可能更精准,有的品牌已经吸粉五六百万了,这还真就又是一块阵地。 越来越多的商家与物联网公司合作在类似wemall的商城系统上进行商城销售与运营。在wemall这样的微信系统中开发出自己的微信商城进行买卖。这种微信式营销越来越普遍。 买卖方便,两种方式进入微信商城 微信是个通讯工具,也是个社交工具,当然它也是个买卖工具。不要以为微信跟钱的关系就是发红包,其实买东西在这里也挺方便的。如果按照进入方式不同来划分,微信上的商城大致可以分为两类。第一是从微信的“钱包”端口进入的,这里有“京东精选”和“美丽说”;第二类是从各个公众号进入的,这里就比较多了,比如宝洁家的产品就几乎每个品牌都有一个公众号,每个公众号都有一个自己的商城。比如帮宝适就有“帮宝商城”,O LA

wemall

谁说我不能喝 提交于 2021-02-20 03:44:02
WeMall 开源微商城 1 、快速创建微信商城。一杯茶的时间创建您的微信商城。 2 、丰富的界面。简洁美观的界面,美轮美奂。 3 、功能强大的系统。商品,订单,微信等 11 种功能,全面覆盖。 4 、多种屏幕预览。支持多种型号手机,平板的预览,保障用户体验。 5 、全网高速访问。借助公司的 CDN 骨干网,全网高速访问您的微信商城,畅享飞速体验。 开源 安全 基于开源的 ThinkPHP 技术架构,实现 MVC 、缓存等框架设计。多项安全管理功能,保证系统安全,可靠,稳定的运行。 简洁 丰富 用户易于操作,极易上手。云商店拥有大量的第三方的插件和应用模块、模板主题,方面下载使用。 功能 强大 全新的架构和模块化的开发机制,便于灵活扩展和二次开发。商品,订单,微信,统计等功能全面覆盖。 购物车 购物车可以帮您管理订单,个人信息和暂存的商品,并为您提供各种自助管理订单的服务。 1.修改商品数量。 2.删除增加商品。 3.购物车可以替暂存商品:当您选购了商品,放入购物车后,如果您对该商品未进行支付,购物车都会帮您把所选商品一直保存。 4.选择支付方式:货到付款,支付宝支付。 5.修改个人配送信息。 我的 我的可以完成个人信息管理,订单管理,登录注册功能。 1.用户的登录注册注销功能。 2.用户的头像设置功能。 3.用户的地址订单管理。 4.便捷的拨打客服热线。 个人订单

03、Docker Compose入门

眉间皱痕 提交于 2021-02-20 03:25:37
简介: Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件 docker-compose.yml ,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。 # 启动所有服务 $ docker-compose up # 关闭所有服务 $ docker-compose stop 安装: Mac 和 Windows 在安装 docker 的时候,会一起安装 docker compose。Linux 系统下的安装参考 官方文档 查看是否安装成功: $ docker-compose --version 使用: 一份标准的docker-compose.yml文件应该包含version、services、networks三大部分,其中最关键的就是services和networks两个部分. docker运行命令转换成docker-compose.yml实例 docker命令执行2个镜像: docker run -d -p 9020:9020 --sysctl net.core.somaxconn=4096 registry.leyantech.com/infra/wp-api docker run -d -p 88:80 registry.leyantech.com/infra

二叉树最小深度

送分小仙女□ 提交于 2021-02-20 03:01:48
求二叉树最小深度 Day47: 题目 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最小深度 2. 补全下面代码: # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution (object) : def minDepth (self, root) : """ :type root: TreeNode :rtype: int """ 2 分析 分析过程的开始,我们先看一个错误的求解,并说明为什么它是错误的: class Solution (object) : def minDepth (self, root) : """ :type root: TreeNode :rtype: int """ if not root: return 0 if not root.left and not root.right: return 1 return 1 + min(self

Prime Path[POJ3126] [SPFA/BFS]

安稳与你 提交于 2021-02-20 03:00:59
描述 孤单的zydsg又一次孤单的度过了520,不过下一次不会再这样了。zydsg要做些改变,他想去和素数小姐姐约会。 所有的路口都被标号为了一个4位素数,zydsg现在的位置和素数小姐姐的家也是这样,如果两个路口间只差1个数字,则有一条路连通两个路口。(例如1033和1073间有一条路连接) 现在,你知道了zydsg的位置和素数小姐姐的家,问最少zydsg要走多少条路才能见到素数小姐姐。例如:如果zydsg在1033,素数小姐姐的家在8179,最少要走6条街,走法为: 1033 1733 3733 3739 3779 8779 8179 Input 输入数据有多组,首先是一个数字n,代表之后有n组数据。 其次,在每一组输入中,都包含两个数字a和b,代表zydsg的位置和素数小姐姐家的位置。 其中,a和b都是四位数,而且不含前导0。 Output 每组输入输出一行,表示zydsg最少需要走多少条路。若不存在合法的路径,则输出单词“Impossible”。 Sample Input 3 1033 8179 1373 8017 1033 1033 Sample Output 6 7 0 分析 首先我们要筛素数,接下来 方法一: 两个“相邻的”素数连边,每次从开头向终点跑SPFA 方法二: 按个十百千位向四周扩散,BFS 代码(SPFA) 1 #include< set > 2