CSDN 一周年创作纪念日(PS:vnjohn)

在这里插入图片描述

🔭 嗨,您好 👋 我是 vnjohn,在互联网企业担任 Java 开发,CSDN 优质创作者
📖 推荐专栏:Spring、MySQL、Nacos、Java,后续其他专栏会持续优化更新迭代
🌲文章所在专栏:职业成长
🤔 我当前正在学习微服务领域、云原生领域、消息中间件等架构、原理知识
💬 向我询问任何您想要的东西,ID:vnjohn
🔥觉得博主文章写的还 OK,能够帮助到您的,感谢三连支持博客🙏
😄 代词: vnjohn
⚡ 有趣的事实:音乐、跑步、电影、游戏

目录

  • 机缘
  • 收获
  • 日常
  • 成就
  • 憧憬
  • Tips

机缘

最初在学习编程中,逐渐地在磨练自身的专业、技术知识,当遇到问题时,最开始是自己一个人在哪里默默的探索,最终得到问题的解决;后面,在身份朋友推广及技术社区逐渐发展时,发现在一些技术平台上其实已经有前人帮你探索了一些问题的解决方式以及方案,才觉得自己的时间浪费了很多,不然很早就可以自身得到一些理解以及对技术知识点的触发

随着自身技术的成长以及在工作中的积累,最终在闲暇时间也想慢慢的把自己的一些学习笔记以及实战经验通过文章的方式告诫给同行们,以防于各位同行伙伴们会入坑

自身在技术平台上,也学习到了很多新的知识和解决一些技术问题的疑难杂症,想着,通过技术平台记录自身的学习旅程也可以加深大家彼此之间的交流,各自可以通过平台提出自己的见解,能够更准确的让自己去定位思考问题思考新的一些技术方案

收获

在刚开始工作时,并没有意识到经营自己的技术社区平台是一种很重要的事情,对于编程来说,这是我一直想研究下去的课题以及向前推进的一份职业

最开始之初,部门领导希望我们能够拥有一个自己的个人技术博客网站,因此,我立马就行动了起来,最终,我使用 vnjohn 作为我的域名 ID,使用了 https://www.vnjohn.com 作为我作为一名技术博客创作者的初笔,在入驻 CSDN 之前,我一直在努力经营自己的技术博客网站,在公司闲暇期间,一共创作了将近 50 篇博文

在后来离开这家公司以后,进入新的公司,工作开始繁忙了起来,个人博客也就没有继续去更新了,随着文章量的增多,个人的低配服务器也对博客的访问速度下降了很多,在这家公司时,主要处理的都是框架组件内部以及一些高流量问题,想着应该会有更多人会在工作中,遇到这样的问题需要及时的去解决,于是乎,我选择了 CSDN 技术平台,作为创作者身份的自己继续向前推进的平台,在入驻之初,创作了:EasyExcel 百万级别数据高效率导入/导出
文章,后面也收到了大量粉丝的一些疑问,通过自身的理解帮助到了它们去解决,同时,也一直在完善自己的博客内容,希望能够直接通过阅读技术博客就能够直接在工作中立马应用起来,减少大家一些排错的时间,用更多的时间去提升自身的专业能力

在这里插入图片描述
累积到现在,一直都在学习框架底层的原理知识以及一些中间件使用、架构设计,一直在输出各个领域的专业技术知识以及技术实战博文「Spring、Nacos、MySQL、JVM、业务设计」

所有专栏的文章,都是博主一字字输出,实践操作积累起来的,都是真才实学,能够运用自如~

在这里插入图片描述
每个专栏中的文章都得到了大家的正向反馈,收获了大量的收藏、赞,感谢支持!

在作为一个创作者,通过技术平台认识了很多志同道合、优秀的同行,从他们身上能够学习到很多东西,更加能够激励自己逐步向前,向他们看齐

日常

博文的创作,在我个人定位中,就是一种兴趣,不仅仅能够帮助到自身的技术学习、精进,更加能够充分利用好自己的业余时间,在个人有限的精力下,当心血来潮时,突然想到非常好的 idea 去解决一个很难的技术问题时,就很想通过博文的方式给他分享出来

