11 2020 档案

摘要:案例一:老年代内存泄漏 某晚八点收到报警邮件,一看是OOM: ​ 打开 hickwall查看指标:JVM各项指标中 老年代在持续增长(从上次发布10月30号到11月10号的 12天 一直在增长,存在内存泄露迹象) ​ 但并没有达到老年代的上限,当时总内存4G,按照默认80%的分配比例,java虚拟机 阅读全文
posted @ 2020-11-28 23:06 Java程序员进阶 阅读(352) 评论(0) 推荐(0) 编辑
摘要:前言 MyBatis是常见的Java数据库访问层框架。在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足之处,在使用中容易引起脏数据,形成一些潜在的隐患。个人在业务开发中也处理过一些由于MyBatis缓存引发的开发问题,带着个人的兴趣,希望从应用 阅读全文
posted @ 2020-11-28 20:57 Java程序员进阶 阅读(55) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。 数组模拟环形队列 【1】队列本身是有序列表,若使用数组的结构来存储队列数据,队列数组的声明如下,其中 maxSize 是该队列的最大容量; ​【2】因为队列的输入输出是分别从头和尾来处理的,因此需要两 阅读全文
posted @ 2020-11-24 07:31 Java程序员进阶 阅读(101) 评论(0) 推荐(0) 编辑
摘要:跟多内容,前往 IT-BLOG 栈的一个实际需求:请输入一个表达式,计算式:[7*2*2-5+1-5+3-3]点击计算【如下图】​请问:计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看这个算式 7*2*2-5..., 但是计算机怎么理解这个算式的(对计算机而言,它接收到的就 阅读全文
posted @ 2020-11-24 07:28 Java程序员进阶 阅读(154) 评论(0) 推荐(0) 编辑
摘要:更多内容,移步 IT-BLOG 一、用 Java 自己实现一个 LRU LRU(Least Recently Used:最近最少使用):简单的说,就是保证基本的 Cache容量,如果超过容量则必须丢掉最不常用的缓存数据,再添加最新的缓存。每次读取缓存都会改变缓存的使用时间,将缓存的存在时间重新刷新。 阅读全文
posted @ 2020-11-22 13:36 Java程序员进阶 阅读(515) 评论(0) 推荐(0) 编辑
摘要:一、Spring Bean 作用域 【1】singleton:该属性在 IOC容器仅创建一个 Bean实例(单例),IOC容器每次返回的是同一个 Bean实例。【2】prototype:该属性在 IOC容器可以创建多个 Bean实例,每次返回的都是一个新的实例。【3】request:该属性仅对 HT 阅读全文
posted @ 2020-11-22 13:30 Java程序员进阶 阅读(327) 评论(0) 推荐(0) 编辑
摘要:大多数搜索引擎应用都必须具有某种搜索功能,问题是搜索功能往往是巨大的资源消耗,并且它们由于沉重的数据库加载而拖垮你的应用的性能。这就是为什么转移负载到一个外部的搜索服务器是一个不错的注意,Apache Solr 是一个流行的开源搜索服务器,它通过使用类似 REST 的 HTTP API,这就确保你能 阅读全文
posted @ 2020-11-22 13:21 Java程序员进阶 阅读(197) 评论(0) 推荐(0) 编辑
摘要:网站应用攻击最主要的两个手段:XSS攻击和 SQL注入攻击。此外,常用的 Web应用还包括 CSRF、Session 劫持等手段。 一、XSS 攻击 XSS 攻击即跨站点脚本攻击(Cross Site Script),指黑客通过篡改网页,注入恶意 HTML 脚本,在用户浏览网页时,控制用户浏览器进行 阅读全文
posted @ 2020-11-22 13:15 Java程序员进阶 阅读(353) 评论(0) 推荐(0) 编辑
摘要:目录 一、简单讲下 Java 的跨平台原理 二、装箱与拆箱 三、实现一个拷贝文件的工具类使用字节流还是字符流 四、介绍下线程池 五、JSP和 Servlet 有哪些相同点和不同点 六、简单介绍一下关系数据库三范式 七、Mysql 数据库的默认的最大连接数 八、说一下 Mysql 和 Oracle 的 阅读全文
posted @ 2020-11-22 13:11 Java程序员进阶 阅读(713) 评论(0) 推荐(0) 编辑
摘要:SpringBoot 用来简化 Spring应用开发,约定大于配置,去繁从简,是由 Pivotal团队提供的全新框架。其设计目的是用来简化新 Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置(有特殊需求可以添加自己的配置覆盖默认配置),从而使开发人员不再需要定义样板化的配置。 阅读全文
posted @ 2020-11-22 13:08 Java程序员进阶 阅读(20) 评论(0) 推荐(0) 编辑
摘要:更多内容,移步 IT-BLOG 一、Session 和 Cookie 的区别 【1】Cookie 保存在客户端,未设置存储时间的 Cookie,关闭浏览器会话 Cookie 就会被删除;设置了存储时间的 Cookie 保存在用户设备的磁盘中直到过期,同时 Cookie 在客户端所以可以伪造,不是十分 阅读全文
posted @ 2020-11-22 13:05 Java程序员进阶 阅读(221) 评论(0) 推荐(0) 编辑
摘要:最近社区Java技术进阶群的小伙伴总是会问,如何面试阿里Java技术岗,需要什么条件,做哪些准备;小编就这些问题找到了阿里技术团队中在一线真正带Java开发团队并直接参与技术面试的专家,分享了自身在筛选简历时的要求,面试时经常会问到的问题,以及面试官通过提问是怎样判断面试者技术水平的。 如有Java 阅读全文
posted @ 2020-11-22 13:04 Java程序员进阶 阅读(209) 评论(0) 推荐(0) 编辑
摘要:一、公司怎么提交的实时任务,有多少 Job Manager、TaskManager 是多少 我们使用 yarn session 模式提交任务;另一种方式是每次提交都会创建一个新的 Flink集群,为每一个 job提供资源,任务之间互相独立,互不影响,方便管理。任务执行完成之后创建的集群也会消失。线上 阅读全文
posted @ 2020-11-22 13:00 Java程序员进阶 阅读(91) 评论(0) 推荐(0) 编辑
摘要:一、使用 SpringBoot 的步骤 【1】创建 SpringBoot应用,选中自己需要的模块。【2】SpringBoot 已经默认将这些场景配置好,只需要在配置文件中指定少量配置就可以运行起来。【3】编写业务逻辑代码。 二、自动配置原理 我们要了解 SpringBoot帮我们配置了什么?能不能修 阅读全文
posted @ 2020-11-22 12:52 Java程序员进阶 阅读(60) 评论(0) 推荐(0) 编辑
摘要:这个问题最近在某论坛上非常的火爆,因为这是由腾讯董事局主席兼首席执行官马化腾先生提出的,因此引起了很多小伙伴们的精彩讨论,在公司周报上看到,不知出处。就整理一份,了解下未来的一些动态,都并非个人观点。​一、这其实是两个问题,前一个问题(哪些基础学科的突破会带来巨大改变?)各位都答得蛮好的,我在这简单 阅读全文
posted @ 2020-11-22 10:54 Java程序员进阶 阅读(276) 评论(0) 推荐(0) 编辑
摘要:对于数据访问层,无论是 SQL 还是 NoSQL,SpringBoot 默认采用整合 Spring Data 的方式进行统一处理,添加大量自动配置,屏蔽了很多设置。引入各种 xxxTemplate,xxxRepository 来简化我们对数据访问层的操作。对我们来说只需要进行简单的设置即可。 一、整 阅读全文
posted @ 2020-11-22 10:36 Java程序员进阶 阅读(14) 评论(0) 推荐(0) 编辑
摘要:一、SpringBoot日志 选用 SLF4j(接口)和 logback(实现类),除了上述日志框架,市场上还存在 JUL(java.util.logging)、JCL(Apache Commons Logging)、Log4j、Log4j2、SLF4j、jboss-logging 等。Spring 阅读全文
posted @ 2020-11-22 10:22 Java程序员进阶 阅读(1180) 评论(0) 推荐(0) 编辑
摘要:更多内容,移步 IT-BLOG 一、谈谈你对 SpringBoot 的理解 简单说说我的理解:Java是一个静态语言,相比动态语言,它相对笨重,体现在我们搭建 SSM 框架写一个 Helloword 的时候相当复杂,需要写一大堆的配置。还有在导入 jar包依赖的时候版本号问题,令人头疼。但是,我们有 阅读全文
posted @ 2020-11-22 10:20 Java程序员进阶 阅读(277) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、SpringBoot 默认的错误处理机制 【1】浏览器返回的默认错误页面如下: ​☞ 浏览器发送请求的请求头信息如下:text/html 会在后面的源码分析中说到。 ​【2】如果是其他客户端,默认则响应错误的 JSON字符串,如下所示: ​☞ 其他客户端发送请求的 阅读全文
posted @ 2020-11-22 10:19 Java程序员进阶 阅读(31) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、登录时可能会出现重复提交问题。我们可以通过重定向解决此问题。例如:用户提交的请求为:/user/login,通过 redirect:重定向至 main.html请求。 1 @PostMapping("/user/login") 2 public String lo 阅读全文
posted @ 2020-11-22 10:03 Java程序员进阶 阅读(13) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、Spring Boot全局配置文件 application.properties 与 application.yml 配置文件的作用:可以覆盖 SpringBoot 配置的默认值。 ◀ YML(is not a Markup Language:不仅仅是一个标记语言 阅读全文
posted @ 2020-11-22 09:33 Java程序员进阶 阅读(27) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、模板引擎的思想 模板是为了将显示与数据分离,模板技术多种多样,但其本质都是将模板文件和数据通过模板引擎生成最终的 HTML代码。 二、SpringBoot模板引擎 SpringBoot 推荐的模板引擎是Thymeleaf——>语法简单,功能强大。【1】引入 thy 阅读全文
posted @ 2020-11-22 00:44 Java程序员进阶 阅读(194) 评论(0) 推荐(0) 编辑
摘要:【问题描述】 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.edu.eduservice.mapper.EduCourseMapper.getPublishCourseInfo 阅读全文
posted @ 2020-11-22 00:43 Java程序员进阶 阅读(16) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、如何定制和修改Servlet容器的相关配置 前言:SpringBoot 在Web 环境下,默认使用的是 Tomact 作为嵌入式的 Servlet容器; ​【1】修改和 server相关的配置(ServerProperties 实现了 EmbeddedServle 阅读全文
posted @ 2020-11-22 00:40 Java程序员进阶 阅读(143) 评论(0) 推荐(0) 编辑
摘要:一、MyBatis 与 JDBC 的区别 【1】JDBC 是 Java 提供操作数据库的 API;MyBatis 是一个持久层 ORM 框架,底层是对 JDBC 的封装。【2】使用 JDBC 需要连接数据库,注册驱动和数据库信息工作量大,每次都要去创建、关闭、获取JDBC 编程可能的异常进行捕获处理 阅读全文
posted @ 2020-11-22 00:39 Java程序员进阶 阅读(238) 评论(0) 推荐(0) 编辑
摘要:Spring 容器的 refresh() 创建容器 1 //下面每一个方法都会单独提出来进行分析 2 @Override 3 public void refresh() throws BeansException, IllegalStateException { 4 synchronized (th 阅读全文
posted @ 2020-11-22 00:34 Java程序员进阶 阅读(79) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、添加事务配置文件:applicationContext-tx.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/be 阅读全文
posted @ 2020-11-22 00:29 Java程序员进阶 阅读(302) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、核心容器 【1】@Configuration:告诉 Spring 这是一个配置类(配置类=配置文件)【2】@Bean:给容器中注册一个 Bean ;类型为返回值类型,id 默认是用方法名作为 id 也可以通过 value 属性添加 id(相当于 xml 中的 <b 阅读全文
posted @ 2020-11-21 23:46 Java程序员进阶 阅读(50) 评论(0) 推荐(0) 编辑
摘要:【阅读前提】:需了解 AOP 注解开发流程:链接 一、注解 @EnableAspectJAutoProxy 在配置类中添加注解@EnableAspectJAutoProxy,便开启了 AOP(面向切面编程) 功能。此注解也是了解 AOP 源码的入口。 @EnableAspectJAutoProxy 阅读全文
posted @ 2020-11-21 23:41 Java程序员进阶 阅读(75) 评论(0) 推荐(0) 编辑
摘要:Spring 总共有十几个组件,但是真正核心的组件只有三个:Core、Context 和 Bean。它们构建起了整个 Spring的骨骼架构,没有它们就不可能有 AOP、Web 等上层的特性功能。 一、Spring的设计理念 Bean组件是 Spring核心中的重点,Spring 就是面向Bean编 阅读全文
posted @ 2020-11-21 23:24 Java程序员进阶 阅读(2062) 评论(0) 推荐(0) 编辑
摘要:一、Maven:是一款服务于 Java平台的自动化构建工具 【1】Maven可以将一个项目按模块划分成不同的工程,利于分工协作;【2】Maven可以将 jar包保存在自己的中央“仓库”中进行统一管理,有需要使用的工程引用这个文件接口即可,不需要真的将 ja包复制过来(解决同样的 jar包文件重复出现 阅读全文
posted @ 2020-11-21 23:09 Java程序员进阶 阅读(419) 评论(0) 推荐(0) 编辑
摘要:一、Maven 仓库 在 Maven 的世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构建。Maven 在某个统一的位置存储所有项目的共享的构建,这个统一的位置,我们就称之为仓库。任何的构建都有唯一的坐标,即 groupId、artifactId、version 组成的坐标,Maven 根 阅读全文
posted @ 2020-11-21 23:08 Java程序员进阶 阅读(138) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 反射(Reflection)被视为动态语言的关键,反射机制允许程序在执行期间借助于 Reflection API 取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。反射是一种功能强大且复杂的机制。使用它的主要人员是工具构造者,而不是应用程序员。如果仅对设计应 阅读全文
posted @ 2020-11-21 23:02 Java程序员进阶 阅读(7) 评论(0) 推荐(0) 编辑
摘要:更多内容,访问 IT-BLOG 一、为什么要有泛型 【1】解决元素存储的安全性问题。【2】解决获取数据元素时,需要类型强转的问题。 ​【3】可以统一数据类型,便于操作。【4】将运行时的异常提前到了编译时,提高了效率。【5】实现代码的模板化,把数据类型当作参数传递,提高了可重用性。【6】只要在编译时期 阅读全文
posted @ 2020-11-21 22:54 Java程序员进阶 阅读(6) 评论(0) 推荐(0) 编辑
摘要:一、创建项目 将vue-admin-template-master 模板放入创建的 VS code 的工作空间。重命名为自己的项目。 模块获取方法:关注“Java程序员进阶”,回复 vue-admin-template-master 二、修改项目信息 修改 package.json 中的内容:​ 1 阅读全文
posted @ 2020-11-21 22:51 Java程序员进阶 阅读(328) 评论(0) 推荐(0) 编辑
摘要:一、下载地址 https://code.visualstudio.com/ 下载完后,傻瓜式安装即可 关注公众号“Java程序员进阶”回复“vs”也可获取 二、 中文界面配置 【1】首先安装中文插件:Chinese (Simplified) Language Pack for Visual Stud 阅读全文
posted @ 2020-11-21 22:49 Java程序员进阶 阅读(491) 评论(0) 推荐(0) 编辑
摘要:Java 中有许多的集合,常用的有List,Set,Queue,Map。 其中 List,Set,Queue都是Collection(集合),List<String>中<>的内容表示其中元素的类型,是泛型的一种使用。不能直接使用简单数据类型做泛型的原因:集合类(比如Set)在进行各种 "操作" ( 阅读全文
posted @ 2020-11-21 22:47 Java程序员进阶 阅读(243) 评论(0) 推荐(0) 编辑
摘要:一、进入码云官方网站,注册用户 官网地址:https://gitee.com/ 二、创建远程仓库 【1】点击右上角的 + 号进行创建​【2】填写仓库信息【3】看到创建成功的仓库:我的码云—仓库​【4】可进入管理页面可以设置仓库的基本信息和团体成员​ 三、Git仓库(提交代码) 前提:安装Git 【1 阅读全文
posted @ 2020-11-21 22:45 Java程序员进阶 阅读(215) 评论(0) 推荐(0) 编辑
摘要:1、Linux:Linux is not Unix。主要用于企业的服务器端。Windows不开源(系统价格大概2000左右,安装软件也特别贵,例如Offers就6000左右等)。基于内核的操作系统(redhat就是基于内核进行组装的套件)。 2、what is kernel(操作系统内核)? ● h 阅读全文
posted @ 2020-11-21 22:43 Java程序员进阶 阅读(624) 评论(0) 推荐(0) 编辑
摘要:RedHat 利用ISO镜像文件制作本地yum源 【1】创建iso存放目录和挂载目录 1 [root@desktop ~]# cd /mnt/ 2 [root@desktop mnt]# mkdir cdrom 【2】将 ISO镜像文件挂载到 /mnt/cdrom文件夹下(前提你的CD/DVD中有你 阅读全文
posted @ 2020-11-21 22:41 Java程序员进阶 阅读(239) 评论(0) 推荐(0) 编辑
摘要:一、如果知道一个文件名称,怎么查这个文件在 Linux下的哪个目录,如:要查找 tnsnames.ora文件 1 find / -name tnsnames.ora 2 #还可以用locate 来查找 3 locate tnsnames.ora 二、Linux 中如何查看某个端口是否被占用 nets 阅读全文
posted @ 2020-11-21 22:38 Java程序员进阶 阅读(258) 评论(0) 推荐(0) 编辑
摘要:一、使用者与群组的概念 【1】在Linux里面,任何一个文件都具有[User,Group及Other]三种身份的个别权限:不过需要注意的是root用户,具有所有权限。 ​ ✔ User(文件拥有者):只有文件拥有者,就是你自己,才能看与修改这个文件的内容; ✔ Group(群组的概念):群组是最有用 阅读全文
posted @ 2020-11-21 22:36 Java程序员进阶 阅读(3) 评论(0) 推荐(0) 编辑
摘要:优质博文:IT-BLOG-CN Linux是一个多人多任务的环境,每个人登录系统都能取得一个 bash shell,每个人都能够使用 bash 下达 mail 这个指令来接收自己的邮箱等等。问题是,bash 如何得知你的邮箱是那个文件?这就需要『变量』的帮助。 一、什么是变量 【1】变量的可变性与方 阅读全文
posted @ 2020-11-21 22:18 Java程序员进阶 阅读(2) 评论(0) 推荐(0) 编辑
摘要:一、B/S网络架构概述 B/S网络架构基于统一的应用层协议 HTTP来交互数据,与大多数的传统 C/S互联网应用程序采用的长连接的交互模式不同,HTTP采用无状态的短连接的通信方式。一次请求就完成一次数据交互,然后通信就断开。采用这种方式能够同时服务更多的用户,因为当前互联网应用每天都会处理上亿的用 阅读全文
posted @ 2020-11-21 21:07 Java程序员进阶 阅读(532) 评论(0) 推荐(0) 编辑
摘要:【转行原因】目前数据每天已亿计算,作为 Java程序员的我已经无法使用常规工具对数据进行捕捉、管理和处理这些数据集合。MySQL的存储容量也只有500-1000行数据。而且数据每天还在告诉增长,还不带重样的。还有就是跟着党走,我要搞新基建。所以我来了,我来了,我踏着七彩祥云走来了..... 按顺序给 阅读全文
posted @ 2020-11-21 20:57 Java程序员进阶 阅读(321) 评论(0) 推荐(0) 编辑
摘要:一、准备工作 【1】创建用户:useradd 用户名【2】配置创建的用户具有 root权限,修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:(注意:需要先给sudoer 文件赋权限,修改完会后,将权限修改回来)修改完毕,现在可以用创建的帐号登录,然后用命令 su 阅读全文
posted @ 2020-11-21 20:54 Java程序员进阶 阅读(2276) 评论(1) 推荐(1) 编辑
摘要:一、HDFS 概述 HDFS 产生背景:随着数据量越来越多,一个系统存储不下所有的数据,那么就需要分配到多个操作系统的磁盘中进行存储,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS 只是分布式文件管理系统的一种。 HDFS 定义:HDFS(Hadoo 阅读全文
posted @ 2020-11-21 20:52 Java程序员进阶 阅读(234) 评论(0) 推荐(0) 编辑
摘要:准备工作 本文简述 Flink在 Linux中安装步骤,和示例程序的运行。需要安装 JDK1.8 及以上版本。 下载地址:下载Flink 的二进制包 https://flink.apache.org/downloads.html​点进去后,选择如下链接:​ 解压 flink-1.10.1-bin-s 阅读全文
posted @ 2020-11-21 20:50 Java程序员进阶 阅读(441) 评论(0) 推荐(0) 编辑
摘要:【问题描述】:[root@hadoop1 flink-1.10.1]# bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9000Job has been submitted with JobID 2dd7501cfe 阅读全文
posted @ 2020-11-21 20:45 Java程序员进阶 阅读(3206) 评论(0) 推荐(0) 编辑
摘要:传统批次处理方法 ​ 【1】持续收取数据(kafka等),以window 时间作为划分,划分一个一个的批次档案(按照时间或者大小等);【2】周期性执行批次运算(Spark/Stom等); 传统批次处理方法存在的问题:​【1】假设计算每小时出现特定事件的转换次数(例如:1、2......),但某个事件 阅读全文
posted @ 2020-11-21 20:35 Java程序员进阶 阅读(114) 评论(0) 推荐(0) 编辑
摘要:流处理API的衍变 Storm:TopologyBuilder 构建图的工具,然后往图中添加节点,指定节点与节点之间的有向边是什么。构建完成后就可以将这个图提交到远程的集群或者本地的集群运行。Flink:不同之处是面向数据本身的,会把DataStream 抽象成一个本地集合,通过面向集合流的编程方式 阅读全文
posted @ 2020-11-21 20:25 Java程序员进阶 阅读(58) 评论(0) 推荐(0) 编辑
摘要:Flink 根据数据集类型的不同将核心数据处理接口分为两大类,一类是支持批计算的接口DataSet API,另外一类是支持流计算的接口 DataStream API。同时 Flink将数据处理接口抽象成四层,由上向下分别为SQL API、Table API、DataStream /DataSet A 阅读全文
posted @ 2020-11-21 20:15 Java程序员进阶 阅读(1594) 评论(0) 推荐(0) 编辑
摘要:Flink 流应用程序处理的是以数据对象表示的事件流。所以在Flink内部,我么需要能够处理这些对象。它们需要被序列化和反序列化,以便通过网络传送它们;或者从状态后端、检查点和保存点读取它们。为了有效地做到这一点,Flink需要明确知道应用程序所处理的数据类型。并为每个数据类型生成特定的序列化器、反 阅读全文
posted @ 2020-11-21 20:10 Java程序员进阶 阅读(117) 评论(0) 推荐(0) 编辑
摘要:构建环境 JDK1.8 以上和Maven 3.3.x可以构建Flink,但是不能正确地遮盖某些依赖项。Maven 3.2.5会正确创建库。所以这里使用为了减少问题选择 Maven3.2.5 版本进行构建。要构建单元测试,请使用Java 8以上,以防止使用 PowerMock运行器的单元测试失败。 克 阅读全文
posted @ 2020-11-21 20:05 Java程序员进阶 阅读(27) 评论(0) 推荐(0) 编辑
摘要:优质博文:IT-BLOG-CN 一、DataNode工作机制 DataNode工作机制,如下所示:​ 【1】一个数据块在 DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。【2】DataNode启动后向 NameNode 阅读全文
posted @ 2020-11-21 20:02 Java程序员进阶 阅读(2) 评论(0) 推荐(0) 编辑
摘要:优质博文:IT-BLOG-CN 一、NN和2NN工作机制 思考:NameNode中的元数据是存储在哪里的?首先,我们做个假设,如果存储在 NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失, 阅读全文
posted @ 2020-11-21 20:00 Java程序员进阶 阅读(9) 评论(0) 推荐(0) 编辑
摘要:一、简单讲讲 Tomcat结构,以及其类加载器流程,线程模型等 【1】模块组成结构:Tomcat 的核心组件就 Connector 和 Container,一个Connector+一个Container(Engine)构成一个Service,Service就是对外提供服务的组件,有了Service组 阅读全文
posted @ 2020-11-21 19:58 Java程序员进阶 阅读(118) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、Scheduled 定时任务 【1】添加 Scheduled相关依赖,它是 Spring自带的一个 jar包因此引入 Spring的依赖: 1 <dependency> 2 <groupId>org.springframework</groupId> 3 <art 阅读全文
posted @ 2020-11-21 19:55 Java程序员进阶 阅读(627) 评论(0) 推荐(0) 编辑
摘要:优质博文:IT-BLOG-CN 一、HDFS 写数据流程 HDFS 文件写入流程图如下:三个模块(客户端、NameNode、DataNode)​【1】校验:客户端通过 DistributedFileSystem 模块向 NameNode 请求上传文件,NameNode 会检查目标文件是否已经存在,父 阅读全文
posted @ 2020-11-21 19:46 Java程序员进阶 阅读(9) 评论(0) 推荐(0) 编辑
摘要:Mybatis 的整体架构分为三层,分别是基础支持层、核心处理层和接口层。基础支持层为核心处理层的功能提供了良好的支撑。 ​ 一、接口层 在不与 Spring 集成的情况下,使用 MyBatis 执行数据库的操作主要如下: InputStream is = Resources.getResource 阅读全文
posted @ 2020-11-21 19:13 Java程序员进阶 阅读(82) 评论(0) 推荐(0) 编辑
摘要:管理整个计算机硬件的其实是操作系统的核心(kernel),这个核心是需要被保护的。所以使用者就只能通过shell来跟核心沟通,以让核心达到想要的工作。那么系统中有多少 shell?为什么要使用 bash等等?我们来简单了解下。 一、Bash shell 的功能 【1】命令编辑能力(history): 阅读全文
posted @ 2020-11-21 19:09 Java程序员进阶 阅读(444) 评论(0) 推荐(0) 编辑
摘要:一、准备工作 MyBatis 工作流程:应用程序首先加载 mybatis-config.xml 配置文件,并根据配置文件的内容创建 SqlSessionFactory 对象;然后,通过 SqlSessionFactory 对象创建 SqlSession 对象,SqlSession 接口中定义了执行 阅读全文
posted @ 2020-11-21 18:04 Java程序员进阶 阅读(83) 评论(0) 推荐(0) 编辑
摘要:一、后端使用 PageHelper插件 【1】引入 PageHelper jar包(Maven项目) 1 <dependency> 2 <groupId>com.github.pagehelper</groupId> 3 <artifactId>pagehelper</artifactId> 4 < 阅读全文
posted @ 2020-11-21 17:55 Java程序员进阶 阅读(478) 评论(0) 推荐(0) 编辑
摘要:AngularJS:诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS是一个基于MVC处理模式,实现了MVVM数据双向绑定的用于开发动态Web项目的框架,以其数据和展现分离、MVVM、MV 阅读全文
posted @ 2020-11-21 17:53 Java程序员进阶 阅读(158) 评论(0) 推荐(0) 编辑
摘要:安全问题按照所发生的区域进行分类的话,所发生在后端服务器、应用、服务当中的安全问题就是“后端安全问题”,所发生在浏览器、单页面应用、Web页面当中的安全问题则算是“前端安全问题”。例如:SQL注入漏洞发生在后端应用中,是后端安全问题。跨站脚本攻击(XSS)则是前端安全问题,因为它发生在用户的浏览器里 阅读全文
posted @ 2020-11-21 17:47 Java程序员进阶 阅读(536) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、Spring 编写国际化时的步骤 【1】编写国际化配置文件;【2】使用 ResourceBundleMessageSource 管理国际化资源文件;【3】在页面使用 ftp:message 取出国际化内容; 二、SpringBoot编写国际化步骤 【1】创建 i1 阅读全文
posted @ 2020-11-21 17:43 Java程序员进阶 阅读(570) 评论(0) 推荐(0) 编辑
摘要:【事务环境搭建工作】:链接注解 @EnableTransactionManagement:在配置类中添加注解@EnableTransactionManagement,便开启了事务功能。此注解也是了解Spring事务源码的入口。 @EnableTransactionManagement public 阅读全文
posted @ 2020-11-21 17:19 Java程序员进阶 阅读(88) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、SpringMVC自动配置 SpringMVC auto-configuration:SpringBoot 自动配置好了SpringMVC。以下是 SpringBoot 对 SpringMVC的默认配置:(WebMvcAutoConfiguration)【1】包括 阅读全文
posted @ 2020-11-21 17:17 Java程序员进阶 阅读(77) 评论(0) 推荐(0) 编辑
摘要:一、什么是二维码 二维码又称二维条码,常见的二维码为 "QR Code" ,QR 全称 Quick Response 是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。二维条码/二维码(2-dimensional bar code) 阅读全文
posted @ 2020-11-21 17:15 Java程序员进阶 阅读(494) 评论(0) 推荐(0) 编辑
摘要:网页静态化解决方案在实际运用中比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道。对于电商网站的商品详细页(几百万的商品,同样的页面模板格局)来说,每个商品又有大量的信息,这样的情况同样也适用于网页静态化解决方案。 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应 阅读全文
posted @ 2020-11-21 17:14 Java程序员进阶 阅读(175) 评论(0) 推荐(0) 编辑
摘要:一、Hadoop1.0 与 Hadoop2.0的区别 ​ 二、写一个 WordCount 案例 【1】我在安装目录执行 hadoop jar "jar包" wordcount "统计文件目录" "输出目录(一定不要存在,会自动创建)",重点就是 wordcount ,在Linux 中也常常使用 wc 阅读全文
posted @ 2020-11-21 17:12 Java程序员进阶 阅读(82) 评论(0) 推荐(0) 编辑
摘要:【问题描述】:项目为SpringBoot 项目多个 module依赖,对子模块进行 compile/install 时出现了依赖的类(此类是自己写的类)不存在。​ 【解决办法】:将父工程中使用的 springboot插件注释掉,如下代码: 1 <build> 2 <plugins> 3 <plugi 阅读全文
posted @ 2020-11-21 17:09 Java程序员进阶 阅读(1143) 评论(0) 推荐(0) 编辑
摘要:公平锁:是指多个线程按照申请锁的顺序来获取锁,有点先来后到的意思。在并发环境中,每个线程在获取锁时会先查看此锁维护的队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,以后会按照 FIFO 的规则从队列中取到自己。非公平锁:指多个线程获取锁的顺序并不是按照申请锁的顺序 阅读全文
posted @ 2020-11-21 17:06 Java程序员进阶 阅读(66) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往个人博客 一、Tomcat 顶层架构 ​ Tomcat 中最顶层的容器是 Server,代表着整个服务器,从上图中可以看出,一个 Server可以包含至少一个 Service,用于具体提供服务。Service 主要包含两个部分:Connector 和 Container。从上图中可以看 阅读全文
posted @ 2020-11-21 17:05 Java程序员进阶 阅读(153) 评论(0) 推荐(0) 编辑
摘要:如今,几乎每家企业都在大谈数据化,推动数字化创新。其实,在整个变革过程中,数据才是最重要的一环。所以“数据变成现代企业竞争的新资源”,这种说法一点都不夸张,大家都在试图枪占更多数据,但实际上,到今天为止,从大量收集数据到转化为实际的数据价值,还有一定的挑战。只有那些能够解决大数据挑战的企业,才能真正 阅读全文
posted @ 2020-11-21 17:04 Java程序员进阶 阅读(288) 评论(0) 推荐(0) 编辑
摘要:Java 提供的对象输入流(ObjectInputStream)和输出流(ObjectOutputStream),可以直接把 Java 对象作为可存储的字节数据写入文件,也可以传输到网络上。对于程序员来说,基于 JDK 默认的序列化机制可以避免操作底层的字节数组,从而提高开发效率。Java 序列化的 阅读全文
posted @ 2020-11-21 17:03 Java程序员进阶 阅读(242) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、Elasticsearch了解多少 ElasticSearch 是一个基于 Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web接口。Elasticsearch 是用 Java开发的,并作为 Apache许可条款下的开 阅读全文
posted @ 2020-11-21 17:00 Java程序员进阶 阅读(66) 评论(0) 推荐(0) 编辑
摘要:Spring Data Solr 就是为了方便 solr 的开发研制的一个框架,其底层是对 SolrJ(官方 API)的封装 一、环境搭建 第一步:创建 Maven 项目(springdatasolrDemo 打包方式为 jar 类型)第二步:pom.xml 文件中引入项目相关的依赖: 1 <dep 阅读全文
posted @ 2020-11-21 16:59 Java程序员进阶 阅读(405) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 如今随着互联网的发展,数据的量级也是呈指数的增长,从 GB 到 TB 到 PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候 NoSQL 的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂 阅读全文
posted @ 2020-11-21 16:55 Java程序员进阶 阅读(122) 评论(0) 推荐(0) 编辑
摘要:现实世界中,所有的数据都是以流式的形态产生的,不管是哪里产生的数据,在产生的过程中都是一条条地生成,最后经过了存储和转换处理,形成了各种类型的数据集。如下图所示,根据现实的数据产生方式和数据产生是否含有边界(具有起始点和终止点)角度,将数据分为两种类型的数据集,一种是有界数据集,另外一种是无界数据集 阅读全文
posted @ 2020-11-20 17:46 Java程序员进阶 阅读(3) 评论(0) 推荐(0) 编辑
摘要:一、运行环境介绍 Flink执行环境主要分为本地环境和集群环境,本地环境主要为了方便用户编写和调试代码使用,而集群环境则被用于正式环境中,可以借助Hadoop Yarn、k8s 或 Mesos等不同的资源管理器部署自己的应用。环境依赖:【1】JDK环境:Flink核心模块均使用 Java开发,所以运 阅读全文
posted @ 2020-11-20 17:44 Java程序员进阶 阅读(25) 评论(0) 推荐(0) 编辑
摘要:一、什么是状态 无状态计算的例子:例如一个加法算子,第一次输入 2+3=5 那么以后我多次数据 2+3 的时候得到的结果都是5。得出的结论就是,相同的输入都会得到相同的结果,与次数无关。有状态计算的例子:访问量的统计,我们都知道 Nginx 的访问日志一个请求一条日志,基于此我们就可以统计访问量。如 阅读全文
posted @ 2020-11-20 17:41 Java程序员进阶 阅读(26) 评论(0) 推荐(0) 编辑
摘要:Flink API 总共分为4层链接这里主要整理 Table API 的使用 Table API是流处理和批处理通用的关系型 API,Table API可以基于流输入或者批输入来运行而不需要进行任何修改。Table API 是 SQL语言的超集并专门为 Apache Flink设计的,Table A 阅读全文
posted @ 2020-11-20 17:25 Java程序员进阶 阅读(39) 评论(0) 推荐(0) 编辑
摘要:一、基本组件栈 在Flink整个软件架构体系中,同样遵循着分层的架构设计理念,在降低系统耦合度的同时,也为上层用户构建 Flink应用提供了丰富且友好的接口。从下图中可以看出整个 Flink的架构体系基本上可以分为三层,由上往下依次是 API & Libraries层、Runtime核心层以及物理部 阅读全文
posted @ 2020-11-20 17:15 Java程序员进阶 阅读(21) 评论(0) 推荐(0) 编辑
摘要:【问题描述】: Could not build the program from JAR file. Use the help option (-h or --help) to get help on the command. 【产生原因】:之前 per-job启动的时候,它们都用 flink1.8 阅读全文
posted @ 2020-11-20 17:12 Java程序员进阶 阅读(97) 评论(0) 推荐(0) 编辑
摘要:Flink 提供了丰富的客户端操作来提交任务和与任务进行交互。下面主要从Flink命令行、Scala Shell、SQL Client、Restful API 和 Web 五个方面进行整理。 在 Flink 安装目录的 bin目录下可以看到 flink,start-scala-shell.sh 和 阅读全文
posted @ 2020-11-20 17:07 Java程序员进阶 阅读(144) 评论(0) 推荐(0) 编辑
摘要:在介绍 Checkpoint 的执行机制前,我们需要了解一下 state 的存储,因为 state 是 Checkpoint 进行持久化备份的主要角色。Checkpoint 作为 Flink 最基础也是最关键的容错机制,Checkpoint 快照机制很好地保证了 Flink 应用从异常状态恢复后的数 阅读全文
posted @ 2020-11-20 17:02 Java程序员进阶 阅读(56) 评论(0) 推荐(0) 编辑
摘要:Flink 的 API 大体上可以划分为三个层次:处于最底层的 ProcessFunction、中间一层的 DataStream API 和最上层的 SQL/Table API,这三层中的每一层都非常依赖于时间属性。时间在 Flink 中的地位如下图所示:​时间属性是流处理中最重要的一个方面,是流处 阅读全文
posted @ 2020-11-20 16:55 Java程序员进阶 阅读(16) 评论(0) 推荐(0) 编辑
摘要:优质博文:IT-BLOG-CN 负载均衡(Load Balance): 意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其他任务服务器等,从而共同完成工作任务。负载均衡建立在现有的网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的宽带、增加吞 阅读全文
posted @ 2020-11-20 16:50 Java程序员进阶 阅读(21) 评论(0) 推荐(0) 编辑
摘要:优质博文:IT-BLOG-CN 一、为什么 Nginx可以采用异步非阻塞的方式来处理 看看一个请求的完整过程:请求过来,要建立连接,然后再接收数据,接收数据后,再发送数据。 具体到系统底层,就是读写事件,而当读写事件没有准备好时,必然不可操作,如果不用非阻塞的方式来调用,那就得阻塞调用了,事件没有准 阅读全文
posted @ 2020-11-20 16:45 Java程序员进阶 阅读(455) 评论(0) 推荐(0) 编辑
摘要:优质博文:IT-BLOG-CN 一、目前常见的Web服务器 【1】 Apache(http://httpd.apache.otg):仍是世界上用的最多的web服务器,市场占有率60%左右,模块非常丰富,系统非常稳点,可移植性好,但比较消耗内存。并发能力比较差。最多支持到3千到5千。 【2】 Ligh 阅读全文
posted @ 2020-11-20 16:32 Java程序员进阶 阅读(6) 评论(0) 推荐(0) 编辑
摘要:优质博文 IT-BLOG-CN 虚拟主机使用的是特殊的软硬件技术,把一台运行在因特网上的服务器主机分成一台台 “虚拟” 的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完成的Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访 阅读全文
posted @ 2020-11-20 16:19 Java程序员进阶 阅读(6) 评论(0) 推荐(0) 编辑
摘要:一、RPC 服务的原理 【1】Socket 套接字:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个链接的一端称为 Socket。可以实现不同计算机之间的通信,是网络编程接口的具体实现。Socket 套接字是客户端/服务端网络结构程序的基本组成部分。【2】RPC 的调用过程:实现透明的远程 阅读全文
posted @ 2020-11-20 14:59 Java程序员进阶 阅读(357) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、是什么 Docker 的理念:将运行的环境打包形成容器运行,运行可以伴随着容器,但是我们希望对数据做持久化,同时希望容器之间能够共享数据。Docker 产生的数据,如果不通过 docker commit 生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删 阅读全文
posted @ 2020-11-20 14:23 Java程序员进阶 阅读(23) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG-CN 一、Dockerfile 是什么? DockerFile 是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本 构建三步骤: 编写 Dockerfile 文件——>docker build——>docker run例如:centos 构建文件: 阅读全文
posted @ 2020-11-20 14:21 Java程序员进阶 阅读(26) 评论(0) 推荐(0) 编辑
摘要:目录 一、简介 二、Docker的基本组成 三、Docker的安装 四、配置国内阿里云镜像加速 五、Hello World 上手实践 六、Docker底层原理 更多内容,前往 IT-BLOG 一、简介 Docker 是基于 Go 语言实现的云开源项目。主要目标是 “Build,Ship and Ru 阅读全文
posted @ 2020-11-20 14:18 Java程序员进阶 阅读(13) 评论(0) 推荐(0) 编辑
摘要:一、帮组命令 ● docker version :验证Docker安装的信息 ● docker info:比version更详细的Docker信息 ● docker --help:Docker帮助文档 二、Docker启动、停止、重启命令 ● service docker start:启动 ● se 阅读全文
posted @ 2020-11-20 14:13 Java程序员进阶 阅读(31) 评论(0) 推荐(0) 编辑
摘要:一、Redis 持久化方式(RDB) 【1】RDB(Redis DataBase): 在指定的时间间隔内将内存中的数据集以快照的形式写入磁盘,也就是行话讲的 Snapshot (快照),它恢复时是将快照文件直接读到内存里。Redis 会单独创建(Fork)一个子进程来进行持久化,会先将数据写入到一个 阅读全文
posted @ 2020-11-20 13:43 Java程序员进阶 阅读(34) 评论(0) 推荐(0) 编辑
摘要:Redis 事务:可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序串行化执行而不会被其它命令插入,一次性、顺序性、排他性的执行一系列命令。 一、常用命令 【1】:开启一个事务【2】 :执行事务中的命令。可以看到 开始到 之间,所有的命令都会被加入到一个命令队列中。当 阅读全文
posted @ 2020-11-20 13:19 Java程序员进阶 阅读(287) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的表达式(例如:正则表达式等),那么这些问题实例将是该表达式的一些句子,这样就可以用 “编译原理” 中的解释器模式来实现。 一、解释器模式基本介绍 【1】解释器模式(Inte 阅读全文
posted @ 2020-11-20 13:07 Java程序员进阶 阅读(138) 评论(0) 推荐(0) 编辑
摘要:一、Linux 操作系统 【1】ulimit 与 TCP backlog:1)、修改 ulimit:通过 ulimit 修改 open files 参数,redis 建议把 open files 至少设置成 10032,因为 maxclients 是10000 [客户端的数据是以文件的形式进行保存的 阅读全文
posted @ 2020-11-20 11:33 Java程序员进阶 阅读(660) 评论(0) 推荐(0) 编辑
摘要:系统性学习,移步IT-BLOG 一、简介 对于类似于首页这种每天都有大量的人访问,对数据库造成很大的压力,严重时可能导致瘫痪。解决方法:一种是数据缓存、一种是网页静态化。今天就讨论数据缓存的实现 Redis:是一种开源的 Key-Value 数据库,运行在内存中,企业开发通常采用 Redis 来实现 阅读全文
posted @ 2020-11-20 11:27 Java程序员进阶 阅读(27) 评论(0) 推荐(0) 编辑
摘要:一、Redis-Cluster 简介 【1】Redis 集群(Redis-Cluster)提供了在多个 Redis 节点间共享数据的功能。【2】Redis 集群通过分区来提高可用性。可自动分割数据到不同的节点上,集群的部分节点失败或者不可达时能够继续处理请求。【3】Redis Cluster 集群模 阅读全文
posted @ 2020-11-20 11:20 Java程序员进阶 阅读(257) 评论(0) 推荐(0) 编辑
摘要:一、什么是缓存 【1】缓存就是数据交换的缓冲区(称作:Cache),当某一硬件要读取数据时,会首先从缓存中查询数据,有则直接执行,不存在时从磁盘中获取。由于缓存的数据比磁盘快的多,所以缓存的作用就是帮助硬件更快的运行。【2】缓存往往使用的是RAM(断电既掉的非永久存储),所以在用完后还是会把文件送到 阅读全文
posted @ 2020-11-20 11:19 Java程序员进阶 阅读(570) 评论(0) 推荐(1) 编辑
摘要:分布式应用进行逻辑处理时经常会遇到并发问题,我们首先肯定会想到锁。关于锁大家都很熟悉。在并发编程中,我们通过锁,来避免由于竞争而造成的数据不一致问题。通常我们使用 synchronized 、Lock 来加锁。但是 Java中的锁,只能保证在同一个 JVM进程内中执行。如果在分布式集群环境下呢? 一 阅读全文
posted @ 2020-11-20 11:18 Java程序员进阶 阅读(233) 评论(0) 推荐(0) 编辑
摘要:一、字符控制函数 函数 结果 CONCAT('Hello','World') HelloWorld SUBSTR('HelloWorld',1,5) Hello LENGTH('HelloWorld') 10 INSTR('HelloWorld','W') 6 LPAD(salary,10,'*') 阅读全文
posted @ 2020-11-20 09:56 Java程序员进阶 阅读(71) 评论(0) 推荐(0) 编辑
摘要:一、视图 从表中抽出的逻辑上相关的数据集合,视图是一种虚表,视图是建立在已有表的基础之上,视图赖以建立的这些表称为基表。向视图提供数据的是 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句。视图中的数据会随着基表的变化而变化。 那为什么要使用视图呢? 1)、控制数据访问 2)、简化 阅读全文
posted @ 2020-11-20 09:46 Java程序员进阶 阅读(13) 评论(0) 推荐(0) 编辑
摘要:Oracle 公司是世界上最大的信息管理软件及服务提供商,因其复杂的关系数据库产品而闻名。Oracle 的关系数据库是世界上第一个支持 SQL 语言的数据库。支持服务器/客户机等部署。Oracle 数据库管理系统是目前世界上最流行的一款关系型数据库管理系统。 一、Oracle 数据库体系结构简介 平 阅读全文
posted @ 2020-11-20 09:45 Java程序员进阶 阅读(287) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、行转列问题 现有表格A,按照以下格式排列; 姓名 收入类型 收入金额 Tom 年奖金 5w Tom 月工资 10k Jack 年奖金 8w Jack 月工资 12k 先需要将表格转化为: 姓名 月工资 年奖金 Tom 10k 50k Jack 12k 80k 方法 阅读全文
posted @ 2020-11-20 09:41 Java程序员进阶 阅读(230) 评论(0) 推荐(0) 编辑
摘要:更多内容,移步 IT-BLOG 一、什么是微服务 就目前而言,对于微服务业界并没有一个统一的,标准的定义。但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻 阅读全文
posted @ 2020-11-20 09:40 Java程序员进阶 阅读(174) 评论(0) 推荐(0) 编辑
摘要:优质博文:IT-BLOG-CN 一、数据库隔离级别 【1】Read Uncommitted(读取未提交内容):出现脏读,也就是可能读取到其他会话中未提交事务修改的数据。【2】Read Committed(读取已提交内容):不可重复读,只能读取到已经提交的数据。Oracle 等数据库默认的隔离级别。【 阅读全文
posted @ 2020-11-20 09:36 Java程序员进阶 阅读(542) 评论(0) 推荐(0) 编辑
摘要:慢日志分析流程如下:【1】观察(至少跑一天),看看生产慢 SQL 情况。【2】开启慢查询日志,设置阈值,比如对超过5秒的 SQL 语句进行抓取。【3】explain+慢 SQL 分析。【4】show profile 查询慢 SQL 在 MySQL 中的执行细节和生命周期情况。【5】运维经理 or D 阅读全文
posted @ 2020-11-20 09:34 Java程序员进阶 阅读(162) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG explain关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理 SQL 语句的。分析查询语句或表结构的性能瓶颈。执行语句:explain + SQL语句。表头信息如下:​ 一、ID 参数 select 查询的序列号,包含一组数字,表示查询中 阅读全文
posted @ 2020-11-20 09:32 Java程序员进阶 阅读(93) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 复制功能是构建 MySQL 的大规模、高性能的基础,也就是所谓的 “水平扩展” 架构。我们可以通过为服务器配置一个或多个备库。同时,复制也是高可用性、可扩展性、灾难恢复、备份以及数据仓库等工作的基础。MySQL主从基本原理,主要形式以及主从同步延迟原理 (读写分离)导 阅读全文
posted @ 2020-11-20 09:30 Java程序员进阶 阅读(399) 评论(0) 推荐(0) 编辑
摘要:Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具。可以将面向服务的 REST 模板请求自动转化成客户端负载均衡的服务调用。Spring Cloud Ribbon 虽然是一个工具类框架,但它不像服务注册中心、配置中心、API网关那样需要独立部署。但是它几乎 阅读全文
posted @ 2020-11-20 09:20 Java程序员进阶 阅读(43) 评论(0) 推荐(0) 编辑
摘要:Spring Cloud Ribbon 和 Spring Cloud Hystrix 在微服务中实现了客户端负载均衡的服务调用以及通过断路器来保护微服务应用。这两者作为基础工具类框架广泛地应用在各个微服务的实现中,不仅包括我们自身的业务类微服务,也包括一些基础设置类微服务(比如网关)。在实践中,这两 阅读全文
posted @ 2020-11-20 09:18 Java程序员进阶 阅读(118) 评论(0) 推荐(0) 编辑
摘要:来源于网络 一、什么是 Raft算法 Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它。为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导选取(leader selection)、日志复制(log replication)、安全(safe 阅读全文
posted @ 2020-11-20 09:13 Java程序员进阶 阅读(3783) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、Spring Security 简介 Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring 应用上下文中配置的 Bean,充分利用了Spring IoC,DI(控制 阅读全文
posted @ 2020-11-20 08:28 Java程序员进阶 阅读(40) 评论(0) 推荐(0) 编辑
摘要:系统性学习,异步IT-BLOG 一、HashMap 底层源码 JDK7 版本(数组+链表) 我们存放的 hashMap 都会封装成一个节点对象 Entry(key,value),然后将此节点对象存放到一个数组中,存放前首先需要确定存放的数组下标:① 通过 hash(key) 算法得到 key 的 h 阅读全文
posted @ 2020-11-20 00:10 Java程序员进阶 阅读(149) 评论(0) 推荐(0) 编辑
摘要:一、Redis 为什么那么快 【1】完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中。【2】数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的。【3】采用单线程,避免不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁 阅读全文
posted @ 2020-11-20 00:01 Java程序员进阶 阅读(89) 评论(0) 推荐(0) 编辑
摘要:更多内容,移步IT-BLOG 一、Redis 复制 复制(Replication):是 Redis 实现高可用的基础。且在复制过程中,主节点/从节点都是非阻塞的,但是从节点在执行同步时使用的是旧数据集提供查询。 Redis 复制启动图与流程说明:​1)、当从节点连接到主节点时,会发送 psync 命 阅读全文
posted @ 2020-11-19 23:30 Java程序员进阶 阅读(203) 评论(0) 推荐(0) 编辑
摘要:一、什么是单点登录 单点登录(Sign Sion On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。对于存在诸多子系统且子系统分别部署到不同的服务器中,那么使用传统的 session 是无法解决的 阅读全文
posted @ 2020-11-19 22:47 Java程序员进阶 阅读(947) 评论(0) 推荐(0) 编辑
摘要:系统性学习,异步IT-BLOG CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch 能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。 阅读全文
posted @ 2020-11-19 21:57 Java程序员进阶 阅读(21) 评论(0) 推荐(0) 编辑
摘要:一、阻塞队列 【1】首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示: ​当阻塞队列为空时,从队列中获取元素的操作将会被阻塞。当阻塞队列是满时,往队列中添加元素的操作将会被阻塞。【2】在多线程领域:所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤 阅读全文
posted @ 2020-11-19 21:55 Java程序员进阶 阅读(255) 评论(0) 推荐(0) 编辑
摘要:系统性学习,移步IT-BLOG 线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数超过了最大数量超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。 什么是线程池 线程池(Thread Pool)是一种基于池化思想管理线程的工 阅读全文
posted @ 2020-11-19 21:16 Java程序员进阶 阅读(180) 评论(0) 推荐(0) 编辑
摘要:Java8 优势:速度快、代码更少(增加了新的语法 Lambda 表达式)、强大的 Stream API、便于并行、最大化减少空指针异常 Optional; 一、Lambda 表达式 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递) 阅读全文
posted @ 2020-11-19 19:54 Java程序员进阶 阅读(587) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG volatile 表示 “不稳定” 的意思。用于修饰共享可变变量,即没有使用 final(不可变变量) 关键字修饰的实例变量或静态变量,相应的变量就被称为 volatile 变量,如下: private volatile String name; volatile 关 阅读全文
posted @ 2020-11-19 19:52 Java程序员进阶 阅读(364) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往个人博客 一、通过synchronize 中的 wait 和 notify 实现 【1】我们可以将生产者和消费者需要的方法写在公共类中 1 package com.yintong.concurrent; 2 3 import java.util.LinkedList; 4 5 publ 阅读全文
posted @ 2020-11-19 19:42 Java程序员进阶 阅读(2319) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往个人博客 当说到 Netty 线程模型的时候,一般首先会想到经典的 Reactor 线程模型,尽管不同的 NIO 框架对于 Reactor 模式的实现存在差异,但本质上还是遵循了 Reactor 的基础线程模式。 一、Reactor 单线程模型 无论是C++ 还是 Java 编写的网络 阅读全文
posted @ 2020-11-19 17:36 Java程序员进阶 阅读(367) 评论(0) 推荐(0) 编辑
摘要:一、粘包出现的原因 服务端与客户端没有约定好要使用的数据结构。Socket Client实际是将数据包发送到一个缓存 buffer中,通过 buffer刷到数据链路层。因服务端接收数据包时,不能断定数据包1何时结束,就有可能出现数据包2的部分数据结合数据包1发送出去,导致服务器读取数据包1时包含了数 阅读全文
posted @ 2020-11-19 17:31 Java程序员进阶 阅读(252) 评论(0) 推荐(0) 编辑
摘要:优秀博文:IT-BLOG-CN 序列化 :把对象转换为字节序列存储于磁盘或者进行网络传输的过程称为对象的序列化。反序列化:把磁盘或网络节点上的字节序列恢复到对象的过程称为对象的反序列化。 一、序列化对象 【1】必须实现序列化接口 Serializable:Java.io.Serializable 接 阅读全文
posted @ 2020-11-19 17:21 Java程序员进阶 阅读(16) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往个人博客 Protobuf 全称:Google Protocol Buffers,由谷歌开源而来,经谷歌内部测试使用。它将数据结构以 .proto 文件进行描述,通过代码生成工具可以生成对应数据结构的 POJO 对象和 Protobuf 相关的方法和属性。 一、 Protocol 的特 阅读全文
posted @ 2020-11-19 17:17 Java程序员进阶 阅读(1452) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往个人博客 Thrift 源于 Facebook,在 2007 年 Facebook 将 Thrift 作为一个开源项目提交给了 Apache 基金会。对于当时的 Facebook 来说,创造 Thrift 是为了解决 Facebook 各系统间大数据量的传输通信以及系统之间语言环境不同 阅读全文
posted @ 2020-11-19 17:12 Java程序员进阶 阅读(192) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往个人博客 零拷贝是指避免在用户态(User-space)与内核态(Kernel-space)之间来回拷贝数据的技术。 一、传统 IO 传统 IO(InputStream/OutputStream)读取数据并通过网络发送数据的流程,如下图: ​ 【1】当用户空间使用 read() 询问内 阅读全文
posted @ 2020-11-19 17:09 Java程序员进阶 阅读(62) 评论(0) 推荐(0) 编辑
摘要:一、BIO、NIO 和 AIO 【1】阻塞 IO(Blocking I/O):同步阻塞I/O模式,当一条线程执行 read() 或者 write() 方法时,这条线程会一直阻塞直到读取一些数据或者写出去的数据已经全部写出,在这期间这条线程不能做任何其他的事情。在活动连接数不是特别高(小于单机1000 阅读全文
posted @ 2020-11-19 17:07 Java程序员进阶 阅读(95) 评论(0) 推荐(0) 编辑
摘要:Dubbo 底层使用 Netty 作为网络通信框架。【网络传输问题】:相对于传统的 RPC 或者 RMI 等方式的远程服务过程调用采用了同步阻塞IO,当客户端的并发压力或者网络时延增长之后,同步阻塞 I/O 会由于频繁的等待导致 I/O 线程经常性阻塞,由于线程无法高效的工作,I/O处理能力自然会下 阅读全文
posted @ 2020-11-19 17:06 Java程序员进阶 阅读(58) 评论(0) 推荐(0) 编辑
摘要:一、阻塞IO / 非阻塞NIO 阻塞IO:当一条线程执行 read() 或者 write() 方法时,这条线程会一直阻塞直到读取到了一些数据或者要写出去的数据已经全部写出,在这期间这条线程不能做任何其他的事情。 非阻塞NIO:NIO 与原有的 IO 有同样的作用和目的,但是使用的方式完全不同,NIO 阅读全文
posted @ 2020-11-19 16:53 Java程序员进阶 阅读(252) 评论(0) 推荐(0) 编辑
摘要:当使用 12306 抢票成功后,就会进入付款界面,这个时候就会出现一个订单倒计时,下面我们就对付款倒计时的功能实现,进行深入学习和介绍,界面展示如下:​ 如何实现付款及时呢,首先用户下单后,存储用户的下单时间。下面介绍四种系统自动取消订单的方案: 一、DelayQueue 延时无界阻塞队列 我们的第 阅读全文
posted @ 2020-11-19 16:51 Java程序员进阶 阅读(3974) 评论(0) 推荐(1) 编辑
摘要:这里说的 js 跨域是指通过 js 在不同的域之间进行数据传输或通信,例如通过 ajax 向一个不同的域请求数据,或者通过 js 获取页面中不同域中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域 举个简单例子感受一下: ☛ 当我们通过 9105 端口的 js 服务访问 阅读全文
posted @ 2020-11-19 15:14 Java程序员进阶 阅读(104) 评论(0) 推荐(0) 编辑
摘要:一、Session 介绍 Session 一词直译为 “会话”,意指有始有终的一系列动作/消息。Session 是 Web 应用蓬勃发展的产物之一。在 Web 应用中隐含有“面向连接”和“状态保持”两个含义,同时也指代了 Web 服务器与客户端之间进行状态保持的解决方案。​在 Web 应用诞生之初, 阅读全文
posted @ 2020-11-19 15:10 Java程序员进阶 阅读(357) 评论(0) 推荐(0) 编辑
摘要:一、什么是FastDFS? FastDFS 是用 C 语言编写的一款开源的分布式文件系统,对文件进行管理,主要功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务。如相册网站、视频网站等等。 FastDFS 为互联网量身定制 阅读全文
posted @ 2020-11-19 15:09 Java程序员进阶 阅读(702) 评论(0) 推荐(0) 编辑
摘要:一、使用一致性 Hash 算法的原因 简单的路由算法可以使用余数 Hash:用服务器数据除缓存数据 KEY 的 Hash 值,余数为服务器列表下标编码。这种算法可以满足大多数的缓存路由需求。但是,当分布式缓存集群需要扩容的时候,事情就变得棘手了。举个例子:很容易可以计算出,3台缓存服务器扩容至4台服 阅读全文
posted @ 2020-11-19 14:56 Java程序员进阶 阅读(204) 评论(0) 推荐(0) 编辑
摘要:更多内容,访问 IT-BLOG 外观模式(Facade Pattern):隐藏系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统方法的委托调用。现实 阅读全文
posted @ 2020-11-19 14:55 Java程序员进阶 阅读(186) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 享元模式(Flyweight Pattern):主要用于减少创建对象的数量,以减少内存占用和提高性能。在面向对象程序的设计过程中,有时需要创建大量相似的对象实例。如果都创建将会消耗很多系统资源,它是系统性能提高的一个瓶颈。但如果将这些对象的相似部分抽取出来共享,则能节 阅读全文
posted @ 2020-11-19 14:54 Java程序员进阶 阅读(183) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 在现实生活中,一个对象不能直接访问另一个对象,这时需要找中介来访问目标对象,此时的中介就是代理对象。例如:租房子时,我们无法与房东取得联系,只能通过某网站与中介进行交易,获取自己心仪的房间等等。在软件设计中,使用代理模式的例子也很多,例如:访问阿里的 maven 仓库 阅读全文
posted @ 2020-11-19 14:46 Java程序员进阶 阅读(164) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 现实生活中常常需要给某类产品动态增加新的功能,如:给面条各种调味品。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成一些核心功能。但在不改变其架构的情况下,可以动态地扩展其功能。所以这些都可以采用装饰模式来实现。 一、装饰者定义 【1】装饰者模式:动态的 阅读全文
posted @ 2020-11-19 14:44 Java程序员进阶 阅读(151) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 在生活中,一些对象具有两个或多个维度的变化,如用户购买汽车时,既要考虑品牌(奔驰、哈佛)又要考虑类型(轿车、SUV)等等。如果使用继承的方式实现,m 种品牌和 n 种类型就有 m*n 种,不但对应的子类多,而且扩展困难。如果使用桥接模式就能很好地解决这些问题。 一、传 阅读全文
posted @ 2020-11-19 14:42 Java程序员进阶 阅读(135) 评论(0) 推荐(0) 编辑
摘要:跟多内容,前往 IT-BLOG 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。它结合了两个独立接口的功能。在现实生活中,经常会遇到类似接口不兼容而不能在一起工作的实例,这是就需要第三者j进行适配,例如:手机与电源,当手机需要充电时,就需要充电器来适配电源。 一、基本介 阅读全文
posted @ 2020-11-19 14:40 Java程序员进阶 阅读(189) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 建造者模式(Builder Pattern):使用简单的对象一步一步构建成一个复杂的对象。这种设计模式属于创建者模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。例如,计算机是由 CPU、 阅读全文
posted @ 2020-11-19 14:38 Java程序员进阶 阅读(157) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 原型模式(Prototype Pattern):是用于创建重复对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。 思想:J 阅读全文
posted @ 2020-11-19 14:35 Java程序员进阶 阅读(12) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 在程序设计中,经常需要访问一个聚合对象中的各个元素,例如:我们使用 list 存储元素,通常的做法是将 list 的创建和遍历放在同一个类中。但这种方法不利于扩展,如果将存储方式更改为数组时,就需要更换迭代方式。违背了 “开闭原则”。“迭代器模式” 能较好的克服以上缺 阅读全文
posted @ 2020-11-19 14:35 Java程序员进阶 阅读(205) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 生活中存在很多 “部分-整体” 的关系,例如:大学中的学校与学院、学院与专业的关系。高楼与楼层和房间之间的关系等等。在软件开发中也有类似的情况。这些简单对象与复合对象之间的关系,如果用组合模式(把学校、院、系都看作是组织结构,他们之间没有继承的关系,而是一种树形结构, 阅读全文
posted @ 2020-11-19 14:32 Java程序员进阶 阅读(130) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 在开发中,有些集合存在多种不同的对象实例(例如:男人、女人),且每个对象也存在多种不同的访问者或处理方式(性格:暴躁、温和)。这样的例子还有很多,例如:好声音节目中不同评委,以及评委对他们的评价的选项,等等。这些被处理的数据元素相对稳定,而访问方式多种多样的数据结构, 阅读全文
posted @ 2020-11-19 14:30 Java程序员进阶 阅读(267) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 软件开发中,通常会存在 “方法的请求者” 与 “方法的实现者” 之间存在紧密的耦合关系。这不利于软件功能的扩展与维护。特别是针对行为进行(撤销、重做、记录)一系列操作时很不方便,因此 “如何将方法的请求者与方法的实现者解耦”,是命令模式的主要任务和功能。在现实生活中, 阅读全文
posted @ 2020-11-19 14:27 Java程序员进阶 阅读(160) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 在面向对象程序设计过程中,程序员常常会遇到如下情况:设计一个系统时知道算法所需的关键步骤,且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如:去医院看病一般都要经历以下流程:挂号、排队、就诊、取药等,其中挂号和排队对每个 阅读全文
posted @ 2020-11-19 14:26 Java程序员进阶 阅读(360) 评论(0) 推荐(0) 编辑
摘要:跟多内容,前往 IT-BLOG 备忘录模式(Memento Pattern):保存对象的某个状态,以便在未来需要的时候进行数据的恢复。相当容易理解,举个简单的例子:Word 软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态; 一、备忘录模式的基本介绍 【1】备忘录模式(M 阅读全文
posted @ 2020-11-19 14:24 Java程序员进阶 阅读(188) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是 “网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,班长和团支书等干部需要记住同学们的电话,且同学中如果有人的电话修改了,需要告诉所有干部,自己的手机号修改了,这叫作 “牵一发而动全 阅读全文
posted @ 2020-11-19 14:23 Java程序员进阶 阅读(160) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。简单工厂模式是由一 阅读全文
posted @ 2020-11-19 14:21 Java程序员进阶 阅读(155) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 生活中,许多事物不是单独存在的,其中一个事物发生变化可能会导致一个或多个其他事物的行为也发生变化。例如:公众号的博主与用户之间(每当推送一篇文章,我们就能被动的接收到一篇文章,前提是你关注了它)。在软件设计中也是一样,例如:MVC 模式中的模型与视图的关系。此类场景使 阅读全文
posted @ 2020-11-19 14:13 Java程序员进阶 阅读(224) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据 阅读全文
posted @ 2020-11-19 14:05 Java程序员进阶 阅读(140) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、什么是单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建(私有的构造器),这 阅读全文
posted @ 2020-11-19 14:03 Java程序员进阶 阅读(126) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 设计模式的目的是为了让程序,具有更好的代码重用性、可读性(编程规范性,便于后期维护和理解)、可扩展性(当需要增加新需求时,非常方便)、可靠性(增加新功能后,对原功能么有影响)、使程序呈现高内聚,低耦合的特性。设计模式包含了面向对象的精髓,“懂了设计模式,就懂得了面向对 阅读全文
posted @ 2020-11-19 13:57 Java程序员进阶 阅读(776) 评论(1) 推荐(1) 编辑
摘要:更多内容,前往 IT-BLOG 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工差旅费的报销,可审批的领导有部门负责人、副总经理、总经理等,但每个领导能批准的金额不同,员工必须根据自己要批准的金额去找不同的领导签名,也就是说员工必须记住每 阅读全文
posted @ 2020-11-19 11:19 Java程序员进阶 阅读(16) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 在现实生活中,常常会出现这样的事例:一个人的情绪高兴时,会做出一些助人为乐的事情。情绪低落的时候,会做出一些伤天害理的事情。这里的情绪就是状态,对应做的事情就是行为。在软件开发中也是类似的,有些对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而 阅读全文
posted @ 2020-11-19 10:45 Java程序员进阶 阅读(228) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、概述 死锁是指两个或两个以上的进程在执行过程中,因争抢资源而造成的一种互相等待的现象,若无外力干涉它们将无法推进,如果系统资源充足,进程的资源请求能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。​ 死锁产生的原因:【1】系统资源不足;【2 阅读全文
posted @ 2020-11-18 20:55 Java程序员进阶 阅读(1816) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、并发编程模型的两个关键问题 【1】并发中常见的两个问题:线程之间如何通信及线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:内存共享和消息传递;【2】在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存 阅读全文
posted @ 2020-11-18 20:45 Java程序员进阶 阅读(29) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 锁主要分为两种:乐观锁和悲观锁,而 synchronized 就属于一种悲观锁,每次在操作数据前都会加锁。乐观锁是指:乐观的认为自己在操作数据时,别人不会对当前数据进行修改,因此不会加锁。如果有人对数据进行了修改,则重新获取修改后的数据,进行操作。直到成功为止。而乐观 阅读全文
posted @ 2020-11-18 20:37 Java程序员进阶 阅读(2594) 评论(0) 推荐(0) 编辑
摘要:系统性学习,移步IT-BLOG Java 对象拥有一组监视方法:wait()、wait(long timeout)、notify() 以及 notifyAll() 方法,这些方法与 synchronized 同步关键字配合,可以实现等待/通知模式,进行线程之间的通讯。Condition 接口也提供了 阅读全文
posted @ 2020-11-18 20:17 Java程序员进阶 阅读(43) 评论(0) 推荐(0) 编辑
摘要:一、什么是 Fork/Join框架 更多内容,前往 IT-BLOG Fork/Join 框架是 Java7提供的一个用于并发执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果得到大任务结果的框架。我们通过 Fork和 Join这两个单词来理解一下 Fork/Join框架。For 阅读全文
posted @ 2020-11-18 19:37 Java程序员进阶 阅读(14) 评论(0) 推荐(0) 编辑
摘要:对象头[每个对象都具有对象头] Mark:对象头的标记(32位),描述对象的 hash、锁信息、垃圾回收标记、年龄;内容包括:①、指向锁记录的指针;②、指向 monitor 的指针;③、GC 标记;④、偏向锁线程 ID;​ 一、偏向锁 偏向锁无法使用自旋锁优化,因为一旦有其他线程申请锁,就破坏了偏向 阅读全文
posted @ 2020-11-18 18:02 Java程序员进阶 阅读(79) 评论(0) 推荐(0) 编辑
摘要:一、什么情况下会发生栈内存溢出 【1】线程请求的栈深度大于虚拟机所允许的深度,将抛出 StackOverflowError 异常。递归的调用一个简单的方法,不断累积就会抛出 StackOverflowError 异常。【2】如果虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出 OutOfMemo 阅读全文
posted @ 2020-11-18 18:01 Java程序员进阶 阅读(56) 评论(0) 推荐(0) 编辑
摘要:一、整体架构 ​ 二、强引用(默认支持) 当内存不足,JVM 开始垃圾回收,对于强引用的对象,就算是出现了 OOM 也不会对该对象进行回收,死都不收。强引用是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾回收器不会碰这种对象。在Java 中最常见的就是强引用,把一 阅读全文
posted @ 2020-11-18 17:51 Java程序员进阶 阅读(115) 评论(0) 推荐(0) 编辑
摘要:一、为什么要备份 【1】容灾恢复:硬件故障、不经意的 Bug 导致数据损坏,或者服务器及其数据由于某些原因不可获取或无法使用等(例如:机房大楼烧毁,恶意的黑客攻击或 Mysql 的 Bug 等)。【2】人们改变想法:很多人经常会在删除某些数据后,又想恢复这些数据。【3】审计:有时需要知道数据或 Sc 阅读全文
posted @ 2020-11-18 17:47 Java程序员进阶 阅读(130) 评论(0) 推荐(0) 编辑
摘要:更多内容,移步IT-BLOG 排查思路 【1】定位高负载进程 pid:登录进服务器使用 top 或 top -c命令[ps -ef | grep xxx 命令]查看当前 CPU消耗过高的进程,从而得到进程id。观察各个进程资源使用情况,可以看出进程id为18571的进程,有着较高的CPU占比。按P( 阅读全文
posted @ 2020-11-18 17:45 Java程序员进阶 阅读(313) 评论(0) 推荐(0) 编辑
摘要:kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 一、中间件常识 【1】消息系统分类(两种):1)、Peer-to-Peer:发送到队列中的消息仅仅被一个接收者接收。支持异步 “即发即弃” 的消息传送方式,也支持同步 “请求应答” 阅读全文
posted @ 2020-11-18 17:40 Java程序员进阶 阅读(15) 评论(0) 推荐(0) 编辑
摘要:一、消息队列的使用场景 ☞ 以下介绍消息队列在实际应用常用的使用场景。异步处理、应用解耦、流量削锋和消息通讯四个场景。【1】异步处理:场景说明:用户注册后,需要发注册邮件和注册短信。 引入消息队列后架构如下:用户的响应时间=注册信息写入数据库的时间,例如50毫秒。发注册邮箱、发注册短信写入消息队列后 阅读全文
posted @ 2020-11-18 17:39 Java程序员进阶 阅读(256) 评论(0) 推荐(0) 编辑
摘要:RabbitMQ 是实现高级消息队列协议(AMQP:Advanced Message Queue Protocol)的开源代理软件,也称为面向消息的中间件。支持多种操作系统、多种编程语言。RabbitMQ 服务器使用 Erlang 语言编写,其集群和故障转移是构建在开放电信平台框架上的。 AMQP 阅读全文
posted @ 2020-11-18 17:38 Java程序员进阶 阅读(90) 评论(0) 推荐(0) 编辑
摘要:一、生产者发送消息的步骤 ​创建一个 ProducerRecord 对象,对象中包含目标主题和要发送的内容。还可以指定键或分区。在发送 ProducerRecord 对象时,生产者要先把键和值对象序列化成字节数组,这样它们才能够在网络上传输。接下来,数据被传给分区器。分区器直接把指定的分区返回。如果 阅读全文
posted @ 2020-11-18 17:36 Java程序员进阶 阅读(728) 评论(0) 推荐(0) 编辑
摘要:一个商业化消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关键指标之一。下面将从 Kafka文件存储机制和物理结构角度,分析 Kafka是如何实现高效文件存储,及实际应用效果。Kafka 的基本存储单位是分区。在配置 Kafka 的时候,管理员指定了一个用于存储分区的目录清单 阅读全文
posted @ 2020-11-18 17:08 Java程序员进阶 阅读(591) 评论(0) 推荐(0) 编辑
摘要:消费者不需要自行管理 offset(分组+topic+分区),系统通过 broker 将 offset 存放在本地。低版本通过 zk 自行管理。系统自行管理分区和副本情况。消费者断线后会自动根据上一次记录的 offset 去获取数据(默认一分钟更新一次 offset),同一个分组中的客户不能同时消费 阅读全文
posted @ 2020-11-18 16:17 Java程序员进阶 阅读(2564) 评论(0) 推荐(0) 编辑
摘要:系统性学习,移步IT-BLOG 一、写日志引发故障 【故障现象】:应用服务集群发布后不久就出现多台服务器相继报警,硬盘可用空间低于警戒值,并且很快有服务器宕机。登录在线上服务器,发现 log 文件夹里面的文件迅速增加,不断消耗磁盘空间。【原因分析】:这是一个普通的应用服务器集群,不需要存储数据,因此 阅读全文
posted @ 2020-11-18 15:42 Java程序员进阶 阅读(83) 评论(0) 推荐(0) 编辑
摘要:如果把查询看作是一个任务,那么它由一些列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数。通常来说,查询的生命周期大致可以按照顺序来看:从客户端到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其 阅读全文
posted @ 2020-11-18 15:28 Java程序员进阶 阅读(227) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、Mybatis 实现 start 的原理 首先在写一个自定义的 start 之前,我们先参考下 Mybatis 是如何整合 SpringBoot:mybatis-spring-boot-autoconfigure 依赖包: <dependency> <groupI 阅读全文
posted @ 2020-11-18 15:26 Java程序员进阶 阅读(429) 评论(0) 推荐(0) 编辑
摘要:索引有很多种类型,为不同的场景提供更好的性能。在MySQL中,索引是在存储引擎层而不是服务器层实现。不同存储引擎的索引其工作方式并不一样。也不是所有存储引擎都支持所有类型的索引。即使多个存储引擎支持同一种类型的索引,其底层实现也可能不同。 一、B-Tree 索引 我们通过提到索引时,多半说的都是 B 阅读全文
posted @ 2020-11-18 15:25 Java程序员进阶 阅读(170) 评论(0) 推荐(0) 编辑
摘要:系统性学习,移步IT-BLOG 一、什么是 Redis Cluster Redis 是在内存中保存数据的,而我们的电脑一般内存都不大,这也意味着 Redis 不适合存储大数据,适合存储大数据的是 Hadoop 生态系统的 Hbase 或者是 MogoDB 。Redis 更适合处理高并发,一台设备的存 阅读全文
posted @ 2020-11-17 07:26 Java程序员进阶 阅读(1540) 评论(0) 推荐(0) 编辑
摘要:Reids 所有的数据结构都以唯一的 key 字符串作为名称,然后通过这个唯一的 key 值来获取相应的 value 数据。不同的数据结构差异就在于 value 的结构不一样。 一、Redis 五大数据类型 【1】String(字符串):String 是 Redis 最基本的类型,一个 key 对应 阅读全文
posted @ 2020-11-17 07:17 Java程序员进阶 阅读(321) 评论(0) 推荐(0) 编辑
摘要:系统性学习,移步IT-BLOG 要进行 Redis 的故障定位,一般通过分析 Redis 日志、应用日志和 Redis 的监控信息来定位相关问题。 一、Redis 日志设置 【1】日志文件:Redis 默认日志在控制台打印,启动时即可看到对应日志打印到控制台上。建议修改 redis.config 的 阅读全文
posted @ 2020-11-16 23:54 Java程序员进阶 阅读(2571) 评论(0) 推荐(0) 编辑
摘要:一、概述 【1】Redis 是基于 Reactor 模式开发的网络事件处理器:这个处理器被称为文件事件处理器(file event handler),这个文件事件处理器是单线程的,所以 Redis 才叫做单线程的模型: ■ 文件事件处理器使用 I/O 多路复用(multiplexing)机制监听多个 阅读全文
posted @ 2020-11-16 23:51 Java程序员进阶 阅读(202) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任 阅读全文
posted @ 2020-11-16 21:57 Java程序员进阶 阅读(143) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 一、稀疏数组的定义 稀疏(sparsearray)数组:可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组。 稀疏数组的应用场景:五子棋程序,有存盘退出和续上盘的功能,将五子棋盘转化成二维数组如下所示:分析上述问题:因为该二维数组默认的 阅读全文
posted @ 2020-11-16 21:55 Java程序员进阶 阅读(409) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。链表是有序的列表,但是它 阅读全文
posted @ 2020-11-16 21:45 Java程序员进阶 阅读(219) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 一、什么是堆 【1】堆是一个完全二叉树,特点是从上往下,从左往右以次排列的;【2】在堆的数据结构中,堆中的最大值总是位于根节点,所有父节点都满足大于等于其子节点; ​我们对堆 阅读全文
posted @ 2020-11-16 21:19 Java程序员进阶 阅读(245) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之) 阅读全文
posted @ 2020-11-16 21:07 Java程序员进阶 阅读(131) 评论(0) 推荐(0) 编辑
摘要:快速排序(QuickSort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将需要排序的数据分成独立两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按照此方法对这两组数据分别进行快速排序,这个排序过程可以递归进行,以此达到整个数据变成有序序列。 一、基本介绍 快速排序是实践中的一种 阅读全文
posted @ 2020-11-16 20:48 Java程序员进阶 阅读(114) 评论(0) 推荐(0) 编辑
摘要:更多内容,前往 IT-BLOG AVL (平衡二叉树:追求"完全平衡")树的另一种变种是红黑树(Red-Black-Tree:只要求部分达到平衡)其就是一个二叉查找树。对红黑树的操作在最坏情形下花费 时间。红黑树是具有下列着色性质的二叉查找树:<br />【1】每个节点或者是黑色,或者是红色。<br 阅读全文
posted @ 2020-11-16 20:46 Java程序员进阶 阅读(136) 评论(0) 推荐(0) 编辑
摘要:更多内容,移步 IT-BLOG 一、JAVA中的几种基本数据类型 Java语言中一共提供了8种原始的数据类型(byte,short,int,long,float,double,char,boolean),这些数据类型不是对象,而是 Java语言中不同于类的特殊类型,这些基本类型的数据变量在声明之后就 阅读全文
posted @ 2020-11-16 18:06 Java程序员进阶 阅读(161) 评论(0) 推荐(0) 编辑
摘要:一、本地事务 更多内容,前往 IT-BLOG 在计算机系统中,更多的是通过计算机控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系型数据库来控制事务,而数据库通常和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。 数据库事务的四大特性:数据库在实现时 阅读全文
posted @ 2020-11-16 10:21 Java程序员进阶 阅读(211) 评论(0) 推荐(0) 编辑
摘要:一、什么是线程 线程是指程序在运行的过程中,能够执行程序代码的一个执行单元。Java语言中,线程有四种状态:运行、就绪、挂起、结束 二、线程与进程的区别 进程是指一段正在执行的程序。而线程有时也被称为轻量级进程,它是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段 阅读全文
posted @ 2020-11-15 14:51 Java程序员进阶 阅读(113) 评论(0) 推荐(0) 编辑
摘要:一、MyBatis 简介 【1】MyBatis 是支持定制化 SQL,存储过程以及高级映射的优秀持久化框架。【2】MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取查询结果集。【3】MyBatis 可以使用简单的 XML 或者注解用于配置和原始映射,将接口和 Java 的 POJ 阅读全文
posted @ 2020-11-15 14:44 Java程序员进阶 阅读(495) 评论(0) 推荐(0) 编辑
摘要:定义:锁是计算机协调多个进程或线程并发访问某一资源的机制。 一、表锁(偏读) MyISAM 引擎,开销小,加锁快,无死锁、锁定粒度大、发生锁冲突的粒度最高,并发度低。 【1】手动增加表锁:lock table 表名1 read(write),表名2 read(write),其他;【2】查看那些表加锁 阅读全文
posted @ 2020-11-15 14:34 Java程序员进阶 阅读(50) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示