Java——后端开发经验总结(持续更新中)

目录

一、判断实体类

二、图片无法正常显示

三、图片路径存储问题

四、xml注释

五、常用快捷键使用

每日三问

重要配置


一、判断实体类

Assert.notNull: 断言某个值是否为空

  1. 优点:告别了if判断为空。
  2. 缺点:场景比较单一,基本使用在查询数据库后的实体类判断。

二、图片无法正常显示

情境导入:

部署前后端之后,网页中的图片无法正常显示,其他数据都是获取到了的

原因分析:

在排除前端路径没有写错之后,应该是后端的问题

随即发现后端开放的图片地址写错了!

总结:

  • 在部署上线前,记得把这里的文件路径修改好
  • Windows与Linux路径不一样!!!

三、图片路径存储问题

情境导入:

存储图片路径到数据库的时候,mysql报错:data too long for colum....

问题分析:

MySQL数据库中的路径存储类型,我写的是varchar(100)

通过搜索得知:图片路径存储至少要varchar(255)以上

原因分析:

为了节省空间,所以当时给MySQL中的路径存储属性写了varchar(100)

总结:

以后的图片路径存储都设置为varchar(255)以上


四、xml注释

情境导入:

今天一个网友说:要准备删库跑路了!

询问之后,发现就是因为xml注释引发的灾难!

问题分析:

为了方便自己和公司的同事,网友好心在xml写上了如下注释:

原因分析:

  • 注释后面的条件没有换行,把其他条件也给注释了

  • 注释直接把分页的条件给注释掉了,相当于查全表

  • 100多w条数据放在内存里,就直接爆了

总结

  • 使用自动注释:Alt + /

  • xml注释有很多种,编译不会报错(Maven打包也不会报错)!

  • xml开放的注释(专门写SQL的xml)

  • /* 注释 */
    <!-- 注释 -->
    -- 注释


五、常用快捷键使用

功能快捷键冲突情况特殊使用环境
注释代码Ctrl+ /当前页面
格式化代码Ctrl+Alt+L与QQ锁屏快捷键冲突当前页面
大小写统一Ctrl+ Shift + U常量的命名
快速查找Ctrl + F当前页面
快速查看类的结构信息Alt+7当前页面

快捷键大全:http://t.csdn.cn/k3Eb3


六、MySQL设置utf8mb4后仍然无法保存emoji表情

情境导入:

今天有用户通过输入框,存储了emoji表情,导致SQL数据库报错:java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94'

原因分析:

  • UTF-8编码有可能是两个、三个、四个字节

  • Emoji表情或者某些特殊字符是4个字节

  • 但MySQL的utf8编码最多3个字节,所以数据插不进去

emoji表情:

😀😃😄😁😆😅🤣😂🙂🙃😉😊😇🥰😍🤩😘😗

解决方案:

1、修改数据库的字段(column)字符集为utf8mb4【使用后,还是无法存储,仍然报错!】

1.1、修改方案(2022.11.22)

⭐️  ​​​可以正常存储emoji表情

⚒️ 无法存储emoji表情

 

2、使用hutool工具类 ⚒️ 进行转换

  • 亲测有效,但是有点麻烦

  • 存储的时候,需要转换为字符型

  • 从数据库中取出的时候,又需要转换为emoji表情

🚀 hutool工具类网址:Hutool参考文档Hutool,Java工具集https://hutool.cn/docs/#/extra/emoji/Emoji%E5%B7%A5%E5%85%B7-EmojiUtil


七、图片压缩功能

情境导入:

用户每次上传的图片都是3-5M,比较大

  • 当用户查看上传图片的时候,页面加载图片很慢,用户体验不好 🤔

  • 图片过大,也会占用服务器的存储空间,而且查看大图片,还会占用服务器带宽

解决方案:

1、前端处理 (简单快捷 ✌️

  • 用户上传图片后,前端直接压缩图片即可

  • 压缩图片可直接利用组件完成

2、后端处理(不推荐)

  • Thumbnailator工具类实现

  • 优点:可指定压缩大小

  • 缺点:费时,需要异步操作,占用带宽

总结:

  • 本人主要学后端,就首选了后端处理
  • 结果发现前端处理更简单,白折腾了大半天💦
  • 在此进行记录!ℹ️ℹ️ℹ️

全栈的理解

🏵️ 全栈是个很难界定的概念 :

Java全栈?还是应用开发全栈?

  • 所以全栈作为方向和学习路线是很难确定学习路线的
  • 大厂招聘也不会写要招全栈,都是合作完成

所以全栈是一种能力,对于一个合格工程师最重要的能力就是:

  • 快速学习新知识并且运用的能力
  • 除此之外所有的经验和积累,都是为了能让我们在拿到需求,遇到问题的时候,知道该用什么技术去实现,或者该学习什么技术才能实现。

每日三问

  1. 学后有思考吗?

  2. 有不看文档写一遍的习惯吗?

  3. 有每天写日报总结吗?

重要配置

序号配置信息变量名称
1图片加载路径imgUrl
2请求路径baseUrl
3文件上传路径uploadUrl
4AppIDappid
5秘钥pwd
### Java后端开发面试自我介绍模板 在Java后端开发的面试过程中,一份清晰、简洁且专业的自我介绍能够帮助候选人给面试官留下良好的第一印象。以下是基于行业经验总结的一个通用模板: --- 大家好,我是[您的姓名],拥有[X年]年的Java后端开发经验[^1]。在我的职业生涯中,我一直专注于企业级应用的设计与实现,熟悉Spring Boot/Spring Cloud等主流框架以及微服务架构的相关技术栈[^4]。 我的核心技能包括但不限于: - **编程能力**:精通Java语言及其生态系统,具备扎实的数据结构和算法功底; - **框架掌握**:熟练运用Spring全家桶(如Spring MVC, Spring Data JPA),并能快速上手MyBatis等ORM工具; - **数据库管理**:擅长关系型数据库MySQL/PostgreSQL的操作优化,同时也了解NoSQL数据库Redis/MongoDB的应用场景; - **设计模式**:深入理解面向对象原则及常用设计模式(例如工厂模式[^2]、代理模式等),能够在实际项目中灵活运用以提升代码质量; 除此之外,在参与多个复杂系统的构建过程中,我还积累了丰富的实践经验——比如如何高效完成前后端分离下的接口对接工作,或者针对高并发请求制定合理的缓存策略等等[^3]。更重要的是,我始终保持学习新知的热情,紧跟前沿趋势不断精进自己的技术水平。 希望未来有机会加入贵公司团队,贡献自己的一份力量! --- #### 注意事项 上述模板仅为参考,请根据个人经历调整具体内容使其更具个性化特征。 ```java // 静态代理模式示例代码如下所示: interface Service { void execute(); } class RealService implements Service { @Override public void execute() { System.out.println("Real service is executing..."); } } class ProxyService implements Service { private final Service realService; public ProxyService(Service realService) { this.realService = realService; } @Override public void execute() { beforeExecution(); // 执行前逻辑 realService.execute(); // 调用真实的服务方法 afterExecution(); // 执行后逻辑 } private void beforeExecution() { System.out.println("Before execution logic"); } private void afterExecution() { System.out.println("After execution logic"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peter123123123123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值