好比说,工作之余,可以去外面看看海、爬爬山,亲近大自然,能够帮助到你开阔更多的视野,通过创作,不会让你感觉到很迷茫,不会让你在空闲时间想这想那的,既然,专注于一件事情,就应该先把一件事情做好,而不是觉得累了就选择逃避

愿你我都能够在寒冬中相互取暖,互相成长,只有不断积累、沉淀自己,后面有机会自然就会破冰而行!

成就

所有的代码基座,前人的技术成果,都是在基于设计模式设计的

在技术平台上看过很多大牛写的东西,它们都会将所有技术业务或者产品需求通过可扩展、高内聚低耦合演变出来,从中让我学到了很多,因此,我便有了对旧有代码进行重构的想法,用前人沉淀下的设计来改造整个工作中会运用到技术方案

基于设计模式改造短信网关服务实战篇(设计思想、方案呈现、源码)

在这里插入图片描述

package org.vnjohn.sms.service;

import org.vnjohn.sms.entity.AbstractSMSSendSms;
import org.vnjohn.sms.entity.AbstractSMSSign;
import org.vnjohn.sms.entity.AbstractSMSTemplate;
import org.vnjohn.sms.response.ApplyStatusResponse;

/**
 * 抽象短信服务公共能力
 *
 * @author vnjohn
 * @since 2023/3/17
 */
public abstract class AbstractSMSService {
    /**
     * 申请签名
     *
     * @param applySmsSign
     * @param <T>
     */
    public abstract <T extends AbstractSMSSign> String applySign(AbstractSMSSign applySmsSign);

    /**
     * 更新签名
     *
     * @param modifySmsSign
     * @param <T>
     */
    public <T extends AbstractSMSSign> String modifySign(AbstractSMSSign modifySmsSign) {
        return null;
    }

    /**
     * 删除签名
     *
     * @param removeSmsSign
     * @param <T>
     */
    public <T extends AbstractSMSSign> String removeSign(AbstractSMSSign removeSmsSign) {
        return null;
    }

    /**
     * 查询签名审核状态
     *
     * @param statusSmsSign
     * @param <T>
     * @return 返回审核是否成功信息,返回审核失败的原因
     */
    public <T extends AbstractSMSSign> ApplyStatusResponse querySignApplyStatus(AbstractSMSSign statusSmsSign) {
        return null;
    }

    /**
     * 申请模版
     *
     * @param applySmsTemplate
     * @param <T>
     * @return 返回模版唯一标识
     */
    public abstract <T extends AbstractSMSTemplate> String applyTemplate(AbstractSMSTemplate applySmsTemplate);

    /**
     * 更新模版
     *
     * @param modifySmsTemplate
     * @param <T>
     */
    public <T extends AbstractSMSTemplate> String modifyTemplate(AbstractSMSTemplate modifySmsTemplate) {
        return null;
    }

    /**
     * 删除模版
     *
     * @param removeSmsTemplate
     * @param <T>
     */
    public <T extends AbstractSMSTemplate> String removeTemplate(AbstractSMSTemplate removeSmsTemplate) {
        return null;
    }

    /**
     * 查询模版审核状态
     *
     * @param statusSmsTemplate
     * @param <T>
     * @return 返回审核是否成功信息,返回审核失败的原因
     */
    public <T extends AbstractSMSTemplate> ApplyStatusResponse queryTemplateApplyStatus(AbstractSMSTemplate statusSmsTemplate) {
        return null;
    }

    /**
     * 发送短信
     *
     * @param sendSms
     * @param <T>
     * @return
     */
    public abstract <T extends AbstractSMSSendSms> String sendSms(AbstractSMSSendSms sendSms);

    /**
     * 通过第三方服务商返回的编码进行消息处理
     *
     * @param code
     * @param message
     * @return
     */
    public abstract void processMessageByCode(String code, String message);

}

憧憬

