自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 资源 (1)
  • 收藏
  • 关注

原创 Maven+Tomcat环境搭建

MavenMaven框架的作用1.在JavaWeb开发中需要使用大量的jar包,这些jar包需要手动导入2.自动导入和配置jar包Maven项目架构管理工具方便导入jar包Maven的核心思想:约定大于配置有约束不要去违反Maven会规定好你该如何去编写java代码,必须按照规范来安装流程1.下载下载地址: https://maven.apache.org/download.cgi下载完成解压即可实例截图:这里先手动新建一个 maven-repo的文件夹,其作用是存放所

2024-08-06 22:53:18 833

原创 面试-后端开发

Session是直接将用户信息存放在服务端的,会占用服务端的内存Token是将用户数据加密成字符串存放在前端的,不需要占用服务端内存Session的访问速度较快,因为请求每次进来不需要进行过多处理即可验明身份Token的访问速度较慢,每次请求进来需要对Token进行解析Session实现分布式相对麻烦,因为session一般是直接存放在物理机的内存中的,多个服务之间没有办法直接共享Token是以字符串形式存放的,多服务之间只要配置的密钥相同可以直接共享。

2023-03-01 21:30:10 472 1

原创 面试-操作系统

操作系统是计算机的基石,主要负责管理软件和硬件资源它屏蔽了硬件的复杂性,向上层软件提供各种接口控制程序的调度,CPU的使用、内存的分配等。

2023-03-01 21:30:06 26

原创 面试-分布式

在Java中主要使用的是第四版和第三版,其中常用的randomUUID就使用的是第四版,其生成逻辑可能会出现UUID重复的问题,所以不推荐使用Java中的UUID作为主键索引。而第三版主要是对传入的字符串生成唯一编号,所以相同的字符串产生的UUID一定相同。优点UUID的生成效率极高,且没有网络消耗。数据量大,影响性能缺点UUID生成的字符串太长了,一般不使用UUID做为主键。,并且在Java中的使用的是第四版随机数UUID,还会造成ID重复的问题。

2023-03-01 21:29:10 22

原创 面试-计算机网络

反转链表。

2023-03-01 21:28:07 14

原创 面经-数据结构

B+树查询效率比红黑树高,但插入删除的效率红黑树更高HashMap源码注释中给出了一个桶中存在元素的个数和对应的概率这里可以看到桶中元素个数为8的概率很低,也就是说链表转红黑树的情况很少见。而B+树虽然搜索效率高,但它的维护比红黑树麻烦,所以HashMap采用的红黑树而不是B+树压缩列表压缩列表实际上也是一个数组。只是数组的前三位分别存放了在访问头部和尾部时时间复杂度只有O(1),其余位置仍为O(n)跳表底层是,在节点之间加入多级索引来实现快速定位。

2023-03-01 21:27:59 11

原创 面试-模拟

反转链表。

2023-03-01 21:27:34 12

原创 面经-数据结构

设计模式主要有23种,这23种又主要分为创建型、结构型、行为型。

2023-03-01 21:27:03 17

原创 面经-算法

排序思路:每次比较左右两个元素,并进行交换,最后将最大值移动到最右侧。排序思路:递归排序,进行分组,合并时创建一个新数组来保存合并后的结果。排序思路:类似于插入扑克牌,将数组分为两部分:已排序和未排序。排序思路:插入排序的变种,主要是将数组元素根据步长进行分组。排序思路:每次对一个元素定位,将其他元素放到它的左边和右边。时间复杂度:O(nlogn)时间复杂度:O(N^2)时间复杂度:O(N^2)时间复杂度:O(N^2)空间复杂度:O(1)空间复杂度:O(1)空间复杂度:O(1)空间复杂度:O(n)

2023-03-01 21:25:50 13

原创 面经-项目

校园活动平台主要是为了帮助学校师生发布、获取信息、活动报名、组织、量化。项目是基于SpringBoot开发的,在项目中基于Mybatis插件实现了敏感数据脱敏、实现热搜榜单功能将热点数据实时保存在Redis缓存中,本次项目的数据库采用MySQL。

