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

news2024/11/15 8:33:56

在这里插入图片描述

🔭 嗨,您好 👋 我是 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,订阅一波不再迷路

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【方法】PDF可以转换成Word文档吗?如何操作?

很多人喜欢在工作中使用PDF&#xff0c;因为PDF格式可以准确地保留文档的原始格式&#xff0c;比如字体、图像、布局和颜色等。 但如果编辑文档的话&#xff0c;PDF还是没有Word文档方便。那可以将PDF转换成Word格式&#xff0c;再来编辑吗&#xff1f;如何操作呢&#xff1f;…

HttpRunner自动化工具之实现参数化传递

参数化实现及重复执行 参数化测试&#xff1a;在接口测试中&#xff0c;为了实现不同组数据对同一个功能模块进行测试&#xff0c;需要准备多组测试数据对模块进行测试的过程。 在httprunner中可以通过如下方式实现参数化&#xff1a; 1、在YAML/JSON 中直接指定参数列表 2、…

用Apache Echarts展示数据

目录 1.后端代码 1.1 实体类&#xff1a; 1.2 SQL语句&#xff1a; 2.前端代码 2.1 安装 Apach Echarts安装包&#xff1a; 2.2 查找数据并赋值给Echarts 思路&#xff1a;后端查到数据&#xff0c;包装为map&#xff0c;map里有日期和每日就诊人数&#xff0c;返回给前端…

[操作系统] 进程的详细认识----从概念到调度

目录 前言 一.进程的概念 二.进程和程序之间的关系 2.1二者的关系 2.2资源的占用 三.进程的任务 四.进程的管理 五.PCB中的信息 5.1pid进程标识 5.2内存指针 5.3文件描述符表 六.进程的调度 6.1CPU的简单认识 6.2调度的方式 6.3PCB中调度相关属性 七.进程的…

【计算机网络】网络层协议 -- IP协议

文章目录 1. 网络层做了什么事2. IP协议的简介3. IP协议格式4. 分片与组装5. 网段划分6. 特殊的IP地址7. IP地址的数量限制8. 私网IP地址和公网IP地址9. 路由 1. 网络层做了什么事 保证数据可靠地从一台主机到另一台主机 当双方在进行基于TCP的网络通信时&#xff0c;要保证将数…

redis高级篇2 springboot+redis+bloomfilter实现过滤案例

一 bloomfilter的作用 1.1 作用 Bloomfilter&#xff1a;默认是有0组成bit数组和hash函数构成的数据结构&#xff0c;用来判断在海量数据中是否存在某个元素。 应用案例&#xff1a;解决缓存穿透。Bloomfilter放在redis前面&#xff0c;如果查询bf中没有则直接返回&#xff0…

opencv中轮廓相关属性

一、介绍 findContours() &#xff1a;The function retrieves contours from the binary image。 二、代码 void main() {Mat src imread("match00.bmp", IMREAD_GRAYSCALE);Mat mask;threshold(src, mask, 128, 255, cv::THRESH_BINARY_INV);Mat element cv::g…

tcl学习之路(一)(Vivado与Tcl)

学习第一步&#xff1a;安装tcl编译软件 点击这里进入activestate的官网&#xff0c;下载你喜欢的操作系统所需的安装包。这里我下载的是windows下的安装包。一步一步安装即可。   那么&#xff0c;安装后&#xff0c;我们可以在开始的菜单栏处看到三个应用程序。      …

Python爬取微博相册, 批量下载

xpath插件解析到所有图片的url地址 xpath下载地址: https://www.crxsoso.com/webstore/detail/hgimnogjllphhhkhlmebbmlgjoejdpjl 快捷键: CtrlShiftX 不会xpath语法可以看这里: https://www.w3school.com.cn/xpath/xpath_syntax.asp //div[class"woo-box-item-inlineBl…

P1090 [NOIP2004 提高组] 合并果子

