
技术
文章平均质量分 85
360linker
360linker技术社区的发起人,曾在多家头部互联网公司任职,致力于打造一个帮助我们实现高效技能提升的圈子,分享IT圈内技术、产品、运营、市场等信息。
展开
-
RocketMQ消息顺序和消息重复的处理
消息顺序消息顺序是只可以按照消息发送的顺序进行消费。一个订单产生3条消息,订单创建、付款、订单完成。消费时只有按照顺序消费才有意义,不可能先消费付款消息再消费订单创建消息,这样就乱了。另外,多笔订单又可以并行消费。如何保证呢?一个订单产生的消息只能发送给同一个MQ服务器中的同一个分区,并且按顺序发送,这样才能在理论上保证消费者消费时是按照顺序消费的,因为一个分区就是一个逻辑队列。生产者虽然按顺序发送,但是第一条消息到达MQ的耗时比第二条多,那么第二条则会被先消费,这样就又导致消费时不是顺序的。那么如转载 2021-01-29 10:28:40 · 1244 阅读 · 0 评论 -
浅谈常见的七种加密算法及实现
前言数字签名、信息加密是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的签名加密算法来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。正文1. 数字签名数字签名,简单来说就是通过提供可鉴别的数字信息验证自身身份的一种方式。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。分别由发送者持有能够代表自己...转载 2021-01-26 13:42:41 · 1225 阅读 · 0 评论 -
Kafka为什么吞吐量大、速度快?
Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。 Kafka虽然是基于磁盘做的数据存储,但却具有高性能、高吞吐、低延时的特点,其吞吐量动辄几万、几十上百万。 但是很多使用过Kafka的人,经常会被问到这样一个问题,Kafka为什么速度快,吞吐量大;大部分被问的人都是一下子就懵了,或者是只知道一些简单的点,本文就简单的介绍一下Kafka为什么吞吐量大,速度快。 ...转载 2020-12-12 22:11:43 · 557 阅读 · 0 评论 -
natapp搭建外网服务器
natapp搭建外网服务器首先在natapp官网注册一个账号:https://natapp.cn/注册好后登陆网站,点击左侧菜单中的购买隧道:点击免费隧道后进入隧道配置页面,我这里已经配置好了直接展示如下:点击保存后点击我的隧道后可以看到自己刚才配置的隧道信息:在https://natapp.cn/#download根据您的本机下载对应的客户端,比如我的本机是win7 64位,则下载Windows 64位的客户端:下载之后,解压至任意目录,得到natapp..转载 2020-12-09 16:34:14 · 805 阅读 · 0 评论 -
HTTP服务和RPC服务,如何选择
一、七层网络结构模型:我们先来了解一下OSI的七层网络结构模型(虽然实际应用中基本上都是五层),它可以分为以下几层: (从上到下)第一层:应用层。定义了用于在网络中进行通信和传输数据的接口; 第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等; 第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断; 第四层:传输层。管理着网络中的端到端的数据传输; 第五层:网络层。定义网络设备间如何传输数据; 第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输;转载 2020-11-18 14:53:43 · 518 阅读 · 0 评论 -
So easy!同时登陆两个或多个Mac版微信和QQ
现如今,微信和QQ已经不单单是简单的社交软件了,也成了工作必备软件,工作中用它传个文件,发个通知,不知道有多方便。但是很多人希望将工作圈和生活圈分开,有人想出拿两部手机的方法,倒是可以,不过来回倒腾略麻烦了点。这时候双微信的作用就来了,一个专注工作圈一个专注生活圈互不干扰,这有多好。双QQ也是一样,一部手机同时登录两个QQ号,大号聊天的同时开个小号聊工作也是挺好的。那么问题来了,如何同时登陆两个或多个Mac版微信和QQ呢?超简单,几步操作轻松登陆两个或多个Mac版微信和QQ!如何实现Mac.转载 2020-11-16 11:01:49 · 1836 阅读 · 0 评论 -
百亿级数据分表后怎么分页查询?
当业务规模达到一定规模之后,像淘宝日订单量在5000万单以上,美团3000万单以上。数据库面对海量的数据压力,分库分表就是必须进行的操作了。而分库分表之后一些常规的查询可能都会产生问题,最常见的就是比如分页查询的问题。一般我们把分表的字段称作shardingkey,比如订单表按照用户ID作为shardingkey,那么如果查询条件中不带用户ID查询怎么做分页?又比如更多的多维度的查询都没有shardingkey又怎么查询?唯一主键一般我们数据库的主键都是自增的,那么分表之后主键冲突的问题就是一个无法转载 2020-11-12 17:25:50 · 283 阅读 · 0 评论 -
Java并发包JUC核心原理解析
JUC分类线程管理 线程池相关类 Executor、Executors、ExecutorService 常用的线程池:FixedThreadPool、CachedThreadPool、ScheduledThreadPool、SingleThreadExecutor 能获取子线程的运行结果 Callable、Future、FutureTask 并发流程管理CountDwonLatch、CyclicBarrier、Semaphore、Condition实现线程安..转载 2020-11-12 16:39:56 · 705 阅读 · 0 评论 -
23张图,带你入门推荐系统
做广告业务1年多时间了,但是平时的工作主要和广告工程有关,核心的广告算法由 AI 部门支持,对我们而言可以说是「黑盒般」的存在,只需要对训练好的模型进行调用即可。近期,我打算系统性地学习下广告中的搜索和推荐算法,当然更多是从工程的视角去弄清楚:算法的基本原理、以及面对线上海量数据时算法是如何解决性能问题的?整个过程,我会将有价值的技术点输出成系列文章。这篇文章属于推荐系统的入门篇,本文暂不考虑线上环境的海量数据,目的是先了解清楚推荐系统的基本构成,我会通过图解推荐算法以及程序demo的形式展开,..转载 2020-11-12 11:29:40 · 552 阅读 · 1 评论 -
十大经典排序算法(动图演示)
0、算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 .转载 2020-11-12 10:39:34 · 225 阅读 · 0 评论 -
SpringBoot下的策略模式,消灭了大量的ifelse
前言项目中有这样一个场景,在公园放置了用来拍摄人像的识别杆,根据用户在不同识别杆之间采集的图象来计算用户的运动距离。由于涉及到许多公园,每个公园的布局不同,识别杆之间距离不同,算法也不同。但代码中每个不同的公园的算法区别都采用ifelse来进行判断处理。这样的写法你能看得下去吗?肯定不能。所以,就用策略模式对此进行了重构。项目采用SpringBoot架构,于是对不同的策略模式写法又进行了一次升级。现在就以实战的角度带领大家来学习策略模式,以及如何将ifelse重构为基于SpringBoot的策略模式转载 2020-11-11 09:58:52 · 355 阅读 · 0 评论 -
如何干掉java中的if...else...
前言if…else是高级编程语言的必备功能。但如果现实中项目代码中的if…else过多,可能会影响代码的可读性、可维护性,且违反了编程规范中的单一职责原则和开闭原则。问题1:if…else过多问题表现if…else 过多的代码可以抽象为下面这段代码。其中只列出5个逻辑分支,但实际工作中,能见到一个方法包含10个、20个甚至更多的逻辑分支的情况。另外,if…else 过多通常会伴随着另两个问题:逻辑表达式复杂和 if…else 嵌套过深。对于后两个问题,本文将在下面两节介绍。本节先来讨论 if转载 2020-11-11 09:57:39 · 436 阅读 · 0 评论 -
详解Condition的await和signal等待/通知机制
1.Condition简介任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来看Object的wait和notify/notify是与对象监视器配合完成线程间的等待/通知机制,而Condit转载 2020-11-11 09:42:52 · 306 阅读 · 0 评论 -
Java中多个线程交替循环执行
有些时候面试官经常会问,两个线程怎么交替执行呀,如果是三个线程,又怎么交替执行呀,这种问题一般人还真不一定能回答上来。多线程这块如果理解的不好,学起来是很吃力的,更别说面试了。下面我们就来剖析一下怎么实现多个线程顺序输出。两个线程循环交替打印//首先我们来看一种比较简单的方式public class ThreadCq { public static void main(String[] args) { Stack<Integer> stack = new Stac转载 2020-11-11 09:24:45 · 498 阅读 · 0 评论 -
Redis持久化AOF和RDB对比
RDB持久化 AOF持久化 全量备份,一次保存整个数据库 增量备份,一次保存一个修改数据库的命令 保存的间隔较长 保存的间隔默认一秒 数据还原速度快 数据还原速度一般 save会阻塞,但bgsave或者自动不会阻塞 无论是平时还是AOF重写,都不会阻塞 更适合数据备份,默认开启 ...转载 2020-11-11 09:21:34 · 326 阅读 · 0 评论 -
布隆过滤器(Bloom Filter)的原理和实现
什么情况下需要布隆过滤器?先来看几个比较常见的例子字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, gmail等邮箱垃圾邮件过滤功能这几个例子有一个共同的特点:如何判断一个元素是否存在一个集合中?常规思路数组 链表 树、平衡二叉树、Trie Map (红黑树) 哈希表虽然上面描述的这几种数据结构配合常见的排序、二分搜索可以快速高效的处理绝大部分判断元素是否存在集合中的需求。但.转载 2020-11-11 09:20:27 · 183 阅读 · 0 评论 -
知道为什么RedisCluster有16384个槽么?
引言现在redis集群架构,redis cluster用的会比较多。如下图所示对于客户端请求的key,根据公式HASH_SLOT=CRC16(key) mod 16384,计算出映射到哪个分片上,然后Redis会去相应的节点进行操作!那大家思考过,为什么有16384个槽么?ps:CRC16算法产生的hash值有16bit,该算法可以产生2^16-=65536个值。换句话说,值是分布在0~65535之间。那作者在做mod运算的时候,为什么不mod65536,而选择mod16384.转载 2020-11-11 09:12:07 · 254 阅读 · 0 评论 -
50道Redis面试题史上最全,以后面试再也不怕问Redis了
1、什么是Redis?Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结...转载 2019-10-29 22:15:19 · 322 阅读 · 0 评论 -
Service Mesh在微服务中的使用
Service Mesh 是什么?在微服务架构中怎么体现其价值?Service Mesh(服务网格)是一个基础设施层,让服务之间的通信更安全、快速和可靠。如果你在构建云原生应用,那么就需要 Service Mesh。Service Mesh 已经成为云原生技术栈里的一个关键组件。很多拥有高负载流量业务的公司都在他们的生产应用里加入了 Service Mesh。但是 Service Mesh 是什么...原创 2018-04-08 09:01:46 · 1116 阅读 · 0 评论 -
新兴技术成熟度曲线
2017年7月,Gartner公司发布了年度新兴技术成熟度曲线。Gartner认为,2017年技术成熟度曲线揭示了未来5-10年的三方面技术趋势。未来10年,人工智能将成为最具颠覆性的技术。通用人工智能/神经形态硬件/深度强化学习/量子计算/脑机接口等技术仍处在上升阶段。情感计算/自然语言问答/智能数字挖掘/虚拟个人助理等已经脱离曲线,走向成熟。图1 2017新兴技术成熟度曲线突出趋势:无处不在的...转载 2018-04-01 01:10:00 · 6282 阅读 · 0 评论 -
Java自定义注解和运行时靠反射获取注解
java自定义注解Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。1、元注解元注解是指注解的注解。包括 @Retention @Target @Document @Inherited四种。1.1、@Retention: 定义注解的...转载 2018-04-16 09:39:47 · 542 阅读 · 0 评论 -
快照版本和发布版本区别
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次。我们知道,maven的依赖管理是基于版本管理的,对于发布状态的artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组...原创 2018-04-16 12:55:17 · 16154 阅读 · 3 评论 -
Go 语言特性
1、Go有什么优势可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。语言层面支持并发,这个就是Go最大的特色,天生的支持并发,我曾经说过一句话,天生的基因和整容是有区别的,大家一样美丽,但是你喜欢整容的还...原创 2018-04-17 09:25:34 · 180 阅读 · 0 评论 -
短信验证码防刷策略
短信验证码作为重要的身份验证工具,因其操作简便、安全性高、时效性强等优点已被开发人员广泛使用。但因其获取便利、限制较少容易被不法分子利用进行短信轰炸,恶意刷掉大量短信费用,给公司或个人造成大量的金钱损失,造成这种情况原因主要是在产品实际设计过程中,有些产品人员因为对技术实现不太了解,防范意识薄弱,简单或直接忽略对短信验证码进行限制,这才造成短信接口恶意被不法分子利用。在介绍防刷策略前我们需要了解下...转载 2018-04-17 09:50:20 · 1964 阅读 · 0 评论 -
解决跨域问题的三种方式
什么是跨域?跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子:http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)http://www.123.com/index.html 调用 http://www.456...原创 2018-04-17 10:07:03 · 3528 阅读 · 0 评论 -
智能化运维的运用场景和实践
在日常IT运维工作中存在大量重复的日常工作任务,这些任务有的复杂繁琐数量大,有的严重依赖执行次序,有的需要等待各种条件具备之后方可执行。尽管IT运维管理的技术在不断进步,但实际上IT运维人员并未真正解放,目前许多企业的系统开启和关闭、系统更新升级、应急操作等绝大多数工作都是手工操作的。即便简单的系统变更或软件复制粘贴式的升级更新,往往都需要运维人员逐一登录每台设备进行手工变更。尤其是在云平台、大数...原创 2018-04-11 17:34:30 · 3293 阅读 · 0 评论 -
2018.4.17 linker航海日志之 JAVA 注解作用及关键点
Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。元注解:元注解是指注解的注解。包括 @Retention @Target @Document @Inherited四种。 自定义注解:使用@interface自定义注解时,自动继承了java.lang.annotation.Annotat...原创 2018-04-18 10:21:59 · 288 阅读 · 0 评论 -
2018.4.18 linker航海日志之 类加载器双亲委派模型
某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。使用双亲委派模型的好处在于Java类随着它的类加载器一起具备了一种带有优先级的层次关系。例如类java.lang.Object,它存在在rt.jar中,无论哪一个类加载器要加载这个类,最终都是委派给处于模型最顶端的Boot...原创 2018-04-19 10:51:10 · 367 阅读 · 0 评论 -
DApp会是下一个风口?
在过去的10年,移动互联网、云计算、大数据等风起云涌,而在未来10年,随着区块链分布式技术的发展,公链基础设施的不断完善, DApp(去中心化应用)可能将成为主流。与传统的互联网应用不同,DApp去掉了第三方运营平台,不需要平台方运营代码、储存用户数据,而是直接连接用户和开发者。研发DApp则不需要经过任何公司批准,平台的规则也不会被任何人改变。从系统结构的角度看,DApp的后端运行在去中心化的...转载 2018-06-04 14:43:16 · 940 阅读 · 0 评论 -
怎么面试一个10年以上经验的架构师?
最近部门里面要为一个外包的项目招聘一个架构师,客户直接要求希望这个架构师有10年以上经验;4年以上的C#实际开发经验;良好的英语书写和口语;优秀的沟通技巧和团队合作精神。那么该如何准备面试这样一个架构师呢?我本人的开发经验有5年左右,担任Team Leader有2年左右时间,斗胆以此浅薄的经历来谈一谈来面试这个架构师的想法。最好的面试思路即以JD的要求为主,然后再增加其他方面的面试点。这样,我们针...转载 2018-06-26 22:52:11 · 7160 阅读 · 0 评论 -
ArrayBlockingQueue详解
1.介绍ArrayBlockingQueue是一个阻塞式的队列,继承自AbstractBlockingQueue,间接的实现了Queue接口和Collection接口。底层以数组的形式保存数据(实际上可看作一个循环数组)。常用的操作包括 add ,offer,put,remove,poll,take,peek。前三者add offer put 是插入的操作。后面四个方法是取出的操作。他们之...转载 2018-07-16 19:16:51 · 9047 阅读 · 1 评论 -
Rancher的优点及不足
试用Rancher已经有一段时间了,个人感觉Rancher有以下优点和不足: 优点:1、采用图形化方式:易用的Web管理界面,在Docker易用性的基础上,再一次降低了使用容器技术部署容器应用的难度。2、支持多种调度器:通过环境模板,很容易地创建和部署Cattle、Swarm、K8S、Mesos容器集群管理调度平台。3、管理主机集群:管理对象是多台主机的集群,而不仅仅是单台容器...转载 2018-07-16 19:23:59 · 52081 阅读 · 4 评论 -
rancher搭建+基本操作+web应用部署
Rancher搭建首先rancher需要安装了docker的linux环境,我的系统版本为在docker的基础上启动rancher服务器,Rancher 服务器是一个 Docker image,所以其软件本身不需要安装,只需要执行 Docker 命令下载并且成功运行 Docker 服务器镜像即可。执行命令 sudo docker run -d --restart=always -p 8...转载 2018-07-16 19:25:21 · 3719 阅读 · 1 评论 -
你离架构师还有多远?
软件架构师在整个软件开发过程中都起着重要的作用,并随着开发进程的推进而其职责或关注点不断地变化,总结下面几点。 在需求阶段,软件架构师主要负责理解和管理非功能性系统需求,比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等等,此外,架构师还要经常审查客户及市场人员所提出的需求,确认开发团队所提出的设计; 在需求越来越明确后,架构师的关注点开始转移到组织开发团队成员和开发过程定义上;...转载 2018-07-03 18:41:25 · 535 阅读 · 0 评论 -
阿里架构师详解虚拟机工作原理
一、类加载器首先来看一下java程序的执行过程。从这个框图很容易大体上了解java程序工作原理。首先,你写好java代码,保存到硬盘当中。然后你在命令行中输入[java] view plain copyjavac YourClassName.java此时,你的java代码就被编译成字节码(.class).如果你是在Eclipse IDE或者其他开发工具中,你保存代码的时候,开发工具已经帮你完成了上...转载 2018-07-03 18:43:00 · 302 阅读 · 0 评论 -
我真的要做一辈子的程序员吗?
常听一些同学说:不知道下一份工作该去哪类公司做些什么,我的职场人际一团糟老板不重视我,我现在成长的非常慢所以又想跳槽了,我看不到公司的发展前景好迷茫,其实这一切的困惑都来源于没有做好职业规划或者你根本就没有职业规划过。那今天我就从以下几个话题和大家分享下我所理解的职业规划 Tips ,也欢迎大家踊跃提问。为什么要做职业规划?我们先聊聊第一个话题,为什么要做职业规划?首先,我们要知道职业规划是什么,...转载 2018-06-28 19:24:24 · 695 阅读 · 0 评论 -
CentOS 下安装并且启动 nginx
安装所需环境Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境。1.gcc 安装 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:yum install gcc-c++2. PCRE pcre-devel 安装 PCRE(Per...转载 2018-07-17 18:15:30 · 166 阅读 · 0 评论 -
JDK8新特性:使用Optional避免null导致的NullPointerException
空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到Google Guava的启发,Optional类已经成为Java 8类库的一部分。Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很...转载 2018-07-11 18:29:04 · 1223 阅读 · 0 评论 -
Java8 Optional总结
1、构造方式Optional 的三种构造方式: Optional.of(obj), Optional.ofNullable(obj) 和 Optional.empty()1.1、Optional.of(obj)它要求传入的 obj 不能是 null 值的, 否则 NullPointerException.使用场景:1. 当我们非常非常的明确将要传给 Optional.of(obj) 的 obj ...转载 2018-07-12 07:35:31 · 204 阅读 · 0 评论 -
Undertow,Tomcat和Jetty服务器配置详解与性能测试
undertow,jetty和tomcat可以说是javaweb项目当下最火的三款服务器,tomcat是apache下的一款重量级的服务器,不用多说历史悠久,经得起实践的考验。然而:当下微服务兴起,spring boot ,spring cloud 越来越热的情况下,选择一款轻量级而性能优越的服务器是必要的选择。spring boot 完美集成了tomcat,jetty和undertow,本文将通...转载 2018-07-12 07:35:24 · 554 阅读 · 0 评论