自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

司新博的博客

本人为编程爱好者,此博客主要发布一些技术性的个人笔记,如有见解请多多指教。

  • 博客(46)
  • 资源 (3)
  • 收藏
  • 关注

原创 【线上问题系列1】线程池资源不足引发kafka无法消费的问题

一、二、IO的一些常见类三、基于IO和Socket做一个简单的聊天室四、IO为什么阻塞,在NIO中是如何解决的

2021-06-17 14:13:34 1046 1

原创 Kafak常用命令总结

##查看某个消费者组所有消费者的消费状态/kafka_2.12-1.1.1/bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group data-statistics-consumer-group --describe##查看topic列表/kafka_2.12-1.1.1/bin/kafka-topics.sh --zookeeper localhost:2181 --list##创建一个topic并且指定...

2021-04-16 13:22:52 279

原创 记录一个分页优化小技巧

MySql提供了limit命令为我们提供分页,语句格式如select column1,column2...columnN from table limit a,b; a表示数据下标起始地址,b表示需要检索的数据条数。limit是通过下标检索的,比如表中有一万条数据时候,limit 10000,10 会从第一条数据开始,直到下标为10000,这是非常糟糕的情况。如何进行优化呢,使用索引是一个非常好的办法,那如何让分页时进行索引查询呢?在表中存在自增主键或其他自增字段的情况下,我们可以使用se...

2020-12-30 11:47:31 160

原创 Java多线程-线程池

线程池实质上就是通过将单个线程通过容器进行管理,从而避免在高并发场景下,因为频繁的创建和销毁线程,从而造成不必要的性能开销。Java线程池中各个接口和类的继承关系如下图:一、常用类1、Executor接口线程池中最顶层的接口是Executor,接口中只有一个void execute(Runnable command); 可以提交Runnable接口创建的线程,没有返回值2、ExecutorService接口ExecutorService接口实现了Executor接口,..

2020-12-17 17:52:45 150

原创 闲来无事,用Java写一个LRU

LRU中文大概可以翻译为最近最少使用,在存储空间有限的时候,如果还需要加入新的元素,那么就很有必要移除已经存在元素中最少使用(最长时间没有被访问)的元素。LRU也是数据结构中比较常见的一个问题,在此之前也只知道其作用和大概的实现原理,没有用代码实现过,今天闲来无事,尝试写了一下,整体如下:思路:使用双端链表实现,支持增删查等操作insert:每次新元素从头部插入,容器长度没有达到maxSize的时候之间插入,如果容器已经满,则进行删除操作contains:查询是否存在指定值,如果存在,则将该元素

2020-11-24 12:18:52 373 7

原创 Synchonized锁的优化

Synchonized锁做了哪些优化?昨天面试的时候被面试官问到这个问题,但是不够了解,所以在面试结束后查阅资料,在此作下总结。Synchonized锁的原理以及作用此次不再过多介绍,可以参考此前文章Java多线程及Synchonized关键字;Synchronized锁在JDK1.6的时候做了大量优化,从而实现高效并发,如下:1、自适应的自旋锁在原有的Synchronized锁中,如果线程B想要获得object对象的锁,但是发现已经被线程A占有,则会选择阻塞,等到线程A释放锁的时候,线

2020-09-15 12:30:44 127

原创 基于二叉搜索树实现的AVL树