2023-03-01 21:23:36 12

原创 面经-消息队列

针对第二种情况,rocketmq默认采用的是异步刷盘的方式,这种刷盘方式可能会因为宕机出现消息丢失的情况,可以修改刷盘方式为同步刷盘。假设broker收到half消息后未能正确返回ack就宕机了,此时rocketmq会有补偿机制,定期对half消息进行回查确认消息状态。消息消费者,负责消费消息。理论上各种消息队列都不能保证消息不被重复消费,以rocketmq为例,主要有两种情况可能出现重复消费。消息生产者,负责投递消息。针对第一种情况,可以使用rocketmq的事务消息,事务消息会先发送half消息。

2023-03-01 21:23:05 12

原创 面经-Java基础

面向对象是一种程序设计思想CollectionMapCollection接口是单一元素集合,下面主要有List、Set、QueueMap接口是存放键值对元素集合,下面主要有HashTable、HashMap、SortedMapList主要存放有序、可重复的单值集合Set集合存放无须不可重复的单值集合Map主要存放key-value键值对的集合(key不可重复、value可重复且一个key只能映射一个value)ArrayList是可以动态增长的索引序列,是基于数组实现的可变长数组。

2023-03-01 21:21:21 11

原创 面经-java并发

线程池是持有一些线程并且管理这些线程,执行任务时只需要向线程池中提交任务,再由线程池中的线程进行执行线程池的优点主要是,避免了频繁创建线程的销毁线程(非常耗时),线程池也可以对线程进行管理。创建线程池主要有以下几个重要参数:核心线程数,最大线程数,线程存活时间,任务队列,拒绝策略核心线程数:线程池中长期持有的线程数最大线程数:线程池最大可以创建的线程数量线程存活时间:是指超过核心线程数的线程存活的时间任务队列:线程池采用何种任务队列拒绝策略:当线程池无法处理任务时采用哪种拒绝策略。

2023-03-01 21:20:42 17

原创 面经-MySQL

MySQL的基本架构分为两个部分:Server、存储引擎层Server层主要有连接器、分析器、优化器、执行器。

2023-03-01 21:16:37 633

原创 面经-JVM

虚拟机内存模型主要分为五个区域:方法区、堆、程序计数器、虚拟机栈、本地方法栈:线程共享,主要存放类信息、静态变量、常量等**堆:**线程共享,存放虚拟机中几乎所有的引用数据类型实例**栈:**线程私有,每个方法执行时会在虚拟机栈中创建对应的栈帧,方法的调用和结束对应着栈帧的入栈和出战。栈帧中保存着局部变量表、操作数栈、动态连接、方法返回地址等信息**程序计数器:**线程私有,用于指示下一条要执行的字节码。

2023-03-01 21:16:27 11

原创 面经-Mybatis

ORM框架ORM对象关系映射,是指完成数据库中的数据到程序对象的映射。原生的JDBC代码太臃肿,比如每次执行一个SQL语句需要链接和断开链接。查询出来的结果要手动映射到对象上等等,往往要写一大堆无用的代码,而ORM框架就是为了简化这些操作,ORM是对JDBC的封装。常见的ORM框架MybatisHibernateSpring Data JPA等等Mybatis和Hibernate。

2023-03-01 21:15:42 467

原创 面经-Redis相关

Redis是一个使用C语言开发的一个基于内存的键值对数据库,并且可以通过日志和快照实现持久化。Redis中使用哈希表来保存所有键值对,其结构类似于Java中的HashMap。因为Redis中值的数据类型不同,哈希表中保存的是所有值的指针。这个表称为全局哈希表。使用哈希表来保存键值对的好处就是,不论哈希表中元素个数,每次访问的时间复杂度都是O(1)。但是于HashMap相同,当表中元素过多时,写入数据时可能会变慢。其原因就是过多元素带来的hash冲突和rehash带来的操作阻塞。

2023-03-01 21:14:19 138

原创 字节实习二面

