暂时未有相关云产品技术能力~
日拱一卒无有尽,功不唐捐终入海!
MyBatis框架概述 mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。
Mybatis框架概述 Mybatis是持久层的框架,它内部封装了jdbc,使开发的时候只需要关注sql语句本身,不需要话费精力去处理加载驱动、创建连接、创建statement等。下面我们也是通过一个实例来对它进行分析。 首先编写一个SqlMapConfig.xml
一、GC-Roots 对象主要是在堆上分配的,我们可以把它想象成一个池子,对象不停地创建,后台的垃圾回收进程不断地清理不再使用的对象。当内存回收的速度,赶不上对象创建的速度,这个对象池子就会产生溢出,也就是我们常说的 OOM。 把不再使用的对象及时地从堆空间清理出去,是避免 OOM 有效的方法。那 JVM 是如何判断哪些对象应该被清理,哪些对象需要被继续使用呢?
一、jps,查看虚拟机进程的命令 参数说明 -q:只输出进程 ID -m:输出传入 main 方法的参数 -l:输出完全的包名,应用主类名,jar的完全路径名
最前面的数字“33.125:”和“100.667”代表了GC发生的时间,这个数字的含义是从Java虚拟机启动以来经过的秒数 GC日志开头的“[GC” "[FullGC"说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是老年代GC的,如果有“Full”,说明这次GC是发生了stop-the-world的。 接下来“[DefNew”、"[Tenured" “[Perm”标识GC发生的区域,这里显示的区域名称与使用的GC收集器是密切相关的,例如上面样例所使用的Serial收集器中的新生代名为“Default New Generation”,所以显示为“DefNew”。如果是ParNew收
一、java虚拟机内存模型是java程序运行的基础,为了能使java应用程序正常运行,JVM虚拟机将其内存分为程序计数器、虚拟机栈、本地方法栈、java堆和方法区。 程序计数器用于存放下一条运行的指令; 虚拟机栈和本地方法栈用于存放函数调用堆栈信息; java堆用于存放java程序运行时所需的对象;
Java7版本的ConcurrentHashMap Java8版本的ConcurrentHashMap 红黑树的特点是,每个节点都是带有颜色属性的二叉查找树,红黑树的本质是对二叉查找树BST的一种平和策略。 红黑树的一些其他特点: 每个节点要么是红色的,要么是黑色的,但根节点永远是黑色的
一、为什么需要AQS?以及AQS的作用和重要性? AQS(AbstractQueuedSynchronizer)的重要性 AQS被用在ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch、ThreadPoolExcutor的Worker中都有运用(JDK1.8)。AQS是这些类的底层原理,JUC包里很多重要的工具类背后都离不开AQS框架。
一、CAS简介 CAS是原子类的底层原理,同时也是乐观锁的原理,CAS全称Compare-And-Swap,中文含义“比较并交换”,它是一种思想,一种算法。 特点,避免使用互斥锁, 当多个线程同时使用CAS更新同一个变量时, 在多线程的情况下,为了保证并发的安全性,我们可以使用互斥锁,而CAS的特点是避免使用互斥锁,当多个线程同时使用CAS更新同一个变量时,只有其中一个线程能够操作成功,而其他线程都会更新失败。不过和同步互斥锁不同的是,CAS不会让失败的线程阻塞,而是被告知这次由于竞争而导致的操作失败,但还可以再次尝试。
java中的锁不同的分类,只是从不同的角度标准去分类的。一把锁也有可能同时占有多个标准,符合多种分类,比如ReentrantLock既是可中断锁,又是可重入锁。根据分类标准,我们把锁分为以下七个大类别。 一、偏向锁、轻量级锁、重量级锁 二、可重入锁、非可重入锁 三、共享锁、独占锁
我们先了解下ThreadLocal有哪些使用场景,然后再继续看它的内部原理 一、ThreadLocal有两种典型的使用场景: 1、ThreadLocal用做保存每个线程独享的对象,它会为线程对象创建一个副本,这样每个线程都可以修改自己所有拥有的副本,不会影响其他线程的副本,确保了线程安全。 2、ThreadLocal用作每个线程内需要独立保存信息以便供其他方法更方便地获取该信息的场景。每个线程获取到的信息可能都是不一样,前面执行的方法在保存了这个信息之后,后续的方法就可以通过ThreadLcoal直接获取到,避免了传参,类似一个全局变量的概念。 场景1 通常用于保存线程不安全的工具类
Java内存模型(Java Memory Model,简称JMM),即Java虚拟机定义的一种用来屏蔽各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能够达到一致的内存访问效果的内存模型。本篇文章大致涉及到五个要点:1、Java内存模型的基础,主要介绍JMM抽象结构;2、Java内存模型中内存屏障;3、Java内存模型中的重排序;4、happens-before原则;JMM相关的三个同步原语(synchronized,volatile,final)。
业务流程分为 3 个阶段:产品研发阶段、日常运营/运维阶段、售后服务阶段。这三个阶段涉及许多部门角色的协作,包含但不限于产品经理、研发人员、质量保障人员、客服人员、SRE、业务运营人员、法务人员、商务人员、财务人员等。
价值度量与运营 无论是保障质量还是提升交付效率,都是在“如何正确地进行产品交付”这个维度上,那么如何确保产品本身是正确的呢?即,产品本身传递了正确的价值,这就需要对价值进行度量
管理学大师德鲁克曾说过“如果你无法衡量它,就无法管理它(If you can’t measure it, you can’t manage it)”。可见,要想有效管理某事务,就需要将它全面且有效地度量起来,而要想针对某个方面进行改进,就需要有针对性地运营。 质量度量体系 大家都知道作为测试的主要任务是质量保障,保障线上环境没有故障和缺陷,最终交付给真实用户的质量,即交付质量。那么,质量度量是不是只关注交付质量指标就足够了呢?答案显然是否定的。因为如果只关注交付质量,往往达不到提升交付质量的目的。比如,你每天关注线上交付质量,忙着一个又一个的项目,一段时间过
项目介绍 ChaosBlade 是阿里巴巴开源的混沌工程原理和混沌实验模型的实验注入工具。 ChaosBlade 使用比较简单,而且支持丰富的实验场景,场景包括: 基础资源:比如 CPU、内存、网络、磁盘、进程等实验场景; Java 应用:比如数据库、缓存、消息、JVM 本身、微服务等,还可以指定任意类方法注入各种复杂的实验场景; C++ 应用:比如指定任意方法或某行代码注入延迟、变量和返回值篡改等实验场景; Docker 容器:比如杀容器、容器内 CPU、内存、网络、磁盘、进程等实验场景; 云原生平台:比如 Kubernetes 平台节点上 CPU、内存、网络、磁盘、进程实验场景,Pod
一、下载安装 1、下载 官网下载地址:Grafana 根据自己的系统版本和配置,下载对应的包,官方提供了如下说明,可直接按照说明进行下载:
Airtest是网易开源的一个跨平台的UI自动化测试框架。 该项目分为AirtestIDE、Airtest、Poco、Testlab四个部分,基于python脚本的方式,用于web、windows程序、app自动化测试。 AirtestIDE:跨平台的UI自动化测试编辑器,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写脚本;
想必工作多年的研发工程师,有很多都是想成为架构师。但是并不是每一个研发都有机会参与架构设计,很多公司不一定会主动培养你成为架构师。但是我觉得要先掌握架构师的知识体系,然后通过实践进行校验,自己把自己培养成一名架构师。 架构师需要具备的能力模型,需要那几部分组成呢
一、前端优化 前端的优化主要有三个环节:减少请求次数、页面静态化、边缘计算 减少请求次数:减少前端脚本与后端服务的请求次数,有三种方案 (1)增加缓存控制:前端开发经常设置HTML的缓存控制头部(Cache-Control头),这样浏览器在请求同一个文件的时候,只访问本地保存的资源副本,从而加速文件的访问速度。
一、一次请求全链路图 步骤一:DNS解析,,用户在浏览器输入URL按回车,请求会进行DNS查找,浏览器通过DNS解析查到域名映射的IP地址,查找成功后,浏览器会和该IP地址建立连接。对应的性能指标为:DNS解析时间。对于这个指标,我们可以通过DNS缓存或DNS预解析,适当增大域名的TTL值来增大DNS服务器缓存域名的时间,进而提升了缓存的命中率。也可以用dns-prefetch标签实现域名的预解析,让浏览器在后台把要用的DNS请求提前解析,当用户访问的页面中包含了预解析的域名时,再次解析DNS就不会有延迟了。 步骤二:建立TCP连接,由于HTTP是应用层协议,TCP是传输层协议,所以HTT
对于秒杀架构的设计,需要遵循以下个原则: 东西不能超卖、 下单成功的订单数据不能丢失、 服务器和数据库不能挂 尽量不让机器人抢走 整体的思路 秒杀架构的设计方案就是一个不断过滤请求的过程,从系统架构层面来说,秒杀系统的分层思路如下。
一次完整的 RPC 流程 因为 RPC 是远程调用,首先会涉及网络通信, 又因为 RPC 用于业务系统之间的数据交互,要保证数据传输的可靠性,所以它一般默认采用 TCP 来实现网络数据传输。 网络传输的数据必须是二进制数据,可是在 RPC 框架中,调用方请求的出入参数都是对象,对象不能直接在网络中传输,所以需要提前把对象转成可传输的二进制数据,转换算法还要可逆,这个过程就叫“序列化”和“反序列化”。
引入 MQ 消息中间件最直接的目的是:做系统解耦合流量控制,追其根源还是为了解决互联网系统的高可用和高性能问题。 系统解耦:用 MQ 消息队列,可以隔离系统上下游环境变化带来的不稳定因素,比如京豆服务的系统需求无论如何变化,交易服务不用做任何改变,即使当京豆服务出现故障,主交易流程也可以将京豆服务降级,实现交易服务和京豆服务的解耦,做到了系统的高可用。
当我们在浏览器输入一个URL的时候,域名系统(Domain Name System)就开始工作。域名系统是将互联网资源和地址关联起来的一个分布式数据库。 DNS和统一资源定位符,域名系统本质就是定位资源,互联网中的各种资源,比如视频、图片、文件、网页。。。。 下面就是一个URL的示例:
IPv4协议是IP协议的第4个版本,IPv4为传输层提供Host-To-Host,同时IPv4需要底层的数据链路层的支持。 IP协议不负责数据的可靠性,传输数据时,数据被切分为一个个数据封包,IP协议上层的传输层协议会对数据进行一层拆分,然后再IP协议会在一次拆分,两次拆分是为了适合底层的设备。
TCP和UDP都是传输层协议。TCP最核心的是提供了可靠性,而UDP核心是灵活性高。HTTP1.0和2.0用的是TCP,到了HTTP3.0用的就是UDP了。 UDP应用数据传输、网络控制、音视频、Web技术应用较多。 UDP,目标是在传输层提供直接发送报文的能力,Datagram是数据传输的最小单位,UDP协议不会帮助拆分数据,它的目标只有一个,就是发送报文。 UDP的报文格式,只有五个部分组成。
dockerfile用于构建docker镜像的,部署一个用于运行你所需的容器环境。相当一个脚本,通过dockerfile自己的指令,来构建软件依赖、文件依赖、存储、 定制docker镜像的方式有两种: 手动修改容器内容,导出新的镜像 基于Dockerfile自行编写指令,基于指令流程创建镜像。
docker run 等于创建+启动 docker run 镜像名,如果镜像不存在本地,则会在线去下载该镜像。 注意:容器内的进程必须处于前台运行状态,否则容器就会直接退出,自己部署一个容器运行,命令不得后台运行,前台运行即可。 如果容器内,什么事也没做,容器也会挂掉。容器内,必须有一个进程在前台运行。 我们运行nginx基础镜像,没有运行任何程序,因此容器直接挂掉 docker run nginx
获取镜像,镜像托管仓库,好比yum源一样 默认的docker仓库是,dockerhub,有大量的优质的镜像,以及用户自己上传的镜像,centos容器vim nginx,提交为镜像,上传到dockerhub。 docker search centos 查看本地镜像 docker images docker image ls
centos7系统 包括2部分, linux内核,作用是提供操作系统的基本功能,和机器硬件交互,如何读取磁盘数据,管理网络,使用C编写的,由linus的开发团队,内核只提供操作系统的基本功能和特性,如内存管理、进程调度、文件管理等等。 系统发行版,作用是提供软件功能,例如centos发行版,ubuntu发行版,suse发行版。centos发行版,yum安装包管理;ubuntu发行版。
Docker安装部署 Docker引擎 运行镜像生成容器。应用程序跑在容器中 Docker Daemon 安装使用Docker,得先运行Docker Daemon进程,用于管理Docker,如: - 镜像 images - 容器 containers - 网络 network - 数据卷 Data Volumes
当产品运行在内部的虚拟化平台中,如openstack,也就是KVM虚拟化,创建虚拟机,但是不断增加的云端应用,增加了对硬件资源的消耗,不断的创建虚拟机,消耗了大量的硬件资源。 那么如何高效的利用硬件资源实现云服务呢
一、纯物理服务器部署特点: 部署非常慢 成本非常高 资源浪费 难于迁移和扩展 可能会被限定硬件厂商
docker 虚拟化,不是在在物理机上再去安装一个系统,而是直接启动应用级别的程序,例如启动三个tomcat,三个容器 ,对外访问后面讲解 镜像:docker的镜像其实就是模板,跟我们常见的iso镜像类似,上一个样板 容器:使用镜像常见的应用或者系统,我们称之为容器,应用的话就是tomcat nginx centos系统 都可以叫容器,容器就是一个应用, 仓库:仓库是存放镜像的地方,分为公开
Kafka将主题拆分为多个分区,不同的分区存在不同的服务器上,这样就使kafka具有拓展性,可以通过调整分区的数量和节点的数量,来线性对Kafka进行拓展,分区是一个线性增长的不可变日志,当消息存储到分区中之后,消息就不可变更,kafka为每条消息设置一个偏移量也就是offset,offset可以记录每条消息的位置,kafka可以通过偏移量对消息进行提取,但是没法对消息的内容进行检索和查询,偏移量在每个分区中是唯一的不可重复,并且它是递增的,不同分区间偏移量可以重复。
什么是k8s,解决什么问题。
存储日志数据集(HDFS)数据仓库构建(Hive)数据分区表构建数据预处理 (Spark计算引擎)-使用Zeppelin进行写SQL订单指标分析Sqoop数据导出到传统数据库(Mysql)Superset数据可视化项目架构架构方案:1、基于Hadoop的HDFS(数据存储)文件系统来存储数据2、为了方便进行数据分析,将这些日志文件的数据映射为一张一张的表,所以,我们 基于Hive(数据仓库工具)来构建数据仓库,所有的数据,都会在Hive下进行管理,提高数据处理的性能。
Apache Zeppelin是一款基于Web交互式框架,支持多种语言,Scala、SparkSQL、Markdown,SQL、Shell、Python等。可以使用Zeppelin链接SparkSQL。Zeppelin提供数据分析、数据可视化。打开浏览器 访问,xxxx:8090。Zeppelin安装和使用。一键启动集群中所有的组件。
Apache Spark是一个快速的,多用途的集群计算系统,相对于Hadoop MapReduce将中间结果保存在磁盘中,Spark使用了内存保存中间结果,能在数据尚未写入硬盘时在内存中进行计算,同时Spark提供SQL支持。Hive是建立在Hadoop上的数据仓库基础架构,它提供了一系列的工具,可以存储、查询、分析存储在分布式存储系统中的大规模数据集。Hive定义了简单的类SQL查询语言,通过底层的计算引擎,将SQL转为具体的计算任务进行执行。它将计算分为两个阶段,分别为Map和Reduce。
数据仓库,英文名称Data Warehouse,可简写为DW和DWH,数据仓库顾名思义,是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,它为企业提供一定的BI(商业智能)能力,指导业务流程改进、监视时间、成本、质量以及控制。数据库:数据库是面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对记录进行查询、修改。数据仓库的输入方式各种各样的数据源,最终的输出用于企业的数据分析、数据挖掘、数据报表等方向。数据库是面向事务的设计,数据仓库是面向主题设计的。数据库和数据仓库区别。
HDFS文件系统可存储超大文件,时效性稍差HDFS具有硬件故障检测和自动快速恢复功能HDFS为数据存储提供很强的扩展能力HDFS存储一般为一次写入,多次读取,只支持追加写入,不支持随机修改HDFS可在普通机器上运行HDFS采用的Master/Slave架构一个HDFS集群有两个重要的角色,分别是NameNode 和DataNodeHDFS的四个基本组件:HDFS Client、NameNode、DataNode、和SecondaryNameNode1、Client就是客户端文件切分,文件上传HDFS的时候,
集群:集群是指一组独立的计算机系统构成的一多处理器系统,它们之间通过网络实现进程间的通信,让若干台计算机联合起来工作(服务),可以是并行的,也可以是做备份的。其中重点的包括:Kafka、Spark、Flink、Hive、HBase、Zookeeper、Yarn、HDFS、MapReduce、集群模式主要用于生产环境部署,会使用N台主机组成一个Hadoop集群,这种部署模式下,主节点和从节点会分开部署在不同的机器上。开源社区版:指由Apache软件基金会维护的版本,是官方维护的版本体系,版本丰富,兼容性差。
大数据概论和职业规划Linux服务器系统Hadoop概论HDFS分布式文件系统Hive数据仓库SparSQL指令Zepplin框架Sqoop框架Superset数据可视化大数据数仓实战-didi出行大数据概念大数据特点大数据应用场景大数据分析业务步骤大数据职业规划大数据学习路线。