java基础
文章平均质量分 64
芒果蒲公英
java、性能优化
展开
-
阿里巴巴一面(菜鸟网络)
聊一下笔试题的算法思路 聊了一下项目。 HashMap和ConcurrentHashMap的区别 ConcurrentHashMap在读操作的时候是否需要加锁 volatile的作用 除了mysql还使用过什么数据库 为什么使用redis redis怎么实现高可用、高并发? Java和SpringBoot类加载机制 springboot自动装配 还有一些具体场景题怎么处理忘了 总结这次没有准备好吧,回答的不太好,面试官一次晚上打电话过来不方便面,约了周六,然后周六早上九点突然打电话过来原创 2021-08-29 00:49:46 · 3121 阅读 · 0 评论 -
单例模式(五种实现方式)
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,该模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。注意:作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决:一个全局使用的类频繁地创建与销毁。 何时使用:当您想控制实例数目,节省系统资源的时候。 关键代码:构造函数是私有的。实现方式:(1)饿汉模式:线程安全、调用效率高、但不能延时加载class Singleton原创 2021-08-10 11:50:55 · 2940 阅读 · 0 评论 -
Java面试题:一张图了解String、StringBuffer与StringBuilder之间的区别
Java面试题:一张图了解String、StringBuffer与StringBuilder之间的区别StringStringBufferStringBuilder不可以变可变可变操作少量的数据多线程操作字符串缓冲区下操作大量数据单线程操作字符串缓冲区下操作大量数据线程安全(StringBuffer 的所有公开方法都是 synchronized 修饰的)线程不安全效率最低效率较低效率最高...原创 2021-08-09 14:06:04 · 2221 阅读 · 0 评论 -
你了解面试官问的事务吗?
一、什么是事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。可以理解为:更新数据库中各种数据项的程序执行单元。就比如:同一根绳上的蚂蚱,要活一起活,要死一起死。二、事务的四个特性事务的四个特性为原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability),简称为ACID1、原子性:操作要么都发生,要么都不发生。2、一致性:事务的一致性是指事务的执行不能破原创 2021-08-09 15:16:11 · 3113 阅读 · 0 评论 -
No qualifying bean of type
报错信息:Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.NoSuchB原创 2022-02-26 14:34:18 · 3354 阅读 · 0 评论 -
fatal: Not a valid object name: ‘master‘.
Git创建分支错误Administrator@DESKTOP-RL96PC3 MINGW64 /e/dd (master)$ git branch devfatal: Not a valid object name: 'master'.原因:是因为我们刚刚创建的主分支还没有提交任何东西,所以不能创建分支。解决办法:提交一下主分支后,再来创建新分支:可以使用以下命令查看当前分支:git add .git commit -m "注释"执行完以上命令再创建即可Administrat原创 2021-09-29 16:45:00 · 3300 阅读 · 0 评论 -
eclipse用debug运行项目的时候卡死
你是否遇到在使用debug模式下运行自己的项目或者公司项目的时候,本来跟正常运行的时候一样,但是一段时间之后再debug运行就卡死了,而直接run运行就不会。这个原因是什么呢?该怎么解决呢?这是用debug启动多次之后,即使你运行过程中没有被断点拦截到,但在多个模块下打的断点多了没有去掉而导致直接卡死了,所以我们只需要把打的断点都去掉之后重新启动就可以了。以eclipse为例:①首先用debug运行项目,然后点开Window-->Show V...原创 2021-10-16 15:04:39 · 4762 阅读 · 0 评论 -
数据库为什么要分库分表?
我们需要了解以下问题: 什么是分库分表 为什么需要分库分表 如何分库分表 什么时候开始考虑分库分表 分库分表会导致哪些问题 分库分表有哪些中间件一、什么是分库分表分库:就是一个数据库分成多个数据库,部署到不同服务器上。例如用户表、订单表、商品表分别部署到不同的服务器上。分表:就是一个数据库表分成多个表。例如原始表可以将1、2、3月的订单的数据分别放到不同数据表中。二、为什么需要分库分表2.1 为什么需要分库呢?如果业务原创 2022-05-20 16:06:44 · 4664 阅读 · 0 评论 -
Oracle基本操作
Oracle Database,指数据库管理系统。Oracle数据库管理系统是管理数据库访问的计算机软件。它由Oracle数据库和Oracle实例(instance)构成(区分mysql,mysql没有实例的概念)。在任何时刻,一个实例只能与一个数据库关联,访问一个数据库;而同一个数据库可由多个实例访问(RAC)。 一、创建用户和表空间sqlplis /nologl //启动sqlplus不登录conn sys/root as sysdba; ...原创 2021-08-17 21:11:36 · 4129 阅读 · 0 评论 -
数据库中的锁机制
二、MySQL大致可归纳为以下四种锁:表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率最低,并发度最高。页面锁:开锁和加锁时间界于表锁和行锁之间,会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。间隙锁:锁住满足索引条件检索的区间,其他事务插入该区间内的数据时会失败,解决了幻读的问题。MyISAM存储引擎:表级锁InnoDB存储引擎:既支持行级锁...原创 2021-10-15 18:03:49 · 3691 阅读 · 0 评论 -
MVCC面试题总结
一、谈谈你对Mysql的MVCC的理解?MVCC是一种高并发版本控制器,一般用于数据库中对数据的并发访问。Mysql中的innoDB中就是使用这种方法来提高读写事务的并发性能、原因是MVCC是一种不采用锁来控制事务的方式,是一种非堵塞、同时还可以解决脏读,幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题。总之:就是MVCC是通过保存数据的历史版本,根据比较版本号来处理数据是否显示,从而达到读取数据的时候不需要加锁就可以保证事务隔离性的效果。二、当前读和快照读在高并发情况...原创 2022-03-05 20:28:21 · 6849 阅读 · 0 评论 -
Redis缓存穿透与雪崩
Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,数据的一致性问题就是比较严重的,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么就不能使用缓存。一些典型问题就是,缓存穿透、缓存雪崩和缓存击穿。目前,业界也都有比较流行的解决方案。一、缓存穿透1.1 概念缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有...原创 2021-08-09 15:12:44 · 2961 阅读 · 0 评论 -
Redis的持久化
Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能!一、RDB(Redis DataBase)什么是RDB在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。Rdb 保存的是 dump.rdb 文件Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临原创 2021-08-10 14:33:22 · 2696 阅读 · 0 评论 -
synchronize同步锁作用在普通方法、代码块、静态方法上的区别
修饰普通方法,相同对象阻塞,不同对象不阻塞。修饰静态方法,无论是否为同一对象,均为阻塞。修饰代码块,如果为对象锁则相同对象阻塞,不同对象不阻塞。如果为类锁,无论是否为同一对象,均为阻塞。原创 2021-09-08 11:41:04 · 4463 阅读 · 1 评论 -
springboot中实现乐观锁
一、使用场景当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新二、乐观锁实现方式取出记录时,获取当前version 更新时,带上这个version 执行更新时, set version = newVersion where version = oldVersion 如果version不对,就更新失败接下来介绍如何在Mybatis-Plus项目中,使用乐观锁:三、乐观锁实现流程1:添加 @Version 注解@Versionpr原创 2022-03-04 14:27:22 · 5462 阅读 · 0 评论 -
Git常用命令与区别
一、Git常用命令汇总 命令名称 作用 git config -- global user.name 用户名 设置用户签名 git config --global user.email 设置用户签名 git init 初始化本地库 git status 查看本地库状态 git add 文件名 添加到暂存区 git add原创 2021-10-27 11:51:15 · 3442 阅读 · 0 评论 -
解决IDEA创建module之后建Package未展开
1、为展开之前2、展开之后3、解决办法原创 2021-09-25 21:04:09 · 3340 阅读 · 0 评论 -
IDEA的基本使用
01 分层结构Config:用于存放SpringBoot相关配置类,包括启动类。Controller:所有请求的入口,前后端交互的入口。Service:负责所有的业务逻辑,介于Controller和Mapper之间,也是Domain和Dto的转换层。Mapper:或者叫Dao,持久层。负责Java和数据库交互。包括interface和xml两类文件。Domain:用一个Java类来映射数据库表,类名相当于表名,类的属性就相当于表的字段。02 基本设置1:修..原创 2021-08-09 15:19:17 · 3335 阅读 · 0 评论 -
IDEA Debug调试技巧
F7 Step Into 相当于eclipse的f5就是 进入到代码F8 Step Over 相当于eclipse的f6 跳到下一步Alt+shift+F7 Force Step Into 这个是强制进入代码Shift+F8 Step Out 相当于eclipse的f8跳到下一个断点,也相当于eclipse的f7跳出函数Atl+F9 Run To Cursor 运行到光标处ctrl+shift+F9 debug运行java类ctrl+shift+F10 正常运行java类alt+F8 de..原创 2021-09-26 18:02:14 · 3043 阅读 · 0 评论 -
40 个 Spring Boot 常用注解
一、Spring Web MVC 与 Spring Bean 注解Spring Web MVC 注解@RequestMapping@RequestMapping注解的主要用途是将Web请求与请求处理类中的方法进行映射。Spring MVC和Spring WebFlux都通过RquestMappingHandlerMapping和RequestMappingHndlerAdapter两个类来提供对@RequestMapping注解的支持。@RequestMapping注解对请求处理类中的请求处转载 2021-10-11 19:48:18 · 4638 阅读 · 0 评论 -
有哪些高并发设计技术方案?
一、负载均衡靠优化单台机器的内存、CPU、磁盘、网络带宽,使其发挥极致性能,已经不太现实。正所谓 "双拳难敌四手,恶虎还怕群狼",现在早已经是分布式时代,靠的是数量取胜,也称之为水平伸缩方案这么多的系统,如何流量调度,这里的第一道入口就是负载均衡负载均衡,它的职责是将网络请求 “均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。常原创 2022-05-20 16:17:54 · 4097 阅读 · 0 评论 -
设计模式七大原则(案例解析)
一、 设计模式的目的编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好1) 代码重用性 (即:相同功能的代码,不用多次编写)2) 可读性 (即:编程规范性, 便于其他程序员的阅读和理解)3) 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)4) 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)5) 使程序呈现高内聚,低耦合的特性二. 设计模式七大原则...原创 2021-11-25 14:00:47 · 3548 阅读 · 0 评论 -
子线程如何获取父线程ThreadLocal的值?
Java中如果子线程要获取到父线程中 ThreadLocal 中的值,需要使用其子类InheritableThreadLocal 实现。 测试代码如下:public class Get_ThreadLocal { public static void main(String[] args) throws InterruptedException { Thread parentParent = new Thread(() -> { ...原创 2022-05-20 15:43:50 · 4163 阅读 · 0 评论 -
序列化和反序列化有什么作用?
一、基本概念1、序列化和反序列化的定义: (1)Java序列化就是指把Java对象转换为字节序列的过程 Java反序列化就是指把字节序列恢复为Java对象的过程。 (2)序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。 反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。 总结:核心作用就是对象状态的保存和重建。(整个过程核心点就是字...原创 2022-05-20 16:24:55 · 13806 阅读 · 0 评论 -
Java核心类库
Java核心类库2|01. 常用的类2|11.1 常用的包与功能描述java.lang 核心包,jvm自动导入。包含System,String......类。 java.util 工具包,包含大量工具类与集合类,如Scanner,Random,List等。 java.io 输入输出包,关于读写文件相关的类,FileInputStream,FileOutputStream等。 java.net 网络包,提供大量网络编程相关类,ServerSocket,Socket等。 java.sql转载 2021-10-11 20:24:02 · 4151 阅读 · 2 评论 -
从String s = new String(“abc“) 一共创建了几个对象简单认识JVM
在做一些面试题或者面试的时候,经常会碰到String s = new String("abc") 一共创建了几个对象这个问题,要先了解这个问题,首先我们得先知道jvm的内存。在jdk1.8之前,jvm运行时数据区分布如下:其中方法区和堆内存是所有线程共享的,而程序计数器、虚拟机栈、本地方法栈是线程私有的。其中对于方法区,大家常常称之为:“永久代(Permanent Generation)”,但是二者本质上并不相同。仅仅是因为习惯使用说使用永久代来实现方法区而已,这样HotSpot的垃圾收集器就可..原创 2021-10-08 23:56:25 · 3355 阅读 · 0 评论 -
Java中的try-catch-finally与return的关系
一、将执行try的return或者抛出异常情况(1)try,catch语句块中均有return,finally语句块中无return,try语句块中抛出异常与catch要捕捉的异常类型不一致:将抛出try语句块中的异常。(2)try,catch语句块中均有return,finally语句块中无return,三个语句块中都没有抛出异常:将执行try语句块的return。二、将执行catch的return或者抛出异常情况(1)try,catch语句块中均有return,finally语句块.原创 2021-09-02 10:21:04 · 3341 阅读 · 0 评论