自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

静幽水

大道至简,知易行难。

  • 博客(113)
  • 收藏
  • 关注

原创 组里来了一个实习生,一行代码引发了一个惨案

后来,对于他的代码,我们都觉得比较简单,代码review的时候,都在review其他同时的,比较复杂的代码逻辑,也就忽视了他的代码,但往往你最轻视的地方,就是最容易出问题的地方。它实现了List接口,但是并没有实现List接口中的一些修改集合结构的方法,如add()、remove()等。事情是这样的,最近组里来了一个实习生,因为项目工作量大,人力比较紧张,所以就分配了一个简单的小需求给他,给一个接口增加一个出参,返回匹配到的规则编码列表,规则编码是数字类型,当没有匹配到规则时,就返回默认规则编码。

2023-09-19 22:47:10 243

原创 8种结构型设计模式对比

适配器模式是一种结构型设计模式,它用于将不兼容的接口转换为可兼容的接口。适配器模式允许两个不兼容的类能够协同工作,通过将一个类的接口转换为另一个类所期望的接口形式。这样就能够在不修改现有代码的情况下,使两个不兼容的类能够相互协作。桥接模式是一种结构型设计模式,它将抽象部分和实现部分分离,使它们可以独立地变化。通过将抽象和实现分离,桥接模式可以使两者能够独立地进行扩展。这种模式的核心目标是通过解耦抽象和实现,来使它们能够相互独立地变化。

2023-09-19 22:46:14 526

原创 玩转设计模式:一文看懂创建型设计模式的差异与应用

原型模式是一种创建型模式,它通过复制现有对象来创建新对象,避免了重复的初始化过程。核心思想是通过克隆方法来复制现有的对象,以创建新的对象。原型模式适用于需要创建大量相似对象,但是对象的创建过程比较耗时或昂贵的情况。

2023-09-17 22:33:04 212

原创 轻松打造自己的ChatGPT应用,AI应用,源码附赠

大家好,我是静幽水,目前是一名大厂全栈工程师,练习时长两年,擅长Java后端,Vue前端,小程序编程,Python编程,ChatGPT 提示词等技术。现在正在系统的进行学习,扩展自己技术的广度和深度,我会分享一些相关的知识干货,感兴趣的话就关注我吧,希望对你有所帮助。接近半个月没有更新了,原因是我这半个月都在开发一款应用,关注我的老粉应该记得,我前两个月发布了一篇打造ChatGPT聊天小程序的文章,并将源码全部开源了。这次,我带来了更加完善的AI应用。没有看过我那篇文章的小伙伴,可以先看下这篇文章。

2023-09-12 22:46:01 270

原创 利用ChatGPT学习编程,让你成为新时代程序员

提问,也被称为提示词(Prompt),ChatGPT火爆之后,更是催生出了“提示词工程师”这个岗位,而且是供不应求,学好提示词,可以更好的使用ChatGPT,将其调试为各种角色,利用在自己的工作和学习中,将会大大提升效率。第二段我们对整个面试的过程做了设定,告诉它需要对计算机相关的问题进行回答,同时了解面试流程,知道如何进行提问,如何对求职者的回答进行打分,当求职者回答对时,要进行追问,当求职者回答错了的时候,就再换一个简单点的面试题,如此循环10次。我们日常遇到的各种学习上面的问题,都可以对它询问。

2023-07-23 21:07:39 1566

原创 软件设计六大基本原则

开放封闭原则是架构设计中的重要原则,通过对已有代码的扩展而不是修改来实现新功能。它可以通过接口和抽象类来实现代码的模块化和解耦,使代码具有良好的可扩展性和可维护性。在实践中,我们可以借鉴优秀的开源框架的设计,通过提供扩展点和插件机制来实现开放封闭原则。单一职责原则是架构设计中的重要原则,要求一个类只负责一个单一的职责或功能。这样的设计使得代码更加清晰、可维护和可扩展。通过拆分类,在每个类中实现单一的职责,可以提高代码的内聚性和松耦合性,从而提高代码的质量和可测试性。

2023-07-19 22:48:40 1462

原创 软件架构演进过程与微服务设计中的领域驱动设计(DDD)

软件架构的演进是一个不断改进和解决问题的过程。从传统架构到面向服务架构(SOA),再到微服务架构,每个阶段都带来了新的技术和解决方案。而在微服务架构中,领域驱动设计(DDD)起着至关重要的作用,它能够提高系统的可扩展性、可维护性和可理解性。本文将介绍软件架构演进过程中的各个阶段,以及微服务设计中使用DDD的优势和应用。

