![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
doubicheng
这个作者很懒,什么都没留下…
展开
-
多线程学习(二)
为啥会有这篇文章时光飞逝,回到2017年,年末;小编刚自学完编程以及三大框架,可谓信心满满,剑指offer。殊不知,在第一场面试中,被一位小杨(年龄不大)面试官上了一课;这些年过去了,可谓记忆犹新。小杨:来,你说说多线程 阿牛:线程是进程中的一个执行单元。。。 小杨:那多线程有几种实现方式 阿牛:2种(毫不犹豫,这谁还不知道!!) 小杨:那这两种有啥区别 阿牛:嗯。。。(瞬间懵B)就这样,我在忐忑中,接受着小杨的各种拷问,最终以“回去等通知吧”而结束;面试完,虽隐约能猜到.转载 2020-10-23 13:48:04 · 221 阅读 · 0 评论 -
Kafka_learn(四)
(1)消息队列Kafka有了解吗?答:Kafka是一个消息队列,可以实现发布订阅模式,在异步通信或者生产者和消费者需要解耦合的场景中经常使用,可以对数据流进行处理等。Kafka的特性如下所示:Kafka支持消息的快速持久化 支持批量读写消息 支持消息分区,并且支持在线增加分区,提高了并发能力 支持为每个分区创建多个副本Kafka可以实现消息的快速持久化的原因:KafKa将消息保存在磁盘中,并且读写磁盘的方式是顺序读写,避免了随机读写磁盘(寻道时间过长)导致的性能瓶颈。 磁盘的.转载 2020-08-24 20:11:27 · 237 阅读 · 0 评论 -
Kafka_learn(三)
Kafka作为消息系统Kafka streams的概念与传统的企业消息系统相比如何?传统的消息系统有两个模块:队列和发布-订阅。 在队列中,消费者池从server读取数据,每条记录被池子中的一个消费者消费; 在发布订阅中,记录被广播到所有的消费者。两者均有优缺点。 队列的优点在于它允许你将处理数据的过程分给多个消费者实例,使你可以扩展处理过程。 不好的是,队列不是多订阅者模式的—一旦一个进程读取了数据,数据就会被丢弃。 而发布-订阅系统允许你广播数据到多个进程,但是无法进行扩展处理,因为每条消...转载 2020-08-24 20:11:42 · 78 阅读 · 0 评论 -
Kafka_learn(二)
Topics和日志让我们首先深入了解下Kafka的核心概念:提供一串流式的记录— topic 。Topic 就是数据主题,是数据记录发布的地方,可以用来区分业务系统。Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。对于每一个topic, Kafka集群都会维持一个分区日志,如下所示:每个分区都是有序且顺序不可变的记录集,并且不断地追加到结构化的commit log文件。分区中的每一个记录都会分配一个id号来表示顺序,我们称之为offse转载 2020-08-24 20:12:02 · 130 阅读 · 0 评论 -
Kafka_learn(一)
1. 入门1.1 介绍Apache Kafka® 是一个分布式流处理平台. 这到底意味着什么呢?我们知道流处理平台有以下三种特性:可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。 可以储存流式的记录,并且有较好的容错性。 可以在流式记录产生时就进行处理。Kafka适合什么样的场景?它可以用于两大类别的应用:构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue) 构建实时流式应用程序,对这些流数据进行转换或者影响.转载 2020-08-24 20:12:12 · 152 阅读 · 0 评论 -
日志es(一)
介绍如果你使用elasticsearch来存储你的日志,本文给你提供一些做法和建议。如果你想从多台主机向elasticsearch汇集日志,你有以下多种选择:Graylog2安装在一台中心机上,然后它负责往elasticsearch插入日志,而且你可以使用它那个漂亮的搜索界面~ Logstash他有很多特性,包括你能输入什么日志,如何变换过滤,最好输出到哪里。其中就有输出到elasticsearch,包括直接输出和通过RabbitMQ的river方式两种。 Apache Flume这个...转载 2020-08-24 20:12:20 · 611 阅读 · 0 评论 -
设计模式学习(七)
依赖倒置原则什么是依赖倒置原则(Dependence Inversion Principle, DIP) 依赖倒置原则的包含如下的三层含义:高层模块不应该依赖低层模块,两者都应该依赖其抽象 抽象不应该依赖细节 细节应该依赖抽象 每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块(一般是接口,抽象类),原子逻辑的组装就是高层模块。在Java语言中,抽象就是指接口和或抽象类,两者都不能被直接实例化。细节就是实现类,实现接口或继承抽象类而产生的类就是细节,可以被直接实例化。下面转载 2020-08-12 21:20:17 · 146 阅读 · 0 评论 -
设计模式学习(六)
接口分离原则接口隔离原则: 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。未遵循接口隔离原则的设计:遵循接口隔离原则的设计:根据接口隔离原则拆分接口时,必须首先满足单一职责原则。我们来举个例子来说明接口隔离原则到底对我们提出了什么要求。现在男生对小姑娘的称呼使用频率 最高的应该是“美女”了吧,我们今天来定义一下什么是美女:首先要面貌好看,其次是身材要窈窕,然 后要有气质,当然了,这三者各人的排列顺序不一样,总之要成为一名美女就必须具备:..转载 2020-08-12 21:19:51 · 93 阅读 · 0 评论 -
设计模式学习(五)
里氏替换原则(Liskov Substitution Principle,简称LSP):子类可以替换父类继承有一些优点: 1. 提高代码的重用性,子类拥有父类的方法和属性; 2. 提高代码的可扩展性,子类可形似于父类,但异于父类,保留自我的特性;缺点:侵入性、不够灵活、高耦合 1. 继承是侵入性的,只要继承就必须拥有父类的所有方法和属性,在一定程度上约束了子类,降低了代码的灵活性; 2. 增加了耦合,当父类的常量、变量或者方法被修改了,需要考虑子类的修.转载 2020-08-12 21:19:31 · 136 阅读 · 0 评论 -
设计模式学习(四)
开闭原则开闭原则是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。也就是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。我们以书店销售书籍为例来说明什么是开闭原则。其类图如下:书籍及其实现类代码如下:书店类代码:项目开发完了,开始正常卖书了。假如到了双十一,要搞打折活动,上面的功能是不支持的,所以需要修改程序。有三种方法可以解决这个问题:(1)修改接口在IBook接口里新增getOffPrice()方法,专门用于进行打折,所有的实现转载 2020-08-03 20:52:03 · 102 阅读 · 0 评论 -
设计模式学习(三)
单一职责一、单一职责原则的概念Single Responsibility Principle,SRP:一个类被改变的原因不能超过一个,也就是说,一个类只有一个职责,如果职责过多,代码就会臃肿,可读性更差,也更难以维护。其实上单一职责原则和接口隔离原则有一定的关系,接口隔离以后,职责就单一了,实现这个接口的类的职责自然也就单一了。但是接口隔离关注的是抽象层,单一职责关注的是两者兼而有之,偏重于实现。二、为什么要遵守单一职责原则1、提高类的可维护性和可读写性一个类的职责少了,复杂度降低了转载 2020-08-03 20:51:43 · 76 阅读 · 0 评论 -
spring_个人学习(五)
Swagger2 自动化测试与文档1、Swagger2 功能Swagger2 可以识别控制器中的方法,然后自动生成可视化的测试界面。后端开发人员编写完 Spring Boot 后端接口后,直接可视化测试就行了。无需借助 Postman 等工具,也无需编写测试类和测试方法,更无需联系前端开发确认接口是否正常。如果给控制器方法添加注解,还能自动生成在线 API 文档,简直太省心了。2、Spring Boot 中使用 Swagger2 流程引入 Swagger2 相关依赖 启用并配置转载 2020-07-20 09:50:32 · 87 阅读 · 0 评论 -
spring_个人学习(四)
Spring Boot 开发 RESTful 风格 Web 项目整体流程说明1、根据需求制定 RESTful 风格的接口文档eg:2、按文档开发后端 API 接口eg:使用 Spring Initializr 创建项目 引入项目依赖 创建商品类与商品服务类 根据 API 文档实现控制器方法3、使用 Postman 测试 API 接口可用...转载 2020-07-20 09:35:58 · 87 阅读 · 0 评论 -
设计模式学习(二)
二、单例模式单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。关键代码:构造函数是私有的。应用实例eg:一个班级只有一个班主任。 Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一原创 2020-07-17 09:44:09 · 127 阅读 · 0 评论 -
设计模式学习(一)
一,简单的工厂模式首先举一个例子:我们现在开了一家饭馆:然后呢我们的大厨可以做三种菜,还有一句潇洒的抱怨:下面客人进场,开始点餐:我们观察上面的代码,虽然很好的完成了任务,但是,我们的三个实现类和和借口紧密的绑定到了一起,这意味着我们的代码耦合出现严重问题,不利于以后的维护,试想顾客点餐需要与后厨大厨直接接触,这肯定是一个不好的体验,那么我们就需要一个传菜员或者一个点餐系统:这个时候,客人再点餐的话就可以直接找到该服务员,让他负责跟后厨沟通:这个转载 2020-06-21 14:49:37 · 170 阅读 · 0 评论 -
spring_个人学习(三)
1.新建springBoot项目(1)(2)(3)(4)(5)(6)2.配置项目JDK(前面已经配置的可以不用配置)(1)(2)3.把项目配置成maven项目(1)(2)(3)(4)(5)(6)(有maven项目这里结构有test)4.访问json配置数据库在默认生成的application.properties文件里配置(我启动报错,加上?serverTimezone=UTC就不报.转载 2020-06-19 17:23:04 · 167 阅读 · 0 评论 -
spring_个人学习(二)
学习目标快速学会在项目中使用热部署插件运行项目,提高开发效率。快速查阅相关教程: IDEA快速入门教程(2018图文版)专题阅读:《SpringBoot 布道系列》具体步骤一、开启IDEA的自动编译(静态)具体步骤:打开顶部工具栏 File -> Settings -> Default Settings -> Build -> Compiler 然后勾选 Build project automatically 。二、开启IDEA的自动编译(动态)转载 2020-06-19 17:14:13 · 95 阅读 · 0 评论 -
spring_个人学习(一)
1、什么是Spring?Spring 是一个开源框架 Spring 为 简化企业级应用开发而生。使用Spring 可以使简单的JavaBean实现以前只有EJB才能实现的功能 Spring 是JavaSE/EE的一站式框架方便解耦,简化开发-Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理AOP编程的支持-Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能声明式事务支持-只需要通过配置就可以完成对事务的管理,而无需手动编原创 2020-05-11 20:22:39 · 122 阅读 · 0 评论 -
java_集合学习(一)
JavaHashMap⼀、概述在官⽅⽂档中是这样描述HashMap的:Hash table based implementation of the Map interface. This implementation providesall of the optional map operations, and permits null values and the null key. (TheHashMap class is roughly equivalent to Hashtable, excep原创 2020-05-11 11:06:31 · 126 阅读 · 0 评论 -
算法(四十八)
### 1、给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当k= 2 时,应当返回: 2->1->4->3->5当k= 3 时,应当返回: 3->2->1->4->5### 参考代码一: public ListNode ...原创 2020-05-11 10:42:05 · 151 阅读 · 0 评论 -
算法(四十七)
1、**判断一个运算表达式的左右括号是否全部合法**public class test010 { private HashMap<Character, Character> mappings; public test010() { this.mappings = new HashMap<Character, Character>(); this.mappings.put(')', '('); this.mappings...原创 2020-05-11 10:40:54 · 800 阅读 · 0 评论 -
算法(四十六)
1、找出一个字符串中不同字符的种类个数。import java.util.HashSet;import java.util.Set;public class test009 { public static void main(String[] args) { String s = "abcde"; Set<Character> set = new HashSet<>(); for(int i=0; i<s.leng...原创 2020-05-11 10:39:07 · 180 阅读 · 0 评论 -
算法(四十五)
1、二叉树遍历(采用中序)**方法一***二叉树节点*public class Node { public Node left; public Node right; public int val; public Node(int data){ this.val = data; }}**递归**public static void inOrderRecursion(Node head){ if(head == null){...原创 2020-05-11 10:37:34 · 170 阅读 · 0 评论 -
算法(四十四)
1、求最大子数组和。输入一个整形数组,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组和的最大值。例:输入的数组为1,-2,3,10,-4,7,2,-5。和最大的子数组为3,10,-4,7,2。因此输出该子数组的和为18。代码如下:**方法一**(暴力法)public class test005 { public static void main(String[] args) { int[] a = new int[]{1,-2, 3,10, -4...原创 2020-05-11 10:34:53 · 147 阅读 · 0 评论 -
算法(四十三)
1、存储有[0,n)的数组,数组长度为len。只能交换数组里n和0的位置进行排序.输入 数组a为:{3,4,2,5,1,0,9,7,8,6}输出 数组a为:{0 1 2 3 4 5 6 7 8 9}public class test003 { public static void main(String[] args) { int[] a = new int[]{3,4,2,5,1,0,9,7,8,6}; sort(a, a.length); f...原创 2020-05-11 10:29:05 · 275 阅读 · 1 评论 -
算法(四十二)
1、给你一个包含数字的数组,返回所有可能组成ip的结果。如果没有返回false输入:数组a为[2,5,5,2,5,5,1,1,1,3,5]输出:[255.255.11.135, 255.255.111.35]import java.util.ArrayList;import java.util.List;public class test001 { public static void main (String[] args) { test035 ip = new te...原创 2020-05-11 10:20:25 · 190 阅读 · 0 评论 -
算法(四十一)
1、为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为k。因为一些特殊的原因,不会出现一个查询的用户区间完全覆盖另一个查询的用户区间(不存在L1<=L2<=R2<=R1)。输入描述:...原创 2020-04-05 17:22:19 · 217 阅读 · 0 评论 -
算法(四十)
1、实现一个算法,确定一个字符串s的所有字符是否全都不同。classSolution{publicbooleanisUnique(Stringastr){intlen=astr.length();for(inti=0;i<len;i++){for(intj=i+1;j<l...原创 2020-04-02 10:54:39 · 86 阅读 · 0 评论 -
java学习(二十五)
1、HashSet和TreeSet的区别实现方式HashSet:HashSet是哈希表实现的。TreeSet:TreeSet是二差树实现的。数据是否有序HashSet:HashSet中的数据是无序的。TreeSet:Treeset中的数据是自动排好序的。是否可以放入null值HashSet:可以放入null,但只能放入一个null。TreeSet:不允许放入null...原创 2020-03-30 21:12:22 · 104 阅读 · 0 评论 -
java算法(三十九)
1、给定一个用数字表示的迷宫矩阵,其中-2是入口,-3是出口,-1是障碍物,0表示道路,>0的表示传送门,处于传送门的位置可以像道路一样从上下左右走,相比道路传送门可以一步就传送到另外一个传送门的位置。比如上面的例子:第一行的1可以直接跳到行末的1。输入:4 31 0 -1 1-2 0 -1 -32 2 0 0输出:3代码如下:package com.c...原创 2020-03-25 16:30:47 · 118 阅读 · 0 评论 -
算法(三十八)
1、用户模型文件去重。抖音上不同的用户类型我们有不同的用户模型文件。我们有一个模型配置文件,里面有很多的不同用户类型和他们对应的模型文件。我们需要找出每个模型文件对应的是哪些用户类型。给定一行输入,格式为:a ba表示这个用户的用户类型,b表示这个用户对应的模型文件。请你输出每个模型文件对应的用户类型。注意:每个模型文件可能对应多个用户类型,用户类型之间用空格作为切分。注意...原创 2020-03-24 17:35:25 · 228 阅读 · 0 评论 -
算法(三十七)
1、根据逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) = 9示例...原创 2020-03-18 14:08:03 · 94 阅读 · 0 评论 -
java学习(二十四)
1、用linux命令,统计文档中出现字符串的次数。grep -c '要统计的字符串' fileName zgrep -c '要统计的字符串' fileName(服务器端常有很多压缩过的日志文件,为了避免解压文件,可以使用zgrep,zcat等命令查找、查看压缩文件中的信息) grep '要统计的字符串' fileName | wc -l2、static关键字static是...原创 2020-03-17 16:43:37 · 167 阅读 · 0 评论 -
java学习(二十三)
1、简单说一下MVCCMVCC是一种多版本并发控制机制。MVCC是为了解决什么问题?大多数的MYSQL事务型存储引擎,如,InnoDB等都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用. 锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销.MVCC实现:MVCC是通过保存数据在某个时间点的...原创 2020-03-16 21:12:05 · 159 阅读 · 0 评论 -
java学习(二十二)
1、synchronized和可重入锁的区别可重入性:ReenTrantLock和synchronized使用的锁都是可重入的,两者都是同一个线程每进入一次,锁的计数器都自增1,所以等到锁的计数器下降为0时才能释放锁。synchronized由编译器加锁和释放,默认是非公平锁,ReenTrantLock手动加锁和释放锁。ReenTrantLock独有的能力:ReenTrantLock...原创 2020-03-16 16:40:02 · 362 阅读 · 0 评论 -
算法(十四)
1、1->8->5->4->6->3->2 以某个节点为分隔。要求所有比该节点小的都在该节点前,比该节点大的都在节点后但是相对位置不变如:x=4时,1->3->2->4->8->5->6。public class test013 { public static void main(String[] args) {...原创 2020-03-17 16:44:59 · 119 阅读 · 0 评论 -
算法(三十二)
1、在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点保留一个,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5private static ListNode fun2(ListNode head) { ListNode res = new ListNode(0); ...原创 2020-03-15 15:11:38 · 85 阅读 · 0 评论 -
java算法(九)
1、从上往下打印出二叉树的每个节点,同层节点从左至右打印。import java.util.*;public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayLi...原创 2020-03-08 15:04:52 · 93 阅读 · 0 评论 -
java算法(三十六)
1、101-200素数的个数方法一public static void main(String[] args) { boolean flag = false; int num = 0; for(int i=101; i<200; i++){ for (int j=2; j<i; j++){ if(i%j == 0...原创 2020-03-03 09:47:36 · 139 阅读 · 0 评论 -
java学习(十九)
1、jdk1.6之前和现在jdk1.8哪些地方做了改动(JVM),为什么要这样做?“PermGen space”其实指的就是方法区。不过方法区和“PermGen space”又有着本质的区别。前者是 JVM 的规范,而后者则是 JVM 规范的一种实现。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。...原创 2020-03-03 11:39:46 · 148 阅读 · 0 评论