SpringBoot是整合了Spring、SpringMVC以及其他的一些框架的一个框架,它其中内嵌有Tomcat服务器,使得开发Web应用更方便,屏蔽掉了以前Spring、SpringMVC框架很多的配置文件。线程池底层有一堆存活线程以及一个任务队列,创建线程池时有几个重要参数:核心线程数、最大线程数、存活时间、任务队列、拒绝策略。OSI七层网络体系结构:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。运行时数据区:线程共享的方法区、堆,线程不共享的虚拟机栈、本地方法栈、程序计数器。

2023-03-01 21:13:24 3895 2

原创 面经-Spring框架相关

Spring是轻量级的开发框架,主要提供了IOC依赖注入容器和AOP面向切面编程的功能。SpringMVC是基于Spring的一个用来解决Web开发的问题,主要处理web开发中路径映射和视图渲染等SpringBoot是融合了Spring和SpringMVC等框架以及自带有Web服务器,采用约定大于配置来简化各种配置文件的配置。

2023-03-01 21:13:07 380

原创 字节leader面

mysql有主从延迟主从延迟主要因为mysql主从同步的机制,mysql有三种同步机制。

2023-03-01 21:12:27 344

原创 云服务器部署内网穿透映射本地服务

项目开发时需要和前端联调,考虑使用内网穿透避免每次上传服务部署的过程。

2022-12-26 17:03:45 2098

原创 Golang——多协程计算100000以内的素数

