自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 1024程序节快乐

1024程序节快乐

2022-10-24 11:32:08 187 2

原创 Bigdecimal 的 equal() 踩坑

BigDecimal a = new BigDecimal("0.0"); BigDecimal b = new BigDecimal("0.00"); BigDecimal c = BigDecimal.ZERO; BigDecimal d = new BigDecimal(0.0F); BigDecimal f = new BigDecimal(0.00F); BigDecimal g = BigDec...

2022-05-08 13:24:14 535

原创 SELECT 语句的执行过程

SELECT 语句的执行过程为:连接、查询缓存、词法分析,语法分析,语义分析,构造执行树,生成执行计划、执行器执行计划,下面开始梳理一次完整的查询流程:连接器连接器负责与客户端建立连接,获取权限,维持和管理连接连接命令: >mysql -uroot -p123456 -h127.0.0.1 -P3306 -A连接的基本流程: 认证用户名+密码 -> 权限列表中查询拥有的权限查询缓存执行过的查询会被 MySQL 以 key-value 的形式缓存起来. key 是查询语句, va

2022-04-06 17:15:41 2891

原创 MySQL 为什么使用 B+ 树

B+ 树:有 k 个子树的中间节点就有 k 个元素,每个元素不存储数据,只用来做索引,所有的数据存储在叶子节点中。所有的叶子节点包含了所有元素的信息,以及指向这些元素记录的指针,且叶子节点本身元素依照关键字大小 自小到大顺序连接。所有的中间节点都同时存在于子节点中,是子节点中最大或最小的元素。MySQL 为什么使用 B+ 树:如果我们使用 B+ 树作为底层的数据结构,那么所有只会访问或者修改一条数据的 SQL 的时间复杂度都是 O(log n),也就是树的高度,但是使用哈希却有可能达到 O(

2022-04-03 09:00:00 139

原创 Springboot 的三种注入方式对比

首先来看看 Spring 中的实例该如何注入,总结起来,无非三种:属性注入set 方法注入构造方法注入我们分别来看下。1、属性注入属性注入是大家最为常见也是使用最多的一种注入方式了,代码如下:@Servicepublic class BService { @Autowired AService aService; //...}不光 @Autowired 可以实现注入,@Resouce 和 @inject 也是可以实现注入的但不知道大家有没有发现在 idea

2022-03-31 16:44:04 3339

原创 Redis 的三个核心问题 —— 线程模型、数据持久化、高可用

首先要明白redis是一个数据库 Redis 是一个内存数据库, 所有数据基本上都存在于内存当中, 会定时以追加(AOF)或者快照(RDB) 的方式刷新到硬盘中. 由于Redis 是一个内存数据库, 所以读取写入的速度是非常快的, 所以经常被用来做数据, 页面等的缓存。线程模型:Redis 只有单线程吗?Redis 是单线程的,主要是指 Redis 的网络 I/O 线程,键值对的 set() get() 等读写操作,Redis 的持久化、集群同步等操作,则是由另外的线程来执行。Redis 采用单线

2022-03-30 19:09:17 303

原创 结合proto3 实现 gRPC demo

定义服务一个 RPC 服务通过参数和返回类型来指定可以远程调用的方法。gRPC 通过 protocol buffers 来实现。我们使用 protocol buffers 接口定义语言来定义服务方法,用 protocol buffer 来定义参数和返回类型。客户端和服务端均使用服务定义生成的接口代码。这里有我们服务定义的例子,在 helloworld.proto 里用 protocol buffers IDL 定义的。Greeter 服务有一个方法 SayHello ,可以让服务端从远程客户端接收一

2022-03-29 11:34:42 572

原创 比 Json 还牛的 Protobuf 的编码须知(.proto文件该如何编写)

编码规范:定义一个 message 消息类型:字段编号尽量使用 16 (虽然前15个 bytes 浪费了,但好处多多)syntax = "proto3";message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3;}文件的第一行指明了我们使用的是 proto3 语法:若不指定该行 protocol buffer 编译器会认为是 proto2 。该行必须是文件

2022-03-25 17:41:49 855

原创 Android 子线程无法更改UI解决方法

//在子线程中使用 runOnUiThread 在UI线程执行runOnUiThread()runOnUiThread(updateThread);Runnable updateThread = new Runnable() { @Override public void run() { //TODO } };示例: new Thread(new Runnable() { .

2022-03-07 09:31:02 2229

原创 okhttp异常closed, response.body().string() 转成对象

使用 OkHttp 返回信息时,将 response.body().string() 转成对象,结果直接闪退 @Override public void onResponse(Call call, Response response) throws IOException { //response.body().string() 获得服务器返回的数据 Log.d(TAG, "onResponse:

2022-03-06 19:11:57 1307 2

原创 Java互斥同步 关于Synchronized关键字与ReentrantLock的使用和比较

synchronized关键字的四种使用方法1. 同步一个代码块 public void func1(){// 同步代码块 synchronized (this){ //... } }它只作用于同一个对象,如果调用两个对象上的同步代码块不会同步对于以下线程,由于调用同一个对象,所以实现了同步。/** * @Author 胡孟帆 * @Date 2021-11-2

2021-11-21 17:30:06 149

原创 阿里云OSS附件服务器:多线程异步批量操作(批量上传实例)

多线程批量上传OSS一、OSS简介阿里云存储服务(OpenStorageService,简称OSS),是阿里云对外提供的海量,安全,低成本,高可靠的云存储服务。大家首先开通OSS,并且创建好Bucket,才能开始写代码使用它,参考博客:OSS开通以及开通Bucket相关操作二、单线程实现文件上传这里创建三张图片,之后使用这三张图片进行上传操作package com.example.oss;import com.aliyun.oss.OSS;import com.aliyun.o

2021-11-20 16:20:58 5945 1

原创 JAVA基本变量包装类和缓存池

一、包装类Java 面向对象编程,一切都是对象,但是有例外: 8 个基本数据类型不是对象,因此在很多时候非常不方便。 为此, Java提供为 8 个基本类型提供了对应的包装类:byte ------- Byteshort ------ Shortint ---------- Integerlong -------- Longchar -------- Characterfloat -------- Floatdouble ----- Doubleboolean----- Boolean

2021-11-14 17:05:33 295

原创 mkdir()和mkdirs()的区别

关于两者的说明如下:boolean mkdir() : 创建此抽象路径名指定的目录。boolean mkdirs() : 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。boolean createNewFile():当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件光看说明看不出根本看不出有什么区别,所以需要测试实验一下:写一个测试类:@SpringBootTestclass TestFileApplicationTests { @Test v

2021-11-11 14:02:47 354

原创 Python configparser读写配置文件

import ConfigParserimport configparserConfigParser模块在python3中修改为configparser.这个模块定义了一个ConfigParser类,该类的作用是使用配置文件生效,配置文件的格式和windows的INI文件的格式相同格式:用中括号[]括起来的为一个 section 例如 Default、Color;每一个 section 有多个 option[section] name=value或者name: value"#" 和";

2021-11-07 15:56:59 501

原创 Python selenium页面加载慢超时的解决方案

当执行了get以后,除非网站全部加载完成,否则你只能乖乖等,什么都不能干,这是整个程序是阻塞的(单线程),get不完就别想进行下面操作。这个等待可能是5分钟或者更久则会出现timeout报错。driver.set_page_load_timeout(5)driver.set_script_timeout(5)设置后,5秒后网页确实停止了,但是driver也死了,直接报错timeout。下面是另一种解决办法 desired_capabilities = DesiredCapabilit

2021-11-04 10:20:31 1580

原创 Python爬虫解决网站检测出Selenium的window.navigator.webdriver属性

s=Service(r'C:\Program Files\Google\Chrome\Application\chromedriver.exe') driver = webdriver.Chrome(service=s) driver.maximize_window() driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ ...

2021-11-02 09:19:56 587

原创 1024程序节快乐

2021-10-25 08:06:33 159 1

原创 java多线程学习笔记

一、实现方法简介java创建线程一共有三种实现方法常用第二种接口实现,因为实现接口的方式比继承类的方式更灵活,也能减少程序之间的耦合度。二、继承Thread类Thread类是所有线程类的父类,实现了对线程的抽取和封装实现步骤:定义一个类,继承Thread类,并重写该类的run方法,run方法体为完成的任务。创建Thread类的对象,即创建子线程用线程对象的start方法启动该线程三、实现Runable接口四、通过Callable和Future创建线程五、使用 Completa

2021-10-20 19:30:00 113

原创 BeanUtils.copyProperties学习笔记

简介我们在开发中经常遇到,把父类的属性拷贝到子类中。通常有2种方法:一个一个set用BeanUtils.copyProperties很显然BeanUtils更加方便,也美观很多。值得注意的是BeanUtils.copyProperties有俩个spring,apache不同的包,不同的包中BeanUtils的方法使用是不一样的。//org.springframework.beans.BeanUtilspublic static void copyProperties(Object sour

2021-10-19 19:30:00 243 1

原创 HashMap扩容原理学习笔记

HashMap简介HashMap在底层数据结构上采用了数组+链表+红黑树,通过散列映射来存储键值对数据因为在查询上使用散列码(通过键生成一个数字作为数组下标,这个数字就是hash code)所以在查询上的访问速度比较快,HashMap最多允许一对键值对的Key为Null,允许多对键值对的value为Null。它是非线程安全的。在排序上面是无序的。红黑树见 https://blog.csdn.net/xiaofeng10330111/article/details/106080394第一次添加元素的

2021-10-18 19:14:10 343 1

原创 Java8中list转map方法 .stream.collect(Collectors.toMap())

常用方式1. 利用Collectors.toMap方法进行转换public Map<Long, String> getIdNameMap(List<Account> accounts) { return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername));}其中第一个参数就是key,第二个参数就是value的值。2. 收集对象实体本身在开发过程中我们

2021-10-14 19:10:53 9748

原创 面试备战笔记

分享下我个人的一些笔记内容:

2021-09-29 18:33:36 84

原创 关于Java项目代码的个人理解,JDK8的新特性

文章目录1、@Builder创建对象2、遍历List合并结果集3、 .forEach(item->{}); 合并结果集4、Java enum5、获取与当前用户同一组的用户信息6、将json转成数组7、获取当前项目路径8、已知图片url,将图片转为base64再以map形式传输Dao层为数据连接层,一般一个Dao层与一张表相对应Dto层为数据传输层,一般一个Dao对应一个Dto或多个Dto,原因是前端不需要传输全部字段,所以新建一个Dto层,其实可以用Map代替1、@Builder创建对象D

2021-09-28 15:47:27 144

原创 Docker初步了解

文章目录Docker1、命令1.1 镜像命令1.2 容器命令1.3 其他命令2、Commit镜像3、数据卷4、挂载5、Dockerfile6、数据卷容器7、Dockerfile构建步骤8、DockerFile的指令Docker1、命令1.1 镜像命令docker search mysql --filter=stars=3000doker pull mysql:5.7 软件:版本号 docker rmi -f 镜像id docker rmi -f #(docker images -aq)

2021-09-28 15:41:10 116

原创 java多线程CompletableFuture初步了解

文章目录java多线程操作(使用)CompletableFuture1、==runAsync和supplyAsync==示例2、在线程完成时的回调函数示例3、将线程串行化(thenApple)示例4、==thenCombine 合并任务==示例5、allOf 多种结合的调用示例java多线程操作(使用)CompletableFuture1、runAsync和supplyAsyncpublic static CompletableFuture<Void> runAsync(Runnable

2021-09-28 15:36:49 398

原创 SSM,Mybatis深入了解

文章目录Mybatis1.简介1.数据持久化2.持久层3.为什么需要Mybatis2.第一个Mybaits程序1.搭建环境2.创建一个模块(子项目)3.编写代码4.增删改查3.万能的Map4.模糊查询5.核心配置文件1.环境配置(environments)2.数据源(dataSource)3.属性(properties)4.类型别名(typeAliases)5.设置(settings)6.映射器(Mappers)7.生命周期和作用域6.ResultMap结果映射7.日志工厂8.分页9.注解开发9.1、面向接

2021-09-28 15:34:02 178

原创 SSM框架配置模板

文章目录配置模板1.build.gradle2.application.yml配置模板1.build.gradleplugins { id 'org.springframework.boot' version '2.5.3' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java'}group = 'com.zufe'version = '0.0.1-SNAPSHOT'sourceC

2021-09-28 15:23:31 75

原创 Springboot和shiro初步了解

文章目录Springboot1、实体类2、多环境配置1、多个环境配置文件2、一个配置文件用---来区分不同环境3、访问静态资源自定义静态资源路径小结:4、Thymeleaf1、导入依赖2、在resources下创建templates文件3、写html4、写controller5、Shiro6.Spring集成shiro小编还在继续学习... ...Springboot1、实体类/*@PropertySource :加载指定的配置文件;我们去在resources目录下新建一个person.prope

2021-09-28 15:21:19 162

原创 Spring初步理解

文章目录Spring1、简介1、优点2、总结3、组成2、IOC3、HelloSpringIOC创建对象方式4、Spring配置1、别名2、Bean的配置3、import5、视图解析器数据显示到前端6、过滤器解决乱码SpringSSM:SpringMvc+Spring+Mybatis<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency> <g

2021-09-28 15:01:43 481

原创 Anroid Studio实现简单页面跳转了解

​Android应用程序由下列组件组成:Activity - 用于表现功能Service - 相当于后台运行的 ActivityBroadcast Receiver - 用于接收广播Content Provider…活动(Activity) - 用于表现功能,最为常用每一个Activity都要在AndroidManifest.xml中声明Android应用程序的任务、进程和线程任务事件Task栈A:点击Email应用,进入收件箱AB:选中一封邮件,点

2021-09-28 14:53:54 417

空空如也

空空如也

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

TA关注的人

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