自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蟹黄肉松小贝的博客

多肉葡萄全球代言人

  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java中的锁

Java中的锁乐观锁认为别人不会更新数据,读取数据时不加锁。大部分通过CAS实现(对数据更新前比较当前值与传入值是否一致,一致则更新,否则不执行更新操作,直接返回失败状态)悲观锁每次读写数据前都先加锁。大部分基于AQS(Abstract Queued Synchronized,抽象同步队列)实现。自旋锁认为持有锁的线程很快会释放资源,因此总选择等一段时间重试获取锁。自旋过程中会消耗CPU。优点: 减少CPU上下文切换缺点: 线程长时间自旋获取不到锁,导致CPU资源浪费Synchroni

2020-08-26 23:45:43 188

原创 Java多线程

Java多线程一、线程创建方法继承Tread类实现Runable接口使用ExcutorSerivice和Callable实现有返回值的线程,返回值保存在Future对象中基于线程池创建线程二、线程池工作原理线程池的主要作用:线程复用、线程管理、控制最大并发数。线程复用:Thread类中的start方法中不断循环调用传递进来的Runable对象,而将这些对象存储到Queue中,每次循环调用Queue中的对象,即能实现复用。线程池的核心组件关系如下:线程池工作过程如下(新线

2020-08-26 00:09:51 146

原创 最长回文子串

相关动态规划 中心扩展法题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"题源:LeetCode最长回文子串思路官方题解:动态规划:中心扩展法:个人思路:类似中心扩展法的思路,找出中心向外扩展。但是没有想到应该如何处理每一次扩展完的结果。看了题解用循环遍历不同的中心点可能,每个循环下的情况返

2020-08-24 23:59:15 483

原创 Java反射

Java反射反射指在程序运行过程中,对任意一个类都能获取其所有属性和方法,且能调用其任意一个方法。一、反射的应用Java中对象有两种类型——编译时类型和运行时类型。编译时类型旨在声明对象所采用的类型,运行时类型为对象赋值时所采用的类型。(如父类和子类,Java多态父类指向子类对象)程序在编译期间无法预知该对象和类的真实信息(这里插播一下Java泛型的类型擦除,在编码阶段使用泛型时加上类型参数,会被编译器在编译时候去除,该过程称为类型擦除,JVM实际上是无法看到泛型的具体类型的),只能通过运行时信息发

2020-08-24 21:03:36 93

原创 Java的动态代理(代理模式)

Java的动态代理(代理模式)代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。(如调用method.invoke()方法)代理模式最主要的就是有一个公共接口,一个具体的类,一个代理类,代理类持有具体类的实例,代为执行具体类实例方法。动态代理的实现创建一个与代理对象相关联的InvocationHandler InvocationHa

2020-08-24 21:03:11 99

原创 网络基础(二)

网络基础(二)HTTP无状态协议,不需要建立持久的连接。客户端发出请求且服务器收到请求返回response时连接关闭。HTTP的传输流程:地址解析:通过DNS解析服务器域名从而获得主机IP地址封装HTTP数据包:解析协议名、主机、端口、对象路径、本机信息封装成HTTP请求数据包封装TCP包建立TCP连接:三次握手机制客户端发送请求:建立连接后,客户端一次发送一个请求给服务器端服务器响应:响应成功或错误、消息体等服务器关闭TCP连接:服务器响应后TCP关闭连接,使用keep-alive

2020-08-23 20:11:38 102

原创 网络基础(一)

网络基础(一)一、OSI的七层模型如下图:二、TCP/IP的四层模型由网络接口层、网络层、传输层和应用层构成。三、TCP的数据包结构主要有一下几个:源端口、目的端口顺序号seq、确认号ack报头长度、保留位、控制位、窗口大小、校验和数据四、TCP的三次握手和四次挥手图片记忆更直观:三次握手四次挥手...

2020-08-22 00:10:03 77

原创 分布式缓存基本原理

分布式缓存基本原理一、简述在微服务架构下,一般需要一个分布式缓存系统来实现跨服务的缓存功能。缓存之间需要数据备份的功能,节点出现故障后,能保证用户的请求转发到其他备份节点来保证业务的正常运行。二、Ehcache简述Ehcache是一个用Java实现的使用简单,高速,实现线程安全的缓存管理类库,ehcache提供了用内存、磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案。原理:内部采用多线程实现,采用了LinkHashMap存储元素,支持数据持久化到物理硬盘。特点:快速、轻量

2020-08-20 23:54:19 752

原创 寻找两个正序数组的中位数

寻找两个正序数组的中位数相关数组 二分查找题目给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5题源:LeetCod

2020-08-20 00:18:41 86

原创 数据库分布式事务

数据库分布式事务CAPCAP即在一个分布式系统中,一致性(C)、可用性(A),分区容错性(Partition tolerance)三个不可兼得。一致性:同一时刻是分布式系统中的所有数据备份是否有相同的值可用性:一部分节点故障,集群整体能否响应客户端的读写请求分区容错性:系统如果两阶段提交协议(协调者+参与者)在计算机网络及数据库领域内,为了使分布式数据库所有节点在进行事务提交时都保持一致性而设计的一种算法。二阶段提交算法:参与者将操作成功与否的信息告知协调者,协调者再根据所有的反馈决定各

2020-08-19 12:56:48 164

原创 数据库和缓存(二)

数据库和缓存(二)一、MySQL相关索引种类:普通索引:最基本的索引,没有任何约束限制。唯一索引:和普通索引类似,但是具有唯一性约束,可以有 null主键索引:特殊的唯一索引,不允许有 null,一张表最多一个主键索引组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并全文索引:对文本的内容进行分词、搜索覆盖索引:查询列要被所建的索引覆盖,不必读取数据行索引的作用:减少数据库服务器需要扫描的数据量帮助数据库服务器避免排序和临时表将随机 I/O 变顺序I/O提高查询

2020-08-18 23:48:47 67

原创 数据库和缓存(一)

数据库和缓存(一)一、存储引擎MyISAM是MySQL默认的存储引擎,不支持事务、行级锁和外键执行速度快,占用内存和存储资源少用一个变量保存表的总行数,查总行数速度很快非聚集索引,数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的表存储在两个文件:MYD 和 MYI更新数据慢且不支持事务,查询速度快InnoDB提供了事务、外键、回滚、崩溃修复能力、多版本并发控制、事务安全等操作底层存储结构为B+树不保存表的总行数,执行 select count(*

2020-08-17 23:27:39 227

原创 JVM的类加载机制

JVM的类加载机制概述一、加载阶段加载 -> 验证 -> 准备 -> 解析 -> 初始化加载JVM读取class文件,根据Class文件描述创建对象。将Class文件读取到运行时区域的方法区,在堆中创建Class对象。验证确保Class文件符合当前虚拟机的要求。准备在方法区为类变量分配内存空间并设置类中变量的初始值。需要注意final和static赋初值时期不同(static的初始化放在了构造器中,final在准备阶段赋值)解析将常量池中的符号引用替换为直接引用

2020-08-17 00:17:40 91

原创 常见I/O模型及Java I/O

常见I/O模型及Java I/O分类方式(拿网上的餐馆点菜来理解)阻塞和非阻塞:描述的是用户线程调用内核IO操作的方式:阻塞是指IO操作需要彻底完成后才返回到用户空间;而非阻塞是指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成。阻塞:到饭店吃饭,一直等直到菜好了,否则不能干其他事情。例子:data = socket.read()非阻塞:到饭店吃饭,点了菜之后可以去干其他事情。同步和异步:描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核

2020-08-16 00:21:25 124

原创 Java JVM和常用GC算法

Java JVM和常用GC算法一、JVM的内存区域JVM的内存区域分为:线程私有区域(程序计数器、虚拟机栈、本地方法区)、线程共享区域(堆、方法去)和直接内存。程序计数器:线程私有。用于存储当前运行的线程所执行的字节码的行号指示器。虚拟机栈:线程私有。描述Java方法执行过程的内存模型,当前帧中存储了局部变量表、操作数栈、动态链接、方法出口等信息。本地方法区:线程私有,为Native方法服务堆(运行时数据区):线程共享。采用分代收集算法,从GC角度可分为新生代、老年代和永久代。方法区:线程共

2020-08-15 01:17:17 186

原创 Java基础语法(二)

Java基础语法(二)异常类 Throwable |—— Error |__ Exception Java内部类有哪些?成员内部类方法内部类匿名内部类继承式匿名内部类格式接口式匿名内部类格式,加@Override注解参数式的匿名内部类静态嵌套类内部类的作用:提供了Java的"多重继承"的解决方案特点:内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号Java中反射的概念在运行

2020-08-13 23:50:18 82

原创 Java中的volatile和synchronize

Java中的volatile和synchronize相关术语名称英文释义内存屏障memory barriers对内存操作的顺序限制缓冲行cache lineCPU高速缓存中可以分配的最小存储单位比较并交换Compare and swapCAS操作输入两个数值,旧值没有发生变化,才交换新值CPU流水线CPU pipeline实现在一个CPU时钟周期完成一条指令volatile的定义及实现定义:Java编程语言允许线程访问共享变量,为了确保共

2020-08-11 22:39:06 112

原创 关于Java的HashMap

HashMap相关知识基本概念数据结构:数组+链表(拉链法),链表长度超过8,链表转为红黑树(保证平衡)工作原理:数组中每个元素都是链表,由Node内部类实现存储:调用hash(K)计算K的hash,结合数组长度,计算数组下标;扩容时增加一倍;hash值已存在时会发生碰撞——比对两者equals,true则更新键值对,false则插入链表尾部或红黑树中(注:jdk1.7使用头插;jdk1.8使用尾插)获取:使用hash(K)计算数组下标位置,遍历链表使用equals()方法查找值hashCo

2020-08-10 22:26:32 84

原创 MyBatis拦截器(plugin)

MyBatis拦截器(plugin)官方文档可以拦截什么MyBatis 允许在映射语句执行过程中的某一点进行拦截调用Executor(update, query, .eg):执行器方法ParameterHandler (getParameterObject, setParameters):参数处理ResultSetHandler (handleResultSets, handleOutputParameters):结果集处理StatementHandler (prepare, paramet

2020-08-09 23:18:12 243

原创 脚本编程语言Lua基本语法

概述Lua是一个比较小巧的编程语言,其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能(比如嵌入到Springboot中去调用脚本),这里我就不介绍Lua相关环境的安装啦~数据类型与常用语法注释--单行注释或者--[[ 多行注释 --]]数据类型Lua有8个基本类型:nil:表示一个无效值(在条件表达式中相当于false)booleannumber:表示双精度类型的实浮点数string:字符串由一对双引号或单引号来表示userdata:表示任意存储

2020-07-02 23:49:03 528

原创 Springboot+Redis项目使用(基础篇)

概述本篇笔记来记录记录关于在Springboot中使用Redis的相关内容~Redis简介redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master

2020-07-01 23:34:44 219

原创 数据库——SQL慢查询原因及相关优化方法(概念入门篇)

概述以前做项目一直没有SQL优化的概念,直到真正接触到这方面的知识和内容,才发现实际应用上有多重点,此处简要介绍一下关于SQL慢查询的内容,主要是为了有一个大致的概念。慢SQL的特征数据库CPU负载高IO负载高导致服务器卡住查询语句正常,索引正常但是还是慢慢查询的原因出现慢查询有许多原因,一下是常见的一些原因。没有使用索引或索引没起作用(SQL编写问题)I/O吞吐量小;内存不足;网速慢(硬件等问题)查询结果较大;返回不必要的值(SQL编写问题)锁使用不合理或出现死锁情况(SQL

2020-06-29 00:20:57 3091

原创 Git的基本操作汇总

概述Git——一个分布式版本控制系统,在以往的项目开发中也一直有用到,但由于以往的开发成员较少,对版本管理的一些要求等问题没有太严格,很多情况下都是在master分支下进行操作,而用到的命令无非就是git add .,git commit -m "",git push,git pull这几个。但到了实际的团队开发中,操作的往往不在主分支上进行,也遇到过许多关于merge等的问题(以往出现了问题都容易把被人的修改给覆盖掉了,(T_T)),在此就搜集整理一些关于Git的常用的命令。Git的三个分区工作

2020-06-26 23:30:08 89

原创 数据库——熔断&限流&降级基本概念

概述由于实习内容跟数据库中间件相关,分布式数据库的一些基础内容更是重中之重。无奈自己对分布式的一些基础知识并没啥掌握,这里就把日常不懂的一些概念啥的来记录学习一下~熔断(过载保护)概念一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施。服务熔断一般是某个服务(下游服务)故障引起熔断的三个状态Closed(关闭):熔断器关闭状态,调用失败次数积累,到了阈值(或一定比例)则启动熔断机制。Open(断开):熔断器打开状态,此时对下游的调用都内部直

2020-06-25 23:00:15 1819

原创 Day3、Day4——实习笔记

概述讲讲最近两天接触到的新知识或者自己的新发现吧!内容H2数据库H2是一个用Java开发的嵌入式开源数据库,它本身只是一个类库,可以直接嵌入到应用项目中,不受平台限制,有较好的兼容性。H2最大的用途在于可以同应用程序打包在一起发布,可以方便地存储少量结构化数据。另一个用途是用于单元测试。启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态。第三个用处是作为缓存,作为NoSQL的一个补充。LomBok插件简化POJO类的代码,网上的建议是要合理去使用~一些关于LomBok

2020-06-10 23:06:18 173

原创 Day2——实习笔记

概述Day2,今天任务是熟悉相关的知识以及一些系统平台。本人所在的部门是系统平台架构中间件开发的,小组主要负责数据中间件的开发。以前在课程的一些开发项目中由于数据存储量较少,因此也没有考虑到类似分库分表、读写分离之类的操作,只使用到了一些简单的CRUD和索引之类的来操作数据。而面对实际的产品应用,有的公司往往会开发一套属于自己的一个数据权限访问、服务提供系统,不仅能实现更高的数据库操作效率,还能让业务开发人员只需进行较小的改动,就能从多个数据库、多个数据表中获取到数据。一些业界产品有阿里巴巴开源的c

2020-06-08 22:45:43 144

原创 数据库中间件

数据库拆分1. 垂直拆分垂直拆分,指的是将一个包含了很多表的数据库,根据表的功能的不同,拆分为多个小的数据库,每个库包含部分表。关于垂直拆分,还有另一种说法,将一个包含了很多字段的大表拆分为多个小表,每个表包含部分字段,这种情况在实际开发中基本很少遇到。垂直拆分的另一个典型应用场景是服务化(SOA)改造。在服务化的背景下,除了业务上需要进行拆分,底层的存储也需要进行隔离。垂直拆分会使得单个用户请求的响应时间变长,原因在于,在单体应用的场景下,所有的业务都可以在一个节点内部完成,而垂直拆分之后,通常会需

2020-06-08 22:42:27 290

原创 JUnit——Java单元测试框架

概述JUnit由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。优点极限编程基本过程:构思-> 编写测试代码-> 编写代码-> 测试,而且编写测试和编写代码都是增量式的,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。重构其好处和极限编程中是类似的,因为重构也是要求改一点测一点,减少回归错误造成的时间消耗。特性用于测试期望结果的断言(Assert

2020-06-07 11:53:33 912

原创 RSA算法与Base64的加密解密

概述最近在做一个Android的课程项目,做到登录注册这一块,以前的课程项目由于时间开发问题,登录注册这一part往往都忽视了,这次想用RSA算法来加密一下传输的用户密码。本人对传输安全这一块没太大了解,算法也不咋滴,所以这里就不解释什么算法原理啥的了,直接把一些工具类放出来,有不足的地方也希望能提出指正~写这篇文章的主要目的是想记录一下在Android登录注册中使用RSA加密解密的一些问题吧,然后也把一些实用的工具类mark一下,以下是项目的基本情况:前端:Android,语言:Java后端:Sp

2020-06-06 23:09:43 1665 1

原创 软件安装——Maven的安装与配置

概述安装步骤进入官网下载,https://maven.apache.org/download.cgi下载完成后,解压到自己电脑的路径,记得不要包含中文~由于之前已经安装好了,所以我这里的版本是3.6.0,我这里解压到了D盘,如图:配置环境变量,环境变量打开方式在上一篇JDK安装笔记有些啦,第一次安装的可以看回去,传送门~添加两个系统变量:变量名:M2_HOME,变量值:D:\MAVEN\apache-maven-3.6.0-bin\apache-maven-3.6.0变量名:M

2020-06-05 12:30:39 124

原创 Day1——实习笔记

概述暑期实习的第一天,今后开始记录一下每天的学习笔记~入职第一天,必不可少的是配置一台适合自己开发环境的电脑啦,本人用的系统是win10,安装教程可参考下方。Java开发常用软件or环境安装配置教程,如下:JDK1.8MavenTomcatMySQLGradlepostmanIDEAnavicatSQLYogxmindnodesecureCRFxcodeGitbash***hereisph 2020.05.26...

2020-06-04 23:57:19 139

原创 软件安装——JDK8安装与环境变量配置

概述JDK是Java开发必不可少的配置,JDK即Java Development Kit,是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库),即JRE,和JAVA工具。安装提要本人系统为win10。安装步骤打开官网:http://www.oracle.com/滑动到下面,如图:点击相应的下载链接,如图:点击后会跳转到如下页面,登录oracle账号。没有的话可以自己免费创建一个。登录后即可自动下载,下载可能需要一段时间。(由于本人已经安装好了,这里就不

2020-06-04 23:56:48 173

原创 华资软件Java开发实习生——2021届暑期实习生面经(OC)

概述华资软件是跟VIP同一个时间投的,应该也是在拉钩或者BOSS上投的。HR那边简历查看之后,会发出第一轮笔试和第二轮笔试,两轮笔试都过了才能进入面试,当时给我的感觉是比较正式的。一轮笔试好像有三个部分吧,综合测评、技术测评以及性格测试,综合测评主要就是考核一些推理、思维能力,技术测评的话有涉及到一些Spring框架和Mysql的一些题目,综测和技测各30min,都是选择题。二轮笔试就比较开放式,四道问答题,问了一些web请求的流程,Java容器的一些知识,还有两题记不太清楚了,难度也不是特别难,也能

2020-05-26 18:58:11 4404 9

原创 设计模式(Design Pattern)

概述设计模式指经过高度抽象化的、在编程中可以反复使用的代码设计经验总结,即一种编程的理念或模式。设计模式的7个原则方便识记,用“单开里依合迪接”来概括。单一职责原则即每个类自己做自己的工作。开闭原则对象内部的模块对扩展开发,对修改封闭。(你可以在我的基础上加东西,但是不能改我原来的)里氏代换原则开闭原则的补充,情景:父子类继承。依赖倒转原则从抽象开始编程而非从实例化的对象开始编程。合成/聚合原则尽量使用合成/聚合来扩展类而非使用继承方法。迪米特法则少于其他类发生关

2020-05-19 15:43:45 183

原创 唯品会JAVA实习生——2021届暑期实习生面经(OC)

概述今天下午刚面试完唯品会的暑期实习生,本人大三,211院校,计算机科学与技术专业。开始准备实习生秋招比较晚,身边也有一些比较厉害的同学一早就收到了Tencent、网易的offer,我自己算是意识比较晚的,而且本人算法也不到家,平时比较少刷题。先说说自己大致的情况吧,接触过SpringBoot框架,有用来开发过微信小程序、Android移动应用程序。微信小程序前端的话用到的是ColorUI的开源组件库。面试情况职位职位在拉钩上投递的(拉钩上面比较多互联网企业的招聘信息,对于一些错过了官网投递的时间

2020-05-18 16:33:59 1713 13

原创 关于博客记录

其实已经习惯了使用笔记本来记录,觉得真是有质感,不过可能有些方面的内容使用博客来记录效率更高。开始用文章的形式记录学习的过程吧,希望以后能保持一直记录的习惯。

2020-05-17 23:43:04 105

原创 Java中的 ==、equal()和hashcode()

Java中的 ==、equal()和hashcode()概述三者都与对象的比较相关,不同之处在于对基本类型、引用类型等的比较,是比较值还是比较地址的区别。基本类型和引用类型Java的基本类型包括8种:byte、boolean、char、short、int、float、long、double引用类型有:类、接口、数组、枚举、注解==的使用== 首先是一个运算符,其次,当两个对象为基本类型时,比较的是值是否相等;当为引用类型时,比较的是地址。若比较的值不相同,返回false;若比较的值相同,基

2020-05-17 23:18:29 150

课程项目——Java五线谱程序

软件功能需求:软件通过拖动音符(四分音符、八分音符)来作曲。作曲后,可以记录、载入、播放以及试听。 该软件主要通过使用四分音符与八分音符进行谱曲,对四分音符与八分音符拖动到相应的五线谱位置上进行播放。此外,软件的记录功能,可以将作曲后的乐谱保存为文件到本地,并可以通过打开相应的乐谱文件导入软件中。无论是正在谱曲中的乐谱还是导入到文件中的乐谱,都可以进行播放试听。

2020-05-17

空空如也

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

TA关注的人

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