2023-07-18 23:32:42 430

原创 让Python助你开挂,工作效率提升1000%

你是不是感觉现在的工作非常无聊,每天有大量的重复性的工作要做,比如在我的工作中,就有很多类似的动作。每天早上要看我们DevOps流水线跑出的结果,查看各个微服务中的重复代码率是多少了,有没有增加,CleanCode中的各项指标,代码的UT覆盖率,引入的开源软件有没有出现漏洞等等数据,然后将各个微服务的这些数据统计到一个表格中,然后发送一个邮件给全组的成员,让每一个微服务的开发负责人去处理。这是一件非常繁琐且无聊的工作,并且对于自身的成长没有一点帮助。

2023-07-17 23:16:19 140

原创 福利!打造自己的ChatGPT聊天小程序,前后端代码全开源

本文分享一个我前几个月实现的一个智能聊天系统小项目,包含了java后端,微信小程序端,web页面端三个子工程。代码已经全部开源,地址放在了文末。

2023-07-16 02:12:41 3645

原创 深度剖析4款Python爬虫框架,构建你的数据收割机!

例如,我们可以使用Requests-HTML框架爬取一个动态加载的社交媒体页面,提取出用户的信息和发布的内容,以便进行数据分析和用户行为研究。Requests-HTML框架是一个基于Requests库和pyquery库的Python爬虫框架,它封装了网页请求和解析的功能,提供了类似于jQuery的选择器进行元素的提取。BeautifulSoup框架是一个基于HTML和XML解析库的Python爬虫框架,它能够解析网页的结构,并提供简洁易用的API进行元素的提取。

2023-07-13 23:33:38 1318

原创 超全计算机、程序员、面试资料、八股文、合集分享,包含前端后端中间件等各个领域

​资料涉及领域包括jvm,java,zookeeper,redis,spring,mysql,mybaits,nginx,dubbo,tomcat,rabbitMq,kafka,mongoDB,Linux,分布式,并发编程,设计模式,多线程,计算机网络,操作系统,数据结构,以及前端等。

2023-07-10 23:23:51 116

原创 惊!ChatGPT处理文章仅需一秒钟,提取大纲、重写不在话下!

在上篇文章中,我们实现了批量抓取到微信公众号文章的链接地址,那么这篇文章将继续为大家介绍,如何根据链接爬取到文章内容,并且利用chantGPT对文章进行处理。我们读取文件,将里面的link传入到list中,tolist()方法是将pandas中的Series类型的数据转换成list类型。返回两个列表,url列表和发布时间列表。

2023-07-09 13:42:52 2482

原创 numpy与python版本不匹配-ImportError: Unable to import required dependencies: numpy

在这里,你能够看到所有python库和python版本的对应关系。如果依旧没有解决,你可以看下你的pip下和conda下是不是都有Numpy,通过执行pip list 和conda list,如果是的话,需要将pip种的删除,pip uninstall numpy.这个报错是因为numpy和panda版本不匹配导致的,需要卸载后重新安装,注意,需要先安装numpy,再安装pandas。如上信息所示,我的python版本是3.7,Numpy版本是1.21.6,他们的版本不匹配,导致运行报错。

2023-07-09 00:58:57 7314 3

原创 爬虫爬取公众号文章

自从chatGPT出现后,对于文本处理的能力直接上升了一个维度。在这之前,我们爬取到网络上的文本内容之后,都需要写一个文本清理的程序,对文本进行清洗,而现在,有了chatGPT的加持,我们只需要几秒,就可以很方便对所有类型,所有格式的文本内容,完成清洗,去除那些html标签等。对于清洗后的文章,我们仍然可以做很多事情,比如,提取核心观点,文章改写等操作,使用chatGPT都可以很轻松的解决。

2023-07-08 19:18:30 3278 1

原创 写好Java代码的30条建议(一)

1.命名规范:使用有意义的变量和方法名,遵循驼峰命名规范。2.代码格式化:保持代码的缩进和格式一致性,增加可读性。3.注释规范:用适当的注释解释代码的作用和实现思路。4.避免魔法数字:使用常量来代替代码中的魔法数字,增加可维护性。5.单一职责原则:每个类和方法应该只有一个明确的责任。6.方法长度控制:避免过长的方法,提取出相关的操作为独立方法。7.异常处理:适当处理异常,不要捕获异常却不处理。8.面向接口编程:使用接口来实现解耦和扩展性。9.代码复用:尽量重用已有的代码,减少重复工作。

2023-07-05 23:51:59 1059

原创 微服务设计为什么要使用DDD