时间原因,代码没有详细优化,实现思想可以参考。package TreeTest;import sun.reflect.generics.tree.Tree;import javax.swing.*;import java.util.*;/** 搜索二叉树设计模式* AVL树:任何节点 左子树和右子树的高度差不要超过1* 当右子树较大时 进行左旋 当左子树比较大时 进行右旋 |左旋和右旋的实现* 每次添加节点后 从上而下查询节点平衡性是否违规 如果有违规,则调整* 违规类型

2020-06-19 17:45:30 131

原创 Java数据结构--图

如上所示,是一个图结构。图结构主要包含两个部分,点 和 线。其中线可以根据是否有方向分为两种,图中的线如果有方向可以成为有向图,如果没有可以看成无向图,无向图可以看成特殊的双向有向图。线还有可能包含权重(或者称为距离)这个属性。如何用代码的方式表达图呢,万事万物皆对象,如下所示://表示边public class Edge { public int weight; //权重 或者距离 public Node from; //这条线从哪出发 public Node..

2020-06-04 13:28:42 233

原创 学习java多线程2——volatile关键字作用及其原理

并发编程中的三个概念1、原子性和数据库事务的原子性概念是一样的,一组操作要么全部成功要么全部失败,不可分割。 x = 10; //语句1y = x; //语句2x++; //语句3x = x + 1; //语句4其实只有语句1是原子性操作,其他三个语句都不是原子性操作。语句...

2020-05-06 18:57:29 150

原创 Java反射及动态代理技术

通过Java反射机制,可以在程序中访问到已经装载到JVM中的Java对象的描述,实现访问、检测和修改对象本身信息的功能。动态代理技术的意义在于生成一个占位(代理对象),来代理真实对象,从而控制对于真实对象的访问。代理模式常用的代理模式有JDK动态代理,CGLIB动态代理等。我们这次主要介绍JDK动态代理。实现代理主要有两个步骤:真实对象和代理对象建立代理关系。相当于利用原有对象去生...

2020-04-11 19:42:46 137

原创 Java中抽象类和接口的区别

首先从继承角度来看,java中类只能继承一个类,无法进行多继承。但是java里接口可以多继承,一个类可以继承多个接口。如果有多继承的情景,可以考虑继承一个类之后继承一个或者多个接口(Interface);例如:public class Man extends People implements Eat,Dance{ //可以在man类里继承People类和Eat,Dance接口...

2020-03-15 14:30:17 105

原创 Java中对象的转型

在Java中 对象的转型分为上转型和下转型1、上转型首先建立Person类和子类Student类public class Person { public void eat(){ System.out.println("人类需要吃"); } public void Phabite(){ System.out.println...

2020-03-07 22:16:41 198

原创 MySQL性能优化

MySQL软件具有特定的硬件建议,在具体安装和使用该数据库软件的时候,该软件所依托的计算机最好能够遵循这些硬件建议。 MySQL数据库是一个多用户多线程的数据库管理系统,对于该类型的服务器,经常会同时执行多个任务。如果这些任务中的某一个执行缓慢,则会影响其它任务的执行速度。为了解决该问题,可以通过执行SQL语句:SHOW PROCESSLIST显示所有的活动进程,或者通过执行kill命令终结消耗...

2019-01-03 19:06:17 117

原创 Jsonp解决跨域的原理及过程

在了解什么是跨域之前,我们先来了解这样一个概念:同源策略。浏览器有一个很重要的安全性限制,即为同源策略:不同域的客户端脚本在无明确授权的情况下不能读取对方资源。访问不同源的资源就是跨域。浏览器中的一个url一般包括以下部分,协议,域名,端口,这三个任何一个不同,都是跨域。以下是Jsonp解决跨域:根据浏览器同源策略,所谓同源就是协议、主机、端口号都相同时成为同源。a 域的js不能直接访...

2018-12-25 16:42:54 6449

原创 SVN入门教程(1)

SVN是Subversion的简称,是一个开放源代码的版本控制系统。它具有以下功能:备份:可以将代码在SVN服务器上进行备份,从而防止本地代码丢失造成损失 代码还原:可以将代码还原到之前的版本 协同修改:支持多个使用者同时对代码进行修改、 多版本项目文件管理:保存一个主版本,其余版本只保存修改信息,从而节省了资源 追溯问题代码的编写人和编写时间 实现代码权限的控制:给不同使用者分配不...

2018-12-23 21:17:13 280 1

原创 Java——NIO

java中的输入输出都是以流的形式,包括文件读写和网络传输。传统的IO是面向流的,每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。而且需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大。使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数量线程的线程池,甚至一个线程来为任意数量的连接服务。由于线程数量小...

2018-12-05 16:24:19 155

原创 服务器验证——token

我们知道,http协议是无状态的,所以每次访问服务器的时候,都需要告诉服务器访问者的身份。在以前,我们常用Cookie+Session来完成服务器端验证。具体过程为在客户端提交表单登录,服务器端通过验证之后,生成一个Session对象,存放用户登录信息,并将SessionID存放到Cookie中,通过Http响应发送到客户端。而客户端会在一定时间内保存cookie,此后的访问请求都会在请求头中...

2018-11-27 18:05:52 8952

原创 分布式系统的Session共享——Redis实现

在以往的学习中,我们都只有一个Web服务器,所以服务端的Session除了进行数据交互外,不需要别的操作。但是分布式系统的出现,导致了Session必须要进行共享。Session共享的意义:假设我们有一个电商网站,有一个购物车服务器和支付服务器,用户将商品添加到购物车之后,服务器将商品信息和用户信息保存到用户对应的session中,这样支付的时候就可以通过共享的session来完成支付。而...

2018-11-24 14:34:18 4212 4

原创 SpringBoot入门

在一个普通的Spring应用程序之中,我们在进行正式的开发之前往往需要做很多配置工作,而SpringBoot则将很多的魔法带入到SpringBoot的开发当中,其中最重要的是以下四个核心:1、自动配置在任何Spring的应用程序的源代码里,你都会找到java配置或XML配置(抑或两者皆有),它们为应用程序开启了特定的特性和功能。比如对象之间的依赖注入,这样的配置为样板配置。Spring...

2018-11-23 18:19:41 102

原创 Redis主从同步

一些服务网站对安全性有很高的要求,当住服务器不能正常工作的时候,也需要从服务器替代原来的主服务器,作为灾备,以保证当前系统的正常工作。而且更多的时候我们希望读/写分离,前提是读操作远远的超过写操作。互联网系统一般是主从架构为基础的,主从架构的思想是:在多台数据服务器中,只有一台主服务器,而主服务器只负责写入数据,不负责让外部程序读取数据。 存在多台从服务器,从服务器不写入数据只负责同步主...

2018-10-29 22:20:22 122

原创 Java虚拟机——类加载机制

一、类加载概述我们平时所写的java代码,基本都是在一个类/接口中,存储在一个.java类型的文件中。这个文件在使用时首先会被javac编译器编译为.class文件,.class文件时一组8位字节为基础的二级制流。java虚拟机把描述类数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。 ...

2018-10-27 14:01:43 137

原创 Java虚拟机——内存管理

虽然由于java虚拟机的存在,使得java的内存实现“自动化”,但是JVM也不是万无一失的,有时候还是需要我们去了解内存的分配和回收策略。一、内存分配对象的创建Java是一门面向对象的语言,在java虚拟机运行的过程中,时刻都有对象被创建出来。在语法层面,创建对象可能就是一个 new 关键字而已,我们需要了解的是在虚拟机中一个对象的创建过程。虚拟机遇到一个new指令时,首先回去检查...

2018-10-26 22:14:44 112

原创 Java虚拟机——运行时数据区域

java虚拟机章执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。1、程序计数器(线程私有程序计数器是一块较小的 内存区域,它可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理等基础功能都需要依赖这个计数器来完成。因为处理器在一个确定是时刻只会...

2018-10-25 18:57:15 140

原创 spring入门到放弃——spring事务管理

Spring事务提供了两种管理的的方式:编程式事务和声明式事务简单回顾下事务:事务:逻辑上的一组操作,组成操作的各个单元,要么全部成功,要么全部失败。事务特性:原子性:一个事务包含的各个操作单元不可分割一致性:事务执行前后数据应当保持一致隔离性:一个事务的执行不应当受到其他事务的干扰持久性:事务执行完之后,数据就被持久化到磁盘上Spring事务管理常用的API:...

2018-10-23 21:59:22 2137 3

原创 TCP、UDP协议详解

TCP和UDP协议是工作在传输层的两个主要协议。在传输层主要负责:提供建立、维护和拆除传送连接的功能;选择网络层提供最合适的服务;在系统之间提供可靠的透明的数据传送,提供端到端的错误恢复和流量控制。UDP协议UDP协议,全称用户数据报协议。UDP协议是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。这里的无连接的意思是传输信息时不需要接收方和发送发建立连接,不...

2018-10-17 18:11:19 358

原创 计算机网络——从物理层到应用层

网络是互联网的核心,没有网络的互联网就像没有路的城市,只能在自己独里的环境工作,无法彼此联系。互联网的实现,分成好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。用户接触到的,只是最上面的一层,根本没有感觉到下面的层。要理解互联网,必须从最下层开始,自下而上理解每一层的功能。如何分层有不同的模型,有的模型分七层,有的分四层。在此我们用五层模型进行解释。分别是,实体层、...

2018-10-16 21:25:32 7414

原创 阿里巴巴私服nexus使用

刚学maven不久,今天在搭建maven项目的时候,碰到了好多jar包下载错误的问题,后来配置了maven私服仓库,成功的解决了问题。原因是maven从自己默认提供的中央仓库中下载时部分jar包因为未知原因无法下载。所以从第三方仓库(阿里巴巴私服nexus)下载是一个很好的选择。1、在maven安装目录下conf里面的setting.xml(配置文件里面添加一段代码)<mirrors...

2018-10-15 18:15:56 1925

原创 深入Http协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是Web浏览器和Web服务器之间通信的标准协议。Http指定客户端与服务器如何建立连接、客户端如何从服务端请求数据,服务器如何响应请求,以及最后如何关闭连接,HTTP连接使用TCP/IP来传输数据。对于从客户端到服务器的每一个请求,都有四个步骤。1、默认情况下,客户端在端口80打开与服务器的一个TC...

2018-10-15 17:00:21 172

原创 系统之间的通信

基于SOA架构的工程,各个部分都是不同的工程。所以实现某个功能需要两个甚至更多的系统之间进行通信。如何实现远程通信?         1、使用WebService:效率不高,它是基于SOAP协议(http+xml:需要在一个工程中将数据变为xml格式,再传输到另外一个项目,并且xml传输数据过于臃肿)。项目中不推荐使用。          2、使用restful形式的服务,http+j...

2018-10-12 19:22:04 1394

原创 java数据结构——广度优先遍历判定完全二叉树

完全二叉树的定义:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。一棵二叉树至多只有最下面的一层上的结点的度数可以小于2,并且最下...

2018-10-10 19:48:35 271

原创 java数据结构——二叉排序树的实现

二叉树查找树的定义:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。在自定义的结构中,使用compareTo()来对节点和节点的左右子树进行比较public class BinarySearchTree<T extends Comparable<? super...

2018-10-10 15:23:01 432

原创 java数据结构——链表实现队列

package Queue;public class LinkQueue<T>{ //队列,尾巴进头出 // 链栈的节点 private class Node<T> { T e; //节点的数据域 Node<T> next; //后继 pub...

2018-10-09 21:42:08 143

原创 java数据结构——数组自定义实现队列

//数组实现一个队列public class MyQueue<T> { private T[] data=null; //存放数据 private int maxSize; //队列容量 private int front; //队列头,允许删除 private int rear; //队列尾允许插入 //构造函数 ...

2018-10-09 21:18:10 201

原创 java数据结构——链表实现栈

package Stack;import java.util.List;public class ListStack<T> { public ListStack() { } private static class Node<T>{ public T data; //数据域 public Node&lt...

2018-10-09 18:41:55 174

原创 java数据结构——数组实现栈结构

package Stack;import org.junit.Test;import java.util.Stack;//数组实现一个栈:此时栈中数据元素类型为整形public class MyStack_Array<T> { //存数据的数组 T[] data; //栈的最大长度 private int size; //栈顶...

2018-10-09 16:54:04 187

原创 java数据结构——自定义实现一个简单的LinkedList

LinkedList由一个双向链表实现LinkedList中存储的是数据节点,所以声明一个内部节点数据类型这个数据节点结构中主要应该包括三个部分:数据域(data):存放数据next域:存放下一个节点的应用prev域:存放上一个节点的引用//Linked由一个双向链表实现public class MyLinkedList<T> implements Iterabl...

2018-10-09 16:30:55 605

原创 java数据结构——自定义实现一个简单的ArrayList

public class MyArrayList<T> implements Iterable<T> { //使用泛型表示元素类型 //MyArrayList把大小和数组作为成员变量进行存储 private static final int DEFAULT_CAPACITY = 10; //初始化数组时数组的长度 pr...

2018-10-08 21:43:20 992

原创 java工厂模式

工厂模式就是在接口和子类中间加一个过渡段(类),通过这个端口用来获得继承了接口的子类的实例化对象。这个过度类就是所谓的工厂类,以后如果需要对程序进行扩展的话,直接在工厂类里面进行改动即可。工厂模式一般由以下部分组成:1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。2)具体工厂角色:它含有和...

2018-10-05 11:59:28 94

原创 SpringMVC流程架构

SpringMVC是一个主流的web层框架。主要组件:1、前端控制器DispatcherServletDispatcherServlet是整个流程的控制中心,用户请求到达前端控制器,由它负责调用其他组件对请求进行处理。DispatcherServlet的存在降低了组件之间的耦合性。2、处理器映射器HandlerMapping处理器映射器根据URL找到处理器,生成处理器对象及...

2018-10-05 11:57:01 166

原创 hibernate主键生产策略

主键生成策略 foreign Assigned: Native:本地策略,可以在identity和sequence之间自动切换。 Uuid:适用于字符串类型的主键,使用随机方式生成字符串主键。 Sequence:采用的是序列的方式,oracle支持序列,MySQL不支持。 Identity:使用的是数据库底层的自动增长机制,适用于有自动增强机制的数据库。 Incremen...

2018-09-26 18:08:33 99

Mysql必知必会+高性能MYsql等资源

压缩包下面有四个文件:Mysql必知必会+MySQL技术内幕InnoDB存储引擎+MySQL性能调优+高性能Mysql第三版

2018-12-14

ssm项目需要的jar包大全

SSM整合需要的jar包,包括数据库连接池、日志、jstl等需要的jar包

2018-12-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除