题目描述 在一个果园里&#xff0c;多多已经将所有的果子打了下来&#xff0c;而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并&#xff0c;多多可以把两堆果子合并到一起&#xff0c;消耗的体力等于两堆果子的重量之和。可以看出&#xff0…

图解TCP 三次握手和四次挥手的高频面试题(2023最新版)

大家好&#xff0c;最近重新整理了一版 TCP 三次握手和四次挥手的面试题&#xff08;2023最新版&#xff09;。 ----- 任 TCP 虐我千百遍&#xff0c;我仍待 TCP 如初恋。 巨巨巨巨长的提纲&#xff0c;发车&#xff01;发车&#xff01; img TCP 基本认识 TCP 头格式有哪些…

[VRTK4.0]获取指针,并提供有效无效位置

学习目标&#xff1a; 演示如何将场景中的游戏对象设置为弯曲指针的无效目标。 流程&#xff1a; 紧接上篇&#xff0c;我们已经创建了一个曲线&#xff0c;并且使用 OpenXR 指针姿势来确保指针方向始终与 OpenXR 控制器的正确方向匹配。 接下来我们要实现如何将场景中的游戏对…

web-6-深入理解JSP:探索其核心概念和特性

JSP 今日目标&#xff1a; 理解 JSP 及 JSP 原理 能在 JSP中使用 EL表达式 和 JSTL标签 1&#xff0c;JSP 概述 JSP&#xff08;全称&#xff1a;Java Server Pages&#xff09;&#xff1a;Java 服务端页面。是一种动态的网页技术&#xff0c;其中既可以定义 HTML、JS、CSS…

计算机视觉:卷积层的参数量是多少?

本文重点 卷积核的参数量是卷积神经网络中一个重要的概念,它决定了网络的复杂度和计算量。在深度学习中,卷积操作是一种常用的操作,用于提取图像、语音等数据中的特征。卷积神经网络的优势点在于稀疏连接和权值共享,这使得卷积核的参数相较于传统的神经网络要少很多。 举例…

leetcode每日一题Day2——344. 反转字符串

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f433;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; …

WEB:mfw

背景知识 Git泄露 Githack使用 命令执行漏洞 题目 这里页面里有Git&#xff0c;猜测是Git泄露 先用dirsearch扫一下 确实存在.git目录&#xff0c;可以尝试访问一下 使用Githack来下载并恢复.git文件 这里记得使用的时候关闭杀毒软件 结果会自动保存 点进去先看一下flag这个…

Flyway——修改表名称与序列名称

文章目录 前言脚本修改表名称修改序列 前言 开发中一次偶然的机会&#xff0c;Oracle 12c 更换为 11g &#xff0c;需要对表名称的长度和序列长度做限制要求。 11g相对12c而言&#xff0c;表名称与序列名称的长度&#xff0c;不能超过30个字符。 在开发中做了更改&#xff0c;…

fixed-视频倍速

首先fn12打开开发者模式 然后进入console控制台 document.getElementsByTagName(“video”)[0].playbackRate 3 数字3 就是多少倍速 可以替换想要的倍速 直接快进到 最后 let video document.getElementsByTagName(‘video’) for (let i0; i<video.length; i) { video[…

Linux虚拟机安装tomcat(图文详解)

目录 第一章、xshell工具和xftp的使用1.1&#xff09;xshell下载与安装1.2&#xff09;xshell连接1.3&#xff09;xftp下载安装和连接 第二章、安装tomcat1.1&#xff09;关闭防火墙&#xff0c;传输tomcat压缩包到Linux虚拟机12&#xff09;启动tomcat 第一章、xshell工具和xf…

韦东山Linux驱动入门实验班(5)LED驱动---驱动分层和分离,平台总线模型

前言 &#xff08;1&#xff09;前面已经已经详细介绍了LED驱动如何进行编写的代码。如果韦东山Linux驱动入门实验班&#xff08;4&#xff09;LED驱动已经看懂了&#xff0c;驱动入门实验班后面的那些模块实验&#xff0c;其实和单片机操作差不太多了。我就不再浪费时间进行讲…