对于计算100000以内的素数,如果普通单线程遍历所有数去计算,效率比较低。而且对于计算素数这种行为来说,多个线程同时计算可以充分利用CPU资源。Go中可以通过协程+通道的方式来实现这种多协程协助处理任务的场景大致思路是主线程,负责初始化参数,启动负责其它功能的goroutine分发任务的goruntine处理任务的goroutine统计结果的,负责确认各个分块任务都已经完成goroutinefunc main() { // 任务队列通道 intChan := make(chan i.

2022-05-10 10:26:10 493

原创 文本整合工具-基于Golang实现

之前一直使用DataGrip来导出数据库文件,但是DataGrip导出来的sql文件是一张表一个sql文件,每次还需要手动讲所有文件复制到一个文件中去极其麻烦。之前一直懒得去写工具来复制文件,最近接触了Go语言,发现Golang可以编译成一个exe可执行文件,所以想着用Golang来实现一个小程序来帮我完成这个工作顺便巩固一下我学习的东西。本项目比较小,主要作用就是通过你配置的path路径来扫描所有符合条件前缀的文件内容全部整合到一个文件(主要用于.sql、.txt文件)代码:package ma.

2022-05-08 20:42:35 279

原创 Golang自定义排序

排序Golang中sort包下提供了一些基本切片的排序sort.Ints(arr)sort.Float64s()sort.Strings()但是这些排序逻辑都是固定的,例如 sort.Intes()默认就是按升序进行排序的,Golang也提供了一个接口进行自定义逻辑排序sort.Sort()方法,这个方法需要传入Interface类型的对象func Sort(data Interface) { n := data.Len() quickSort(data, 0, n, maxDe

2022-05-02 21:45:38 770

原创 Golang面向对象实现

面向对象Golang语言面向对象编程说明Golang支持面向对象(OOP),但是和传统的面向对象编程有区别,并不是存粹的面向对象语言。Golang中没有类(class),Go语言的结构体(struct)和其他编程语言的类(class)有同等的地位,你可以理解Golang是基于struct来实现OOP特性的Golang面向对象编程非常简洁,去掉了传统OOP语言的继承、方法重载、析构函数、构造函数、隐藏的this指针等Golang仍然有面向对象编程的继承,封装和多态,只是实现的方式和其他OOP语言不

2022-05-02 21:44:55 398

原创 Golang基础学习笔记

Go基础语法声明变量func main(){ // 1. // 定义时直接赋值 var i int = 10 // 2. // 先定义后赋值 // 注意,在go语言中,即使不赋值变量也是有默认值的 var i int i = 10 // 3. // 根据类型推导 var i = 10 // 4. // 使用:=替换var关键字 // 这种使用方式,只能在初始定义变量时使用 i := 1

2022-05-02 21:43:46 978

原创 MySQL数据库迁移OpenGauss数据库

环境华为云服务器 4核 8G CentOS 8.0 64位JDK11Data Gripxshellxftpmysql 8安装OpenGauss此次安装基于Docker进行安装,docker安装步骤自行解决# 基于docker进行安装$ docker run --name opengauss --privileged=true -p 5432:5432 -d -e GS_PASSWORD=Enmo@123 enmotech/opengauss:latest# 解释:-p 543

2022-05-01 11:56:26 4105 3

原创 零拷贝技术

零拷贝技术参考文章:零拷贝问题引入问题在RocketMQ消息中间件中使用文件系统来对消息进行持久化,当RocketMQ将消息发送到消费者时需要涉及到文件读取和传输服务端如果提供了文件传输功能传统的文件传输过程DMA将磁盘数据拷贝到内核中CPU将内核中的数据拷贝到用户态CPU将用户态的数据拷贝到内核态DMA将数据拷贝到网卡中发送整个流程中会涉及到两次系统调用(两次系统调用对应四次上下文切换),四次数据拷贝。我们可以发现从CPU将内核数据拷贝到用户数据,再将用户数据拷贝内核,这

2022-04-15 10:55:29 1246

原创 Java线程池实现原理

参考:Java线程池实现原理及其在美团业务中的实践 - 美团技术团队 (meituan.com)一、线程池是什么线程池是一种对线程进行池化管理的思想和工具,广泛应用于多线程服务器中线程的创建和销毁都会带来很多额外开销降低了服务器性能,线程池可以维护多个线程来执行任务,并且可以通过任务队列来缓存任务提高了并发能力。线程池优点降低资源消耗:池化技术可以减少线程的创建和销毁带来的性能损耗提高响应速度:任务到达后可以无需等待线程创建直接执行提高线程的可管理性:使用线程池可以对线程、任务进行监控和管理

2022-03-17 13:37:16 674

原创 Mybatis插件+注解实现数据脱敏

引入问题在项目中需要对用户敏感数据进行脱敏处理,例如身份证号、手机号等信息进行加密再入库。解决思路方法一:最简单直接的方式就是对代码中所有涉及到敏感数据的接口在查询和插入时进行加解密方法二:方法一会对代码入侵很大,需要考虑到所有涉及到的接口,工作量极大,并且可能出现组员协作时没有考虑到对数据加解密的问题。最后决定采用mybatis的插件对查询、插入、更行操作进行切入。上层业务调用不再需要考虑数据的加解密问题同时也保证了数据的脱敏Mybatis插件原理Mybatis的插件是通过拦截器实现的,

2022-03-15 10:34:35 6786 14

原创 HashMap源码分析

HashMap概述JDK1.8之前 HashMap底层使用数组+链表的形式存储即每个元素通过计算Hash值将元素放到对应位置上,当发生哈希冲突后将元素接在元素后形成链表但这样的方式存在一个问题,链表还是需要遍历,当哈希冲突多了之后每次查需元素时需要遍历链表的时间加长。JDK1.8之后HashMap底层使用==数组+链表+红黑树==的形式存储初始时仍使用数组+链表,当某个链表上的长度超过TREEIFY_THRESHOLD的值时(默认为8),链表将转换为红黑树(转换过程是在HashMap重分

2022-03-15 09:12:55 133

原创 PLSQL-函数

create or replace function Fs1(v_cno in char) return varchar is v_cpno course.cno%type; v_cname course.cname%type; v_cpname course.cname%type;begin select cname,cpno into v_cname,v_cpno from course where cno=v_cno; if v_cpno is null then r

2021-12-13 09:50:38 290

原创 PLSQL-游标作业

declare cursor c1 is select Student.sno,sname,grade from Student,SC where SC.sno=Student.sno and sdept='CS' and cno in(select cno from Course where cname='数学') group by Student.sno,sname,grade order by Student.sno;begin dbms_output.put_line(rpa...

2021-12-13 08:28:10 414

原创 SpringSecurity+JWT实现

SpringSecurity+JWTJWT认证和Session认证参考资料:什么是 JWT – JSON WEB TOKEN - 简书 (jianshu.com)JWT:JSON WEB TOKENJWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。传统Session认证存在的问题因为http协议本身是无状态协议,即时用户第一次请求时提供了用户名和密码进

2021-10-06 22:02:11 525

原创 SpringSecurity前后端分离表单登录实现

前后端分离下的表单登录环境搭建1. 创建User类package com.sy.security.domain.pojo;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.security.core.GrantedAuthority;import org.springframework.security.core.use

2021-10-06 22:00:29 858

原创 SpringSecurity基本原理和使用

SpringSecurity简介安全框架概述安全框架---->解决系统安全问题的框架。没有安全框架时需要手动对每个资源访问控制。使用安全框架后,可以通过配置的方式实现对资源的访问控制核心功能认证授权防止伪造身份常用安全框架Spring Security:Spring家族中的一员,是一个能够基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。充分利用Spring IoC,DI(控制反转,依赖注入)和Aop(面向切面编程)Apache Shiro:功能强大

2021-10-06 19:52:40 160

原创 ArrayList源码分析

ArrayList参考资料:Java集合源码分析(一)ArrayList - LanceToBigData - 博客园 (cnblogs.com)ArrayList概述ArrayList是可以动态增长的索引序列,是基于数组实现的可变长数组以capacity属性作为封装数组的长度,扩容后capacity改变ArrayList与Vector相比是线程不安全的(Vector中的方法都使用了synchronized修饰)ArrayList的默认大小为10ArrayList的数据结构

2021-08-03 14:34:37 69

原创 JVM——类加载机制

虚拟机类加载机制一、概述在Java语言中,类型的加载、链接和初始化等动作都是在程序允许期间才开始。缺点:编译更麻烦,加载时性能开销更大有点:扩展性强,灵活性强二、类加载的时机一个类从被加载到虚拟机内存再到卸载出内存,它的整个生命周期将会经历以下七个阶段加载验证(链接)准备(链接)解析(链接)初始化使用卸载各个步骤之间按顺序进行,但不是上一个结束下一个才开始,通常是上一个在执行时下一个也开始执行了(解析阶段除外,解析阶段可以在初始化之后才做,这是为了支持Java语言的动态绑定性

2021-07-26 12:55:42 154

原创 JVM——类文件结构

类文件结构一、无关性的基石Java虚拟机的目标不只是运行Java语言,JVM通过字节码做为媒介能够运行其他语言编译后生成的Class文件。例如使用 Java语言编写的.java文件经过 javac编译器的编译后,生成了对应的.class文件使用JRuby语言编写的.rb文件经过jrubyc编译器编译后,生成了对应的.class文件,这两者都能在Jvm上运行二、Class文件的结构任何一个class文件唯一对应了一个类或接口相反,一个任何一个类或者接口不一定对应有class文件(动态代理,只在运

2021-07-26 12:54:49 191

原创 JVM——垃圾收集器

垃圾收集器与内存分配策略一、概述垃圾收集(Garbage Collection,简称GC),这项技术并不是Java语言的伴生产物,早在java语言出来之前,就已经有语言开始使用动态分配内存和垃圾回收了,例如Lisp的语言就是第一门使用内存动态分配和垃圾收集技术的语言垃圾收集主要考虑考虑以下三个问题哪些内存需要回收何时回收怎么回收对于java虚拟机中的五大区域来说,程序计数器、虚拟机栈、本地方法栈三个区域是线程私有的,随线程而生随线程而灭。而且每一个栈帧基本上在类的结构被确定下来后其大小也确

2021-07-26 12:53:34 256

项目logo-eaewqq

项目logo-eaewqq

2022-05-16

空空如也

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

TA关注的人

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