后续的创作规划,主要会分为几个阶段继续向下进行

  • JUC 并发编程组件应用及原理分析、JMM 内存模型介绍、JVM 核心概念知识回顾及介绍
  • Redis 缓存中间件数据类型实战以及各大问题排忧解难
  • RocketMQ、Kafka 消息中间件集群搭建以及集群知识理论、实战操作
  • 云原生系列:Docker、K8S 组件的一系列基础知识介绍及实施
  • 业务设计、生产实战演练等等

Tips

我在 CSDN 中的一周年创作纪念日学习到了很多也成长了很多,认识了很多热🔥心好友,后面我会继续用自己的空余时间编写出更多更好的技术博文,希望能够和大家一起共同学习沟通,提升自身的技术以及创作能力!!

推荐专栏:Spring、MySQL,订阅一波不再迷路

大家的「关注❤️ + 点赞👍 + 收藏⭐」就是我创作的最大动力!谢谢大家的支持,我们下文见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/53714.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AWS——01篇(AWS入门 以及 AWS之EC2实例及简单实用)

AWS——01篇&#xff08;AWS入门 以及 AWS之EC2实例及简单实用&#xff09; 1. 前言2. 创建AWS账户3. EC23.1 启动 EC2 新实例3.1.1 入口3.1.2 设置名称 选择服务3.1.3 创建密钥对3.1.4 网络设置——安全组3.1.4.1 初始设置3.1.4.2 添加安全组规则&#xff08;开放新端口&…

Mindar.JS——实现AR图像追踪插入图片或视频

Mindar.JS使用方式 注意&#xff1a;此篇文章需要启动https才可调用相机权限 图像追踪示例 需要用到两个js库 <script src"./js/aframe.min.js"></script><script src"./js/mindar-image-aframe.prod.js"></script>下面看一下标签…

生成对抗网络DCGAN学习实践

在AI内容生成领域&#xff0c;有三种常见的AI模型技术&#xff1a;GAN、VAE、Diffusion。其中&#xff0c;Diffusion是较新的技术&#xff0c;相关资料较为稀缺。VAE通常更多用于压缩任务&#xff0c;而GAN由于其问世较早&#xff0c;相关的开源项目和科普文章也更加全面&#…

Stable Diffusion 开源模型 SDXL 1.0 发布

关于 SDXL 模型&#xff0c;之前写过两篇&#xff1a; Stable Diffusion即将发布全新版本Stable Diffusion XL 带来哪些新东西&#xff1f; 一晃四个月的时间过去了&#xff0c;Stability AI 团队终于发布了 SDXL 1.0。当然在这中间发布过几个中间版本&#xff0c;分别是 SDXL …

xshell连接liunx服务器身份验证不能选择password

ssh用户身份验证不能选择password 只能用public key的解决办法 问题现象 使用密码通过Workbench或SSH方式(例如PuTTY、Xshell、SecureCRT等)远程登录ECS实例时&#xff0c;遇到服务器禁用了密码登录方式错误. 可能原因 该问题是由于SSH服务对应配置文件/etc/ssh/sshd_config中…

4年测试“我“该何去何从?测试还是测试开发?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 4年测试&#xff…

【IDEA】idea不自动生成target

文章目录 1. 不生成target2. 仅部分文件不生成target2.1. 一般原因就是资源没有设置2.2. 配置编译src/main/java文件夹下的资源文件2.3. 清理缓存&#xff08;王炸&#xff09; 3. 参考资料 本文描述idea不生成target的几种情况以及处理方法 1. 不生成target 像下图这样根本就…

Leetcode-每日一题【剑指 Offer 56 - I. 数组中数字出现的次数】

题目 一个整型数组 nums 里除两个数字之外&#xff0c;其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)&#xff0c;空间复杂度是O(1)。 示例 1&#xff1a; 输入&#xff1a;nums [4,1,4,6]输出&#xff1a;[1,6] 或 [6,1] 示例 2&#x…

NODEJS笔记

全局对象 global/window console.log/info/warn/error/time/timeEnd process.arch/platform/version/env/kill/pid/nextTick Buffer.alloc(5,abcde) String/toString setTimeout/clearTimeout setInterval/clearInterval setImmediate/clearImmediate process.nextTi…