软件架构模式经历了从单机、集中式到分布式微服务架构的演进,每个阶段都解决了对应阶段的问题。随着业务的发展和规模的增大,单机架构无法满足需求,集中式架构通过拆分模块解决了扩展性和性能的问题。然而,集中式架构也存在单点故障和通信成本高的问题,分布式微服务架构通过解耦应用和提高可扩展性解决了这些问题。微服务设计与拆分的难题在于确定业务边界和应用边界的位置,领域驱动设计提供了解决方案。通过与业务专家合作,从业务视角出发,划定业务边界并设计微服务,可以保持高内聚、低耦合的设计原则。

2023-07-04 00:33:11 567

原创 Python实现Excel的批量合并和拆分操作

通过使用Python编程语言和相关扩展库,我们可以实现对Excel文件的批量合并和拆分操作。合并操作可以将多个Excel文件整合成一个文件,便于后续处理和分析;而拆分操作则可以根据特定需求将文件内容分成多个文件,方便分别处理和管理。使用Python进行Excel的自动化处理,不仅可以提高工作效率,还可以减少重复劳动,让操作变得简单自动化。希望以上内容对您有所帮助。

2023-07-03 01:11:28 2204

原创 想面试Java后端,至少这些你都要会吧

跨越Java后端面试的最重要关卡,就是对技术知识的准备。但难点在于,后端技术栈的内容繁杂,你需要掌握一个广泛的领域。

2023-06-05 21:40:20 400

原创 如何用Python进行数据分析

数据分析是当前非常热门的领域之一,而Python作为一门广泛应用于数据科学和机器学习的语言,自然成为了一款非常流行的数据分析工具。本篇博客将为大家介绍如何用Python进行数据分析,并且会结合我们自己的实践来进行详细的讲解。

2023-06-04 17:39:36 998

原创 如何用Python实现一个简单的爬虫?

简单来说,爬虫就是一种自动化程序,通过网络协议来获取特定网站的信息,例如图片、文字、视频等等。这些信息可以是公开数据,也可以是需要用户授权的私有数据。通过数据的自动下载和处理,我们可以轻易地获取大规模数据,从而进行各种分析和挖掘,这在当今大数据时代具有极其广泛的应用。我们首先需要选择目标网站。在选择时,我们需考虑目标网站的网络限制,例如反爬虫机制、频率限制等。对于一些比较简单的网站,例如豆瓣电影,我们可以直接通过Python中的requests库访问。以上就是如何用Python实现一个简单的爬虫的全部内容。

2023-06-04 17:16:43 2409

原创 【0基础入门Python】你不得不看的Python学习方法

以下是一些值得推荐的。《Python Cookbook》:这是一本适合有一定 Python 基础的读者阅读的 Python 实用教材,书中提供了大量的 Python 编程技巧和实用代码,是 Python 开发者必备的参考书之一。《Python编程:从入门到实践》:这是一本非常流行的Python入门书籍,可以帮助你逐步掌握Python的基础知识。找到适合自己的学习方式:有的人喜欢看视频教程,有的人喜欢看书籍,有的人喜欢上课听讲解,你可以尝试不同的学习方式,找到适合自己的学习方式,有效提高学习效率。

2023-05-26 15:18:36 716

原创 RESTful API介绍

使用HTTP缓存机制不仅可以减轻服务器的压力,同时也可以提高客户端的访问速度,改善API的性能。ETag机制:ETag是一个资源的唯一标识,可以在服务器端记录资源的ETag值,并在客户端请求时与客户端发送相应的ETag值进行比较,如果一致则表示资源未被修改,可以直接使用缓存。ETag机制:ETag是一个资源的唯一标识,可以在服务器端记录资源的ETag值,并在客户端请求时与客户端发送相应的ETag值进行比较,如果一致则表示资源未被修改,可以直接使用缓存。

2023-05-26 14:58:30 2506

原创 我用gpt帮我写了一篇【为什么程序员都在使用ubuntu】居然真的火了

最后,关于那篇文案的题目,当然也是我让ChatGPT帮我起的一个自带流量的标题:《为什么程序员都在使用ubuntu》,这个题目更是惹怒了一部分小伙伴,直接说不要代表我哈哈,不能随便就代表别人,我也是欲哭无泪,原来自带流量的标题,就是这种存在很大争议的标题呀,不过确实,它带来了很多流量。但在Ubuntu上,你可以轻松升级系统,而不会丢失任何数据或软件。151人参与了投票,可以看出,windows 用户超过了三分之一,其次是mac和ubuntu,小伙伴们,你是使用的什么操作系统呢,可以在评论区留言。

