技术学习
未读在工作中的许多场景下,我们都会使用到List这个数据结构,那么同样的有很多场景下需要删除List中的某一个元素或某几个元素,那么我们该如何正确无误地删除List中的元素
知识准备for循环的执行顺序这里借用百度百科的一张图,简明扼要的介绍一下。
Iterator迭代器介绍迭代器:迭代其实我们可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式。Iterator 模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向每次遍历前都需要知道要遍历集合的内部结构。
123456789101112131415161718// 遍历listList list = new ArrayList();list.add(1);list.add(2);for (int i = 0; i < list.size(); i++) { Object object = list.get(i); // do something} // 遍历mapMap<String,String> ...
[TOC]
1. 前言:Aop面向切面编程,是编程中一个很重要的思想本篇文章主要介绍的是SpringBoot切面Aop的使用和案例
2.什么是Aop
AOP(Aspect OrientedProgramming):面向切面编程,面向切面编程(也叫面向方面编程),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
3.使用场景利用AOP可以对我们边缘业务进行隔离,降低无关业务逻辑耦合性。提高程序的可重用性,同时提高了开发的效率。一般用于日志记录,性能统计,安全控制,权限管理,事务处理,异常处理,资源池管理等使用场景
4.为什么需要面向切面编程面向对象编程(OOP)的好处是显而易见的,缺点也同样明显。当需要为多个不具有继承关系的对象添加一个公共的方法的时候,例如日志记录、性能监控等,如果采用面向对象编程的方法,需要在每个对象里面都添加相同的方法,这样就产生了较大的重复工作量和大量的重复代码,不利于维护。面向切面编程(AOP)是面向对象编程的补充 ...
技术学习
未读一个警告首先看下问题的现象,使用@Autowired被idea警告,而使用@Resource则不会:
@Autowired和@Resource的差异来源
@Resource是JSR 250中的内容,发布时间是2006年
@Autowired是Spring2.5中的内容,发布时间是2007年
@Resource是JSR的标准,Spring框架也提供了实现。既然@Autowired是在@Resource之后发布的,应该就有@Resource不能表达的含义或者不能实现的功能。
用法注入方式虽然我们开发中使用最多的方式是属性注入,但其实存在构造函数注意、set方法注入等方式。相比于@Resource支持的属性注入和set方法注入,@Autowired还能支持构造方法注入的形式,@Resource是不行的。
可指定属性@Autowired支持required属性
@Resource支持7个其它属性
bean查找策略
@Autowired是类型优先,如果这个类型的bean有多个,再根据名称定位
@Resource是名称优先,如果不存在这个名称的bean,再去根据类型查找
查找过程@ ...
SpringBoot集成MQTT步骤1. 引入pom依赖123456789101112131415161718192021222324252627282930313233343536373839404142434445464748<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--Spring boot Web容器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--FreeMarker模板视图依赖--> ...
Emqx简介EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 ==Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器==。
EMQ X 设计目标是实现高可靠,并支持承载海量物联网终端的MQTT连接,支持在海量物联网设备间低延时消息路由:
1. 稳定承载大规模的 MQTT 客户端连接,单服务器节点支持50万到100万连接。2. 分布式节点集群,快速低延时的消息路由,单集群支持1000万规模的路由。3. 消息服务器内扩展,支持定制多种认证方式、高效存储消息到后端数据库。4. 完整物联网协议支持,MQTT、MQTT-SN、CoAP、LwM2M、WebSocket 或私有协议支持。
官方文档:https://docs.emqx.cn/broker/v4.3/getting-started/install.html
MQTT是什么?MQTT全称消息队列遥测传输 (Message Queuing Telemetry Transport)。其主要提供了订阅 ...
EMQ X 消息服务器的连接认证和访问控制由一系列的认证插件(Plugins)提供,他们的命名都符合 emqx_auth_ 的规则,在 EMQ X 中,这两个功能分别是指:连接认证: EMQ X 校验每个连接上的客户端是否具有接入系统的权限,若没有则会断开该连接;访问控制: EMQ X 校验客户端每个 发布(Publish)/订阅(Subscribe) 的权限,以 允许/拒绝 相应操作;
EMQ X 消息服务器认证的插件支持按用户名密码、ClientID 或匿名认证三种方式,系统默认开启匿名认证,我们可以配置插件开启认证链:
特别需要注意:
当开启 Username 认证之后,系统会忽略 Client ID 认证和匿名认证;
当开启 Client ID 认证之后,系统会忽略匿名认证;
1. 默认方式——匿名认证搭建完成之后,设备端对接MQTT服务器没有任何的身份认证,直接连接即可。
使用mqtt.fx作为mqtt客户端进行测试:
设置完成之后点击连接即可:
测试订阅主题:
测试发布消息
发布之后看一下是否收到(客户端已订阅此主题):
这种无认证方式的优 ...
EMQX WebHook介绍EMQX WebHook是什么EMQX WebHook 是由 emqx_web_hook (opens new window)插件提供的将EMQX中的钩子事件通知到某个Web服务的功能。WebHook 的内部实现是基于钩子,借助 Webhook 可以完成设备在线、上下线记录,订阅与消息存储、消息送达确认等诸多业务。
它通过在钩子上的挂载回调函数,获取到 EMQX 中的各种事件,并转发至 emqx_web_hook 中配置的 Web 服务器。
以 客户端成功接入(client.connected) 事件为例,其事件的传递流程如下:
123 Client | EMQX | emqx_web_hook | HTTP +------------+=============>| - - - - - - -> - - - - - - - ->===========> | Web Server | | Broker | | Reque ...
经验教程
未读要使用国内镜像安装nvm
1:登陆云服务器这一步基本都没问题,
2:输入安装nvm命令:
1curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
3:安装的时候 或许会出现错误:# Failed to connect to raw.githubusercontent.com port 443
原因:由于某些你懂的因素,导致GitHub的raw.githubusercontent.com域名解析被污染了
解决办法:使用国内镜像安装,命令如下
镜像安装1curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash -s -- --mirror=https://npm.taobao.org/mirrors/nvm
刷新配置1source ~/.bashrc
1nvm --version
安装最新的node LTS版本
1nvm install --lts
安装前可以通过:
1n ...
一、进程间的通信方式1. 进程间通信的概念每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把 数据 从 用户空间 拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)
1.1. 进程通信的目的:
数据传输
一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间
共享数据多个进程想要操作共享数据,一个进程对共享数据
通知事件一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
资源共享多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。
进程控制有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
1.2. Linux 进程间通信(IPC)的发展linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的 ...
技术学习
未读认识cpu、核、进程与线程
author:lcw
物理CPU
物理CPU是相对于虚拟CPU而言的概念,指实际存在的CPU处理器,安装在PC主板或服务器上。
物理核
CPU中包含的物理内核(核心)个数,比如多核CPU,单核CPU(古老的CPU)。这个多核或者单核已经集成在CPU内部了。
在linux系统下面的/proc/cpuinfo文件的条目中:
有多少个不同的physical id就有多少个物理CPU。
cpu cores记录了对应的物理CPU(以该条目中的physical id标识)有多少个物理核。
1234567891011121314[root@zyshanlinux-01 ~]# cat /proc/cpuinfoprocessor : 0vendor_id : GenuineIntelcpu family : 6model : 60model name : Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHzstepping : 3microcode : 0x22cpu MHz ...