python包的介绍使用

python包的介绍使用 简单来说python的模块相当于文件&#xff0c;包就相当于文件夹 python包创建后会自动生成 init.py 的文件 然后可以在不同的包下面创建不同的模块 下面是引入模块里面的内容的三种方式 第一种就是引入模块&#xff0c;记住引入包是会报错的 import只能引…

【我们一起60天准备考研算法面试(大全)-第三十天 30/60】【矩阵翻转】【矩阵相乘】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

Eureka 学习笔记4:EurekaClient

版本 awsVersion ‘1.11.277’ EurekaClient 接口实现了 LookupService 接口&#xff0c;拥有唯一的实现类 DiscoveryClient 类。 LookupService 接口提供以下功能&#xff1a; 获取注册表根据应用名称获取应用根据实例 id 获取实例信息 public interface LookupService<…

【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器)

文章目录 前言一、反向迭代器封装&#xff08;reverseiterator&#xff09;1.构造函数1解引用操作.3.->运算符重载4.前置&#xff0c;后置5.前置--&#xff0c;后置--6.不等号运算符重载7.完整代码 二、rbegin&#xff08;&#xff09;以及rend&#xff08;&#xff09;1.rb…

ADSelfService Plus:保护密码安全的最佳解决方案

密码安全是当今数字时代中至关重要的话题。随着互联网和信息技术的迅速发展&#xff0c;我们的生活变得越来越数字化&#xff0c;密码已成为我们生活中不可或缺的一部分。然而&#xff0c;随着各种网络威胁和黑客攻击不断增加&#xff0c;保护我们的密码变得越来越重要。 密码安…

linux基础学习

1.day1 1、修改虚拟机的网络&#xff1b; sudo vim /etc/netplan/*.yaml sudo netplan apply 2.day2 1、VIM配置&#xff1b; 2、安装SSH&#xff0c;调用putty接入终端&#xff1b; 3、shell命令&#xff1b; *&#xff1a;匹配任意长度的字符 &#xff1f;&#xff1a;匹…

为什么VPS是中小型企业的理想选择?

对于中小型企业来说&#xff0c;选择适合自身业务需求的托管方案至关重要。在如今数字化时代&#xff0c;VPS作为一种灵活、高性能的托管解决方案&#xff0c;成为中小型企业的理想选择。作为动态VPS代理产品供应商&#xff0c;我们深知一个高质量、高性能的VPS托管服务&#x…

使用IDEA打jar包的详细图文教程

1. 点击intellij idea左上角的“File”菜单 -> Project Structure 2. 点击"Artifacts" -> 绿色的"" -> “JAR” -> Empty 3. Name栏填入自定义的名字&#xff0c;Output ditectory 选择 jar 包目标目录&#xff0c;Available Elements 里右击…

信息安全:网络安全体系 与 网络安全模型.

信息安全&#xff1a;网络安全体系 与 网络安全模型. 网络安全保障是一项复杂的系统工程&#xff0c;是安全策略、多种技术、管理方法和人员安全素质的综合。一般而言&#xff0c;网络安全体系是网络安全保障系统的最高层概念抽象&#xff0c;是由各种网络安全单元按照一定的规…

Failed to load local font resource:微信小程序加载第三方字体

加载本地字体.ttf 将ttf转换为base64格式&#xff1a;https://transfonter.org/ 步骤如下 将下载后的stylesheet.css 里的font-family属性名字改一下&#xff0c;然后引进页面里就行了&#xff0c;全局样式就放app.scss&#xff0c;单页面就引入单页面 注&#xff1a; .title…

12-3_Qt 5.9 C++开发指南_创建和使用静态链接库

第12章中的静态链接库和动态链接库介绍&#xff0c;都是以UI操作的方式进行&#xff0c;真正在实践中&#xff0c;可以参考UI操作产生的代码来实现同样的功能。 文章目录 1. 创建静态链接库1.1 创建静态链接库过程1.2 静态链接库代码1.2.1 静态链接库可视化UI设计框架1.2.2 qw…