2023-04-22 23:19:06 652 1

原创 SpringBoot集成WebSocket实战二:解决@Autowired为null

SpringBoot集成WebSocket实战二:解决@Autowired为null在上一篇中已经实现了服务端每隔几秒就会主动推送实时数据给前端的功能,但是现在又有一个问题出现了,由于使用了定时任务,定义了每10秒推送一次,那么也就是说,用户在刚打开网页的时候,会出现0-10秒的等待,才能够获取到数据,例如上一次推送数据刚刚结束,又有一个新的用户打开的网页建立了websocket连接,他的前端页面是没有数据的,需要等到下一次推送才会得到数据,这显然是不合理的,用户体验也会下降.解决这个问题也很简单,不就

2020-12-17 16:36:32 1692 3

原创 SpringBoot集成WebSocket实战一

SpringBoot集成WebSocket实战一1.什么是WebSocket2.为什么要使用WebSocket3.SpringBoot整合WebSocket4. 服务器主动推送数据给前端1.什么是WebSocket什么是websocket,百度百科的解释是:"websocket是一种在单个TCP连接上进行全双工通讯的协议,websocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,在websocket中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的

2020-12-17 16:30:09 3910 4

原创 Nginx部署单页面应用如何进行配置

Nginx部署单页面应用如何进行配置在前后分离的项目中,通常部署的时候也会分开部署,这样便于管理。前端项目一般使用angular,vue或者react来编写,使用build命名来编译,编译之后就是只有一个index.html,一个css文件,若干js文件和一些图片。如图是我的angular项目编译之后的目录结构:把编译好的文件放到一个目录下,如/home/ubuntu/html下,然后就可以...

2020-04-30 16:25:19 3104

原创 SQL优化的十条原则

