暂时未有相关云产品技术能力~
公众号:小盒子的技术分享
所谓低代码开发,即无需编码或只需少量代码就可以快速生成应用程序。也就是说,企业的应用开发通过“拖拉拽”的方式即可完成。
使用 vim 编辑器编辑 nginx 配置文件时,无法实现”语法高亮”功能,也就是说,默认情况下,使用 vim 编辑 nginx 配置文件时,没有彩色的语法着色。
iptables 是用于配置 Linux 2.4.x 及更高版本包过滤规则集的用户空间命令行程序。它针对系统管理员。 由于网络地址转换 (NAT) 也是从包过滤规则集配置的,iptables 也用于此。 iptables 包还包括 ip6tables。ip6tables 用于配置 IPv6 包过滤器。
redefine的class不能修改、添加、删除类的field和method,包括方法参数、方法名称及返回值; redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置。
arthas 有多种启动方式: java agent 像 skywalking 一样 as.sh 利用 arthas 的 shell 启动 或者 java -jar 启动 sprintboot starter 集成到应用中启动 我们采用最方便的把 arthas 集成到 springboot-starter 的应用中启动
经过华为和 skywalking 核心开发者的确认,版本对应关系如下: istio 1.3 不支持生产 skywalking 使用 istio 1.7以上 skywalking 链路拓扑可以商用 istio 1.8 skywalking 日志商用 istio 1.11 trace 商用
通过将传统微服务架构的这些控制面功能解耦到 istio,可以让微服务应用本身专注于业务开发,是一个比较简的单体 springboot 应用。再结合 k8s 的高扩展性,研发整体的迭代速度和运维效率还是比较高的,缺点是无论是 k8s 还是 istio ,学习成本偏高,需要团队至少 2 人具有专业知识,对于招聘成本、系统升级都有风险。
Apache Log4j 2是 Log4j 的升级版,对 Log4j 1.x 进行了重大改进,并提供了 Logback 中可用的许多改进,同时解决了 Logback 体系结构中的一些固有问题。
执行swapoff临时关闭swap。重启后会失效,若要永久关闭,可以编辑/etc/fstab文件,将其中swap分区一行注释掉
MySQL默认采用自动提交(AUTOCOMMIT)模式。也就是说,如果不是显式地开始一个事务,则每个查询都被当作一个事务执行提交操作。在当前连接中,可以通过设置AUTOCOMMIT变量来启用或者禁用自动提交模式
TCC 服务在未收到 Try 请求的情况下收到 Cancel 请求,这种场景被称为空回滚;空回滚在生产环境经常出现,用户在实现TCC服务时,应允许允许空回滚的执行,即收到空回滚时返回成功。
AT 模式的一阶段、二阶段提交和回滚均由 Seata 框架自动生成,用户只需编写“业务 SQL”,便能轻松接入分布式事务,AT 模式是一种对业务无任何侵入的分布式事务解决方案。
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
springboot 现在官方默认的数据库连接池是 HikariCP,HikariCP的性能从测试的数据上来看也是最高的。
Spring Cloud Alibaba 主要包含 Sentinel、Nacos、RocketMQ、Dubbo、Seata 等组件。 二代引入了 Spring Cloud Alibaba
在更通用的场景下我们会使用 NGINX 这样的软件做前置,用来处理SLB负载均衡过来的流量,作用是反向代理、集群负载均衡、转发、日志收集等功能。
skywalking-nginx-lua[2] 这是 skywalking 的另一个项目,可以通过它来对nginx进行监控。skywalking-nginx-lua 是使用lua来织入 agent 的。所以要求你的 nginx 要么有 lua 模块,要么用 openResty 这样的自带 Lua 功能模块的软件。
本文介绍docker安装和gitlab-ee的破解方法
我们在第一次使用Scrum进行项目管理时,并没有看Scrum的规则,从直觉上做了以下几件事,巧合的是,跟Scrum中项目的前期准备sprint0 很多地方是一致的,这让我们后期切到Scrum更加顺滑。
大量的json解析错误,根据日志情况分析,原因是日志数据传输到logstash之后被截断成了多条数据,于是有的数据就解析异常了,自然无法正常到归集到es的索引文档中。
Callable与Runnable的功能大致相似,但是call()函数有返回值. Callable一般是和ExecutorService配合来使用的
如果程序中不再持有线程池的引用,并且线程池中没有线程时,线程池将会自动关闭。 线程池自动关闭的两个条件: 线程池的引用不可达; 线程池中没有线程。
spring cloud 现在已经是一种标准了,各公司可以基于它的编程模型编写自己的组件 ,比如Netflix、阿里巴巴都有自己的一套通过spring cloud 编程模型开发的分布式服务组件 。 Spring Cloud Alibaba 主要包含 Sentinel、Nacos、RocketMQ、Dubbo、Seata 等组件。
每次构建项目时,Maven 将自动获取最新的快照。虽然,快照的情况下,Maven 在日常工作中会自动获取最新的快照, 你也可以在任何 maven 命令中使用 -U 参数强制 maven 现在最新的快照构建。
常用监控手段: 按监控层次分:业务监控、应用监控和基础监控等; 按监控日志来源分:基于日志文件监控、基于数据库监控和基于网络监控等; 按监控领域分:前端监控、后端监控、全链路监控、业务间监控等; 按监控目标分:系统故障监控、业务指标监控、应用性能监控、用户行为监控、安全合规监控等。
产品同学将需求分析完和开发同学进行需求评审,评审完毕后开发同学开始基于需求进行设计,一般会落到数据库设计,将库表设计完毕后,再向上进行分层开发。如果是前后端分离的项目,会在前期约定接口,进行基于契约的并行开发。所以,我们称这种方式为数据驱动开发,或基于数据模型的开发。
本文介绍Redis 缓存设计:穿透优化、无底洞优化、雪崩优化、热点key 重建优化
如何再从int 转成ipv4 字符串呢:将 int 值的 32 位分为 4 个 8 位数字,然后这 4 个 8 位的数字用 0~255 的数字进行表示,用点号分隔即可。我们也基于位运算,7 行代码即可实现。
volatile语义中的内存屏障volatile的内存屏障策略非常严格保守,非常悲观且毫无安全感的心态:在每个volatile写操作前插入StoreStore屏障,在写操作后插入StoreLoad屏障;在每个volatile读操作前插入LoadLoad屏障,在读操作后插入LoadStore屏障;由于内存屏障的作用,避免了volatile变量和其它指令重排序、线程之间实现了通信,使得volatile表现出了锁的特性。
ArrayList 对于随机位置的add/remove,时间复杂度为 O(n),但是对于列表末尾的添加/删除操作,时间复杂度是 O(1). LinkedList对于随机位置的add/remove,时间复杂度为 O(n),但是对于列表 末尾/开头 的添加/删除操作,时间复杂度是 O(1).
PERT(Program Evaluation and Review Technique)即计划评审技术,最早是由美国海军在计划和控制北极星导弹的研制时发展起来的。PERT技术使原先估计的、研制北极星潜艇的时间缩短了两年。
Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你使用maven dependency引入spring jar包时它就在工作了。
利用队列做BFS,有关二叉树层次遍历的思路都可以套用。
AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制 AQS 是用 CLH 队列锁实现的,即将暂时获取不到锁的线程加入到队列中。
RDB 持久化机制,是对 redis 中的数据执行周期性的持久化。 AOF:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,在 redis 重启的时候,可以通过回放 AOF 日志中的写入指令来重新构建整个数据集。
随着nums的增大,Lock+Condition的运行时长比Semaphore越短。看起来Lock+Condition的性能更好些。
ZooKeeper是用于维护配置信息,命名,提供分布式同步以及提供组服务的集中式服务。所有这些类型的服务都以某种形式被分布式应用程序使用。每次实施它们时,都会进行很多工作来修复不可避免的错误和竞争条件。由于难以实现这类服务,因此应用程序最初通常会跳过它们,这会使它们在发生更改时变得脆弱并且难以管理。即使部署正确,这些服务的不同实现也会导致管理复杂。
InnoDB 叶节点包含了完整的数据记录。这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有)
根据操作的数据类型,可以将JUC包中的原子类分为5类,基本类型 使用原子的方式更新基本类型,数组类型 使用原子的方式更新数组里的某个元素,引用类型,对象的属性修改类型,JDK1.8新增。
synchronized与wait()和nitofy()/notifyAll()方法相结合可以实现等待/通知模型,ReentrantLock同样可以,但是需要借助Condition,且Condition有更好的灵活性,
工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的接口, 允许子类决定实例化对象的类型。
在高性能的I/O设计中,有两个著名的模型:Reactor模型和Proactor模型,其中Reactor模型用于同步I/O,而Proactor模型运用于异步I/O操作。实际上Netty线程模型就是Reactor模型的一个实现。
当工作于多线程中的对象使用 ThreadLocal 维护变量时,ThreadLocal 为每个使用该变量的线程分配一个独立的变量副本。 所以每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。从线程的角度看,这个变量就像是线程的本地变量,这也是类名中 “Local” 所要表达的意思。
PDF文件下载链接: https://pan.baidu.com/s/1wZpNMANjZyQYzB4CfUEr6w 提取码: krjv
1.8之前的 ConcurrentHashMap是在1.7HashMap的基础上实现了线程安全的版本。采用分段锁的概念,使锁更加细化。它默认将Hash表分为16个分段,segments数组的长度最大为65536,最大容量 1 << 30。
HashMap是用拉链法解决的Hash冲突问题。HashMap的数据结构 ,前两篇文章有介绍过,jdk1.7 是数组+链表的结构 ,jdk1.8是数组+链表+红黑树。正是为了解决Hash冲突以及平衡查询、插入等操作的效率HashMap的作者才将HashMap设计成这种数据结构
我们知道int 的极限最大值 Integer.MAX_VALUE 是2的31次方减1,即2147483647,如果 1 << 30 改为 1 << 31 ,由于int是有符号数,这个值将为 -2147483648,而且hashMap的容量都是2的整数次幂,也就只能是2的30次方了。然而这并不是HashMap的最大容量。
loadFactor即装载因子,装载因子的计算公式是:散列表的装载因子 = 填入表中的元素个数 / 散列表长度,如果有人问你0.75的分子分母是什么,依据这个公式回答就可以了。一般情况下,我们会尽可能保证散列表中有一定比例的空闲槽位。我们用装载因子来表示空位的多少。
Spring中DAO和Service默认都是以单实例的bean形式存在,Spring通过ThreadLocal类将有状态的变量(例如数据库连接Connection)本地线程化,从而做到多线程状况下的安全。
泛型的设计初衷:是为了减少类型转换错误产生的安全隐患,而不是为了实现任意化。 泛型可以应用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法