- 博客(23)
- 收藏
- 关注
原创 使用itextpdf基于模板动态生成PDF
在有些场景下我们可能需要根据指定的模板来生成 PDF,比如说合同、收据、发票等等。因为 PDF 是不可编辑的,所以用代码直接对 PDF 文件进行修改是很不方便的,这里我是通过itext和来实现的,以下就是具体实现方法。
2025-02-11 11:51:40
689
原创 Java 学习路线:零基础到实战
在学习过程中,要注重理论与实践相结合,通过大量的代码练习和项目实践,加深对知识的理解和掌握。当然,除此以外还有很多其他的框架技术,把这些吃透了、理解了,其他的自然而然的也就手到擒来辣,很快就能上手的。了解它们的功能和使用方法,通过实际应用场景,如处理用户输入的字符串、统计单词出现的次数等,熟练掌握这些类的操作。包括用户模块、商品模块、订单模块、支付模块等功能的实现,使用所学的Java技术栈,如SpringBoot、MyBatis、MySQL、Redis等,同时考虑系统的性能优化和安全性。
2025-01-20 16:03:17
1544
原创 一枚程序猿对AI的看法
自动化带来的工作替代:工作效率提升:新技能需求的增加:(三)职业发展路径的分化向高级岗位发展:向专业化方向发展:系统架构和设计创新:解决新问题和未知问题:与业务部门的沟通:团队协作和项目管理:
2025-01-20 15:46:42
1042
原创 hutool实现java代码邮件发送
SpringBoot是一个快速开发的框架,它简化了Spring应用的开发过程,通过自动配置和约定大于配置的原则,让开发者能够更加专注于业务逻辑的实现,而不是繁琐的配置工作。通过SpringBoot的自动配置和Hutool的便捷工具类,我们可以轻松实现邮件发送功能。无论是简单的文本邮件,还是复杂的HTML邮件和带附件的邮件,都可以通过简洁的代码完成。
2025-01-18 17:06:27
671
原创 MongoDB vs Redis:相似与区别
在当今的数据库领域,MongoDB和Redis都是备受关注的非关系型数据库(NoSQL),它们各自具有独特的优势和适用场景。本文将深入探讨MongoDB和Redis的特点,并详细对比它们之间的相似之处和区别,帮助你更好地选择适合自己项目的数据库。MongoDB是一个面向文档的数据库管理系统,它使用BSON(BinaryJSON)格式存储数据。这种文档型存储方式允许数据以灵活的结构存储,类似于JSON对象,这使得MongoDB非常适合存储半结构化和非结构化数据。
2025-01-18 16:59:15
1275
原创 Spring Boot 集成 MongoDB:启动即注入的便捷实践
如果默认的自动配置不能满足需求,也可以通过创建自定义的配置类来进一步定制MongoDB的配置。
2025-01-18 16:51:22
1143
原创 使用docker搭建nacos集群
镜像拉取docker pull nacos/nacos-server:1.2.1docker pull nginxdocker pull mysql:5.7mysql启动配置并挂载文件docker run -id \-p 3306:3306 \--name=c_mysql \-v $PWD/conf:/etc/mysql/conf.d \-v $PWD/logs:/logs \-v $PWD/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=
2022-03-25 17:44:02
350
1
原创 MySQL性能分析、优化/实战(超详细)
SQL性能下降的原因执行时间长、等待时间长查询语句写的有问题使用函数、特殊运算符(* from 这种不太聪明的做法应该都清楚)导致索引失效关联查询太多join(设计缺陷或者不得已的需求)服务器调优及其各个参数设置(缓冲、线程数等)索引的简介MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据结构,可以得到索引的本质:索引即数据结构。(简单理解)优势:提高数据检索的效率,降低数据库的IO成本通过索引树对数据进行排序,降低数据排序的成本,降低CPU
2022-02-23 17:29:36
1366
原创 Stream流
函数式编程-Stream流1. lambda表达式主要作用还是简化代码,让它看起来更加简洁优雅,前端es6语法的思想也是一致 // 一般写法 List<String> list = new ArrayList<>(); list.add("张叁1"); list.add("张叁2"); foreach (String key : list) { System.out.println(key); } // stream list.forEach(item -&
2022-02-18 16:48:31
351
原创 微信支付 JSAPI
准备工作申请微信商户号流程PC端微信支付登录页微信支付JSAPI开发文档需要获取的信息商户号 mch_id公众号 appId服务器地址 notify_urlapi证书密钥通知地址开发指引微信支付统一下单Demo下载依赖代码阅读(避免踩坑)WXPayConfigimport com.github.wxpay.sdk.WXPayConfig;import java.io.*;public class MyConfig implements WXPayC
2022-02-16 17:01:41
1395
原创 HTTP&&HTTPS协议
什么是http?超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。由三部分组成起始行(start line): 描述请求或者请求的基本信息头部字段集合(header): 使用key-value 更新的说明报文消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据T
2022-02-16 15:13:29
1298
原创 为什么分布式环境下synchronized失效
synchronized官方解释翻译成中文:Synchronized同步方法可以支持使用一种简单的策略来防止线程干扰和内存一致性错误:如果一个对象对多个线程可见,则对该对象变量的所有读取或写入都是通过同步方法完成的。简单就是说Synchronized的作用就是Java中解决并发问题的一种最常用最简单的方法 ,他可以确保同一个时刻最多只有一个线程执行同步代码,从而保证多线程环境下并发安全的效果。 如果有一段代码被Synchronized所修饰,那么这段代码就会以原子的方式执行,当多个线程在执行这段代码
2021-11-22 17:20:10
2633
原创 JUC(java并发编程)
JUCjava并发编程JUC一级目录二级目录三级目录1、JUC(java.util.concurrent)1.1 进程/线程1.2 线程的五种状态1.3 并发/并行2、三个page(java.util.concurrent在并发编程中使用的工具类)2.1 java8函数式编程2.2 Collections.synchronizedList & VCopyOnWriteArrayList & Vector2.2.1 ArrayList2.2.2 Vector2.2.
2020-07-15 20:57:37
913
原创 HashMap面试常见的底层问题
HashMap数据结构( HashMap就是一个插入慢、查询快的数据结构)数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);线性链表:对于链表的新增,删除等操作(在找到指定操作位置后),仅需处理结点间的引用即可,时间复杂度为O(1),而查找操作需要遍历链表逐一进行比对,复杂度为O(n)( HashMap中的链表出现越少,性能才会越好。 ) 链表的节点存储的是一个 Entry 对象,每个Entry 对象存储四个属性(hash,key,value,next)二叉树:对一
2020-07-06 17:04:11
812
原创 Vagrant 快速创建虚拟机
什么是vagrant?vagrant是一个工具,用于创建和部署虚拟化开发环境的。拿VirtualBox举例,VirtualBox会开放一个创建虚拟机的接口,Vagrant会利用这个接口创建虚拟机,并且通过Vagrant来管理,配置和自动安装虚拟机。下载vagrantvagrant下载地址:https://www.vagrantup.com/downloads.html下载完成之后下一步一直到安装(当然也可以自定义安装.) // 查看版本(查看下载是否完成,完成下载显示版本) vagrant
2020-06-16 23:23:09
642
2
原创 解决Thymeleaf页面国际化时显示??login.tip_zh_CN??
error总结1.目录结构(确定是在resources目录结构下)2.application.properties(指定自定义的目录)#ResourceBundleMessageSource管理国际化资源文件spring.messages.basename=i20n.login3.源码(分析)/**如果你创建的国际化资源文件不是直接在resources目录下那么他就去appli...
2020-03-31 16:13:27
1661
原创 node部署vue-shop时error
端口被占用解决方案:Error: listen EACCES 0.0.0.0:8080(https://blog.youkuaiyun.com/u010078133/article/details/78600541)-element-ui样式导入错误<!-- element-ui 的样式表文件 --><!-- ppt粘贴的过程中-应该遇到了编码转换变成了,改过来就可以了 -...
2020-03-07 17:06:27
327
原创 webpack无法引入glyphicon图标的解决方案
在webpack开发中利用bootstrap4的字体图标在项目开发中难免需要一些图标,如果用到bootstrap4的话,或者版本之上,版本icon文件都分离出去了,所以还需要下载open-iconic:下载:npm i bootstrap@4.1.3 -D由于4.x版本icon文件分离出去所以还需要下载open-iconic:cnpm i https://github.com/iconic...
2020-02-11 15:19:32
315
1
原创 NRM安装与配置以及常见错误
NRM安装与配置以及常见错误下载nodejsNode.js下载到D:\Program Files\nodejs下面,也是另一位博主的经验所得…安装完成之后打开环境变量查看系统变量中的PATH是否存在node.js的安装地址(没有安装这个地址的就看有没有配置默认安装地址,没有就自己配吧或者重新装)全局安装nrm在命令行执行命令,npm install -g nrm 全局...
2020-02-06 14:32:50
4431
1
原创 Maven依赖范围
Maven依赖管理基本概念假如存在A、B坐标,然后A依赖与B,A在pom.xml中添加B坐标,在添加坐标的时候(GAV)需要制定依赖,默认为compilecompile(编译范围)1.值a在编译时依赖b,此范围默认为依赖范围;2. 编译范围的依赖会用在编译、测试时运行;3. 由于运行时需要,所以编译范围的依赖会被打包;provided1.provided依赖只有当在jdk或者一个容...
2019-10-22 21:12:39
291
原创 Mybatis中一级缓存和二级缓存的区别
一级缓存mybatis默认是一级缓存一级缓存指的就是Session缓存,也就是在同一个SqlSession中,不同的sqlSession中的缓存是互相不能读取的。第一次在database中查询会保存在缓存中,第二次或者n次都是在缓存中获取优点:sqlSession先去缓存中查找,是否有该数据,如果有,读取; 如果没有,从数据库中查询,并将查询到的数据放入一级缓存区域,供下次查找使用...
2019-09-18 21:52:48
1943
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人