java多线程实现生产者、消费者模式 简述生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向缓存区里生产数据,而消费者从缓存区里取出数据什么是生产者? 生产者指的是负责生产数据的模块。什么是消费者? 消费者指的是负责消费数据的模块。什么是缓冲区? 消费者不能直接使用生产者的数据,它们之间有个缓冲区。生产者将生产好的数据放入缓冲区,消费者从缓冲区取要处理的数据。注:上面的的模块指的可能是:方法、对象、线程等。缓冲区是实现并发协助的核心,设置缓...
设计模式之建造者模式 简述建造者模式(又称生成器模式)使用多个简单的对象一步一步构建成一个复杂的对象。这种设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。如在开发过程中需要创建一个复杂的对象(计算机对象),这个复杂对象由多个子部件按一定的步骤组合而成,计算机是由 CPU、主板、内存、硬盘、显卡、显示器、键盘等部件组装而成的,一般买电脑我们不会自己去组装计算机,而是将计算机的配置要求告诉销售,销售安排技术人员去组装计算机
设计模式之原型模式(java代码实现) 简述原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口(在java中实现Cloneable),,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。还有在spring中的bean的scope中就有使用到原型模
设计模式之简单工厂模式 简述简单工厂模式属于创建类模式(主要关注怎样创建对象,特点是将对象的创建和使用分离),是工厂模式中的一种,而工厂模式又可以分为简单工厂模式、工厂方法模式、抽象工厂模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式中最简单使用的一种模式。工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点介绍我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要
Android开发-DataBinding基本使用 简述Jetpack是谷歌发布的一系列辅助android开发者的实用工具,以帮助开发者构建出色的 Android 应用。Jetpack 里面包含4个部分的组件:Architecture、Foundation、Behavior 、UI 。数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。作用:1.将布局组件与源数据绑定,使源数据变化的同时布局组件及时同步更新。2.减少Activity中View的定义(private View view)与初
Android开发-多线程的创建方式 两种基本创建方式继承Thread类,覆写run方法。通过实现Runnable接口,或继承自Thread类,覆写run方法。1.public class MainActivity extends AppCompatActivity { ActivityMainBinding activityMainBinding;protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst
Spring Cloud Ribbon负载均衡服务调用 概述Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具。Ribbon客户端组件提供了一系列完善的配置项,如连接超时,重试等。简单地说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动帮我们基于某种规则(如轮询,随机连接等)去连接这些机器,我们很容易使用Ribbon实现自定义的负载均衡算法。Ribbon官网:https://github.com/Netflix/ribbon(维护模式)负载均衡的表现就是,将用户的请求
Java使用雪花算法实现生成全局唯一id 简介雪花的基本形状是六角形,但是大自然中却几乎找不出两朵完全相同的雪花我们生成ID的方式有多种,比如说UUID,比如说自动增长...使用场景随着业务的增长与用户数量的增长,单个服务越来越多,数据库也分得越来越细,有些一个业务分成好几个库,这时候自增主键或者序列之类的主键id生成方式已经不再满足需求,分布式系统中需要的是一个全局唯一的id生成规则 雪花算法的结构如下(每部分用-分开):0 - 0000000000 0000000000 0000000000 0000000000 0
Java UDP通信 TCP/IP协议的传输层除了一个TCP协议外,还有一个UDP协议。UDP协议是用户数据报协议的简称,它作用也是网络数据的传输。如何选择TCP协议和UDP协议, UDP协议虽然有时不太可靠,但如果可以接受掉包的情况,UDP协议有更大的优势。在Java中使用UDP协议发送数据的几个步骤使用DatagramSocket类创建一个套接字,然后使用DatagramPcket类创建要发送的数据包,之后使用DatagramSocket类中send()方法发送数据包。如果是接收UDP数据包的话,先使用Datagra
Spring Cloud-Consul服务注册与发现 Consul简介Consul官网:https://www.consul.io/introConsul是一套开源的分布式服务发现和配置管理系统,有HashiCorp公司使用Go语言开发,提供了微服务系统中服务治理、配置中心、控制总线等功能。每个功能可以单独使用,也可以一起使用以构建全方位的服务网格,Consul提供了一套完整的服务网格解决方案。优点:基于raft协议,简洁;支持健康检查,同时支持HTTP和DNS协议,支持跨数据中心的WAN集群,提供了图形化界面;支持跨平台,支持Linux、Mac、
安装使用Docker 什么是DockerDocker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是使用沙箱机制,相互之间没有任何接口,更重要的是容器性能开销极低。优点:快速部署 响应式部署和扩展 隔离性好 成本低官网:https://www.docker.com/Github Docker 源码:https://gi..
JQ一键分享到QQ空间、QQ好友、微博等 记录最近做项目遇到一个需求:网页添加一键分享到QQ好友、微信的功能实现此功能可以使用Share.js插件来实现。该插件的开源包下载地址如下https://github.com/overtrue/share.js/下载后可将src文件夹复制到项目下,引入share.min.css 与 social-share.min.js两个文件。js相关配置 var $config = { url : '',// 网址,默认使用 window.location.href
SpringCloud-Consul服务注册与发现 Consul简介Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源. Consul 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对. 命令行超级好用的虚拟机管理软件 vgrant 也是 HashiCorp 公司开发的产品. 一致性协议采用 Raft 算法,用来保证服务的高可用. 使用 GOSSIP 协议管理成员和广播消息, 并且
SpringCould-Zookeeper服务注册与发现 概念服务注册中心:服务注册中心是服务实现服务化管理的核心组件, 主要用来存储服务信息。类似于目录服务的作用,比如提供者 url 串、路由信息等。是 SOA 架构中基础之一。服务注册中心的作用: 服务的注册、服务的发现常见的注册中心:Zookeeper、Eureka、consul、还有阿里的Nacos服务注册中心解决的痛点:服务与服务之间依赖关系管理难的问题。因为Eureka 2.0已经停更了,如果非要使用Eureka的话,那需要自己维护,这对于追求效率的那是不可接受的,或者就换其他方案。
nginx安装以及实现高可用负载均衡 概念Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。在高连接并发的情况下,Nginx是Apache服务器不错的替代品。正向代理正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特
Centos6安装RabbitMQ RabbitMQ概念RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。RabbitMQ的安装注:使用Package Cloud安装时,要注意根据自己的系统版本号来安装对应的erlanghttps://packagecloud.io/rabbitmq/e
Python 对象 Python类对象的创建以及使用Python中,使用class语句只能创建一个类,不能创建类的对象,创建类的对象需要实例化。对类的实例化格式如下:类名(参数...)在创建类时,如没有创建_init_()构造方法或_init_()构造方法只有一个self参数时,则实例化类对象时可以不传入参数。创建一个名为book的类,并对其实例化代码示例class book:# 定义...
Java使用Stock传输视频 在网络编程使用套接字时,有时需要使用Socket传输视频、音频文件。如一个客户端将视频文件发送到服务端。创建一个服务端窗体类,该类继承JFream类,关键代码如下下面是服务端窗体类的构造方法,主要作用是创建窗体界面,获取选择文件信息,其中当点击发送按钮后,定义数据输入流对象后,创建输入流对象,分别将文件名、文件大小写入输出流,定义一个字节数组,将文件读取到字节数组中。public Se...
Java非对称加密 非对称加密算法(RSA)是第一个既可以用于加密数据也可以应用数字签名的算法。RAS算法相对于DES和AES等对称加密算法在速度上要慢很多。使用RSA加密数据时需要使用密钥对,也就是一个公钥,一个私钥。如A、B双方发送数据,A生成密钥对,将公钥发送给B,A将数据用私钥加密后发送给B,而B用A提供的公钥对数据进行解密。如果是B向A发送数据,B用公钥加密数据并发送给A,A使用私钥对数据进行解密。例:...
Java对称加密 BASE64加解密BASE64是一种比较基本、简单的加密算法,其实BASE64主要作用不是用于加密,BASE64是把与原始的数据转换成另一种编码格式,这样方便在网络上传输。所以严格来说,BASE64并不是安全的加密解密算法,但通过BASE64编码过后原来的数据也会改变成非原来的数据的字符。例 /*该方法创建BASE64Encoder对象后调用encodeBuffer()方法对数据...