SQL优化的十条原则1、尽量全值匹配2、最佳左前缀原则3、不在索引列上做任何操作4、范围条件放最后5、覆盖索引尽量用6、不等于要慎用7、Null/Not有影响8、Like查询要当心9、字符类型加引号10、OR改union效率高首先创建如下数据表供测试使用CREATE TABLE staffs(id int primary key auto_increment,name varchar(2...

2020-02-28 20:45:41 1115

原创 图论算法总结一

图论算法无向图深度优先搜索算法寻找路径广度优先搜索连通分量有向图环和有向无环图有向图基于深度优先搜索的顶点排序拓扑排序有向图的强连通性传递闭包最小生成树加权无向图的数据结构Prim算法Kruskal算法无向图无向图APIpublic class Graph{ Graph(int V);//构造一个含有V个顶点但不含有边的图 Graph(In in);//从标准输入读入一幅图,先是顶...

2020-02-27 19:58:02 1419

原创 ConcurentHashMap原理分析

集合安全的两种方法,ConcurentHashMap和Collections.synchronizedMap()jdk1.8的改进取消了segment分段增加了红黑树,如果链表的长度大于8,并且node数组的长度大于64,就会将当前链表转化为红黑树。如果链表的长度又小于8,就会将红黑树转化为链表。put方法public V put(K key, V value) { ...

2020-02-18 17:54:47 2655 1

转载 @Component, @Repository, @Service的区别

@Component, @Repository, @Service的区别官网引用引用spring的官方文档中的一段描述:在Spring2.0之前的版本中,@Repository注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即dao对象),并支持自动处理数据库操作产生的异常在Spring2.5版本中,引入了更多的Spring类注解:@Component,@Servi...

2020-02-16 21:13:27 248

原创 位运算实现权限控制

我们知道,在权限控制中,每个用户会有很多中权限,如果每种权限用一个boolean型来表示的话,计算起来会很复杂,运行速度也会变慢,这里介绍一种位运算来提高效率。加入用户可以拥有四种权限,分别为插入删除更改和查询,通常我们会怎么做呢,会定义四个布尔类型的状态来维护这四种权限,或者使用四个int型,用0和1来表示是否拥有某种权限,每个用户的多种权限保存到一个列表中,无疑这样做可以,但是非常麻烦。我...

2020-02-16 20:17:23 1064

原创 深入理解AQS实现原理

AQS,全名AbstractQueuedSynchronizer,从名字中可以看出,这是一个抽象类,内部维护了一个同步队列,事实正是如此。在AQS中最重要的是一个state变量。private volatile int state;这个state的意思由继承这个类的子类来决定,用来表示锁的状态,如在ReentrantLock中可以使用0表示没有线程持有该锁,1表示该锁已经被其他线程持有。当然在可...

2020-02-16 19:27:07 3824 1

原创 动态代理的几种实现方式及优缺点

动态代理:是使用反射和字节码,在运行期间创建指定接口或类的子类以及它的实例对象的一项技术,通过这个技术可以对代码进行无侵入式的增强。源文件生成实例对象的过程如下:关于动态代理的底层原理,在另一篇文章中已经介绍过了。 你必须要学会的动态代理java的动态代理技术的实现主要有两种方式:JDK原生动态代理CGLIB动态代理JDK原生动态代理:使用到一个类Proxy和一个接口Invoc...

2020-02-13 17:32:05 6400

原创 你必须要学会的动态代理

你必须要学会的动态代理问题背景有何问题解决方法模式讲解新的问题动态代理的原理相关拓展问题背景话说小强作为一名资深的单身狗,终于也迎来了自己的春天,在他的穷追不舍下,同事小丽终于同意给他一次机会,给他一个月的考察期,如果在这一个月内表现良好,就正式和他交往,否则就不要再纠缠她。别看小强母胎单身到现在,对女生的喜好可是没少研究,也知道追女生要送礼物,女生都喜欢化妆品,于是决定先送小丽一支口红,小...

2020-02-12 20:09:55 1075

原创 看了这篇文章你将彻底了解组合模式

看了这篇你将彻底了解组合模式问题背景:有何问题:解决方案:模式讲解:新的问题:相关扩展:问题背景:在上一篇观察者模式的文章中,IT公司老板通过观察者模式和程序员小强和小华实现了通信,便于通知他们加班,还可以单独通知不同的内容,例如通知小强加班,通知小华去出差。但随着公司的规模慢慢变大,公司从只有两个程序员和一个秘书的公司成长为一个拥有研发部和市场部两个部门,十几位员工的公司。但这就导致了之前的...

2020-01-05 17:37:28 229

原创 听说你还不会写观察者模式?一文帮你搞定!

观察者模式问题背景:有何问题:解决方法:模式讲解:新的问题:相关扩展:模式变形:问题背景:书接上回,话说程序员小强成功进入一家公司,并且老板也信守承诺给他分配了一个女朋友小美,老板这样做除了能让小强每天安心写代码之外,还有另外两个意图,第一就是小美是安插在小强身边的眼线,负责监督小强的工作,第二个也是最重要的目的是通过小美可以把公司重要的通知传递给小强。如下是过程示意图以前我们是怎么用程序...

2019-12-12 15:51:06 391 1

原创 女朋友:你能给我讲讲单例模式吗?

女朋友:你能给我讲讲单例模式吗?问题背景:有何问题:解决方法:模式讲解:新的问题:相关扩展:问题背景:某公司老板在招程序员时承诺帮助解决单身问题,给程序员分配一个女朋友,于是单身的小强毫不犹豫就去应聘了,并被顺利录用。那么我们怎么用代码来模拟一下呢?首先定义一个女朋友的类,拥有两个属性,姓名和年龄:public class GirlFriend { private String na...

2019-12-09 13:37:38 285

原创 设计模式课程总结一

设计模式课程总结一什么是设计模式外观模式(Facade)适配器模式(Adapter)单例模式(Singleton)观察者模式(Observer)装饰模式(Decorator)代理模式(Proxy)命令模式(Command)模板方法模式(Template Method)迭代器模式(Iterator)状态模式(State)策略模式(Strategy)组合模式(Composite)桥接模式(Bridge...

2019-12-06 18:28:24 1375

原创 Linux课程总结

Linux课程总结一、认识Linux二、linux系统硬件要求三、FirewallD防火墙四、文件五、目录结构5.1文本内容显示5.2文本内容处理5.3 文件和命令查找5.4系统信息显示5.5日期和时间5.6信息交流六、Shell程序预定义变量参数置换的变量变量比较数字比较逻辑测试文件操作测试符七、用户账户管理八、磁盘管理九、 RPMRPM软件包管理十、权限和所有者权限设置更改文件和目录所有者十一...

2019-12-06 18:25:50 3030

原创 软件架构从单体到微服务的演化

软件架构从单体到微服务的演化什么是软件架构软件架构的演化单体架构分层架构面向服务架构微服务架构风格什么是微服务架构微服务架构的特点微服务架构的核心模式微服务架构的实现总结什么是软件架构关于软件架构的定义主要分为两大派别:决策派和组成派决策派:架构是一系列重要决策的集合,包括软件的组织,构成系统的结构要素及其接口的选择,元素在协作中表现的行为软件架构即一系列重要的设计决策,这些决策上的失...

2019-11-20 20:20:12 719

空空如也

空空如也

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

TA关注的人

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