又花了半个小时将 ChatGPT 接入了钉钉机器人
前面的文章给大家介绍了如何在个人微信中使用 ChatGPT
,但是大家都知道这种操作是有风险的,所以都让大家使用小号,今天再给大家介绍一下如何在钉钉中使用机器人来调戏 AI
。
前面的文章给大家介绍了如何在个人微信中使用 ChatGPT
,但是大家都知道这种操作是有风险的,所以都让大家使用小号,今天再给大家介绍一下如何在钉钉中使用机器人来调戏 AI
。
相信大家最近被 ChatGPT
刷屏了,其实在差不多一个月前就火过一次,不会那会好像只在程序员的圈子里面火起来了,并没有被大众认知到,不知道最近是因为什么又火起来了,而且这次搞的人尽皆知。
想着这么火的 AI
完全可以好好玩一玩呀,于是就尝试着将 ChatGPT
接入到了个人微信中,实现在微信中调戏 AI
。
用了这么多年的 SpringBoot
那么你知道什么是 SpringBoot
的 web
类型推断吗?
估计很多小伙伴都不知道,毕竟平时开发做项目的时候做的都是普通的 web
项目并不需要什么特别的了解,不过抱着学习的心态,阿粉今天带大家看一下什么是 SpringBoot
的 web
类型推断。
在日常工作中我们经常会遇到一些线上异常的情况,而且有些问题只有在线上才会出现,由于环境和数据不一样在本地和测试环境根本没办法复现,而且线上也没有输出日志,那么遇到这种情况我们往往要怎么去解决呢? 常规做法 如果实在遇到上面的情况,在本地和测试都无法复现,那最常规的做法就是拉个线上分支的版本,增加一些调试日志,然后在重新发布版本进行调试。运气好加一次日志就可以找到问题,运气不好的话可能还要发布好几次才能定位到问题。 高级做法 下载安装 arthas Arthas 是阿里开源的一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。 上面的 Arthas 这款工具的官方介绍,从中我们可以看到这个工具可以查看方法的出入参,异常以及监测方法的耗时,我们排查问题的时候最重要的就是想知道一些方法的入参和返回,有了入参和返回的数据我们就可以模拟出具体的场景从而解决线上的问题。 注意这里说的方法不单单是外层的接口方法,任何 Servi....
Spring 作为当下最火热的Java 框架,相信很多小伙伴都在使用,对于 Spring 中的 Bean 我们都知道默认是单例的,意思是说在整个 Spring 容器里面只存在一个实例,在需要的地方直接通过依赖注入或者从容器中直接获取,就可以直接使用。 测试原型 对于有些场景,我们可能需要对应的 Bean 是原型的,所谓原型就是希望每次在使用的时候获取到的是一个新的对象实例,而不是单例的,这种情况下很多小伙伴肯定会说,那还不简单,只要在对应的类上面加上 @scope 注解,将 value 设置成 Prototype 不就行了。如下所示 HelloService.java package com.example.demo.service; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; /** *....
今天是 2022 年的第一个工作日,沉浸在假期中的打工人又要开启一年的打工之路了,毕竟只有我们好好努力,老板们才能更早的换车换房。 2021 年已经结束了,这几天陆陆续续的大家都在进行年终总结,大佬们也组织了各种跨年演讲。对于我们程序员来说,写周报都感觉已经很难了,还要写年终总结,简直不要太难。 说到写周报知乎上面就有一个网友提问,程序员周报写不出来怎么办?关注的人数已经达到 24 w 了,看来这个问题已经是个很常见的问题,很多人都写不出周报,觉得一周好像做了一些事情,但是又好像啥也没做,但是确实又做了,就是说不出来。 在阿粉看来,周报写不出来主要有两个原因: 程序员都比较务实。接手的每一个需求的底层实现都基本上知道,用到的一些东西要么就是很简单的一些 CRUD,要么就是一些开源的实现,很多事情处理起来很普通,所以在写周报的时候就不会把一些鸡毛蒜皮的小事当成噱头来封装汇报,毕竟在懂行的同事和领导眼中这个都很简单,特别是在一些技术出身的领导面前,这样更是班门弄斧,完全没必要,很有可能还会让别人觉得自己在炫耀。 再一个是程序员的工作很难用一些指标去衡量。程序员的周报不可能像产品或者业务人员....
枯燥的编程中总得有些乐趣,今天我们不谈论那些高深的技能,教你几个在编程中的奇技淫巧,说不定在某些时候还能炫耀一番呢。 1、找到最大值和最小值 不使用 if else switch 和三元运算符,在给定的三元组中找到最大值和最小值:比如给定 3,14,8,在不使用 if else switch 和三元运算符的情况下找到最大值和最小值。 话不多说,我们先看代码 public static int findMax(int a, int b, int c) { int max = a; boolean b1 = (max < b) && ((max = b) > 0); b1 = (max < c) && ((max = c) > 0); return max; } public static int findMin(int a, int b, int c) { int min = a; boolean b1 = (min > b) && ((min = b) > 0); b1 = (min > c) &....
作为后端程序员如果你只觉得只要把业务代码写完,功能实现,项目上线后就万事大吉,后期的运维完全不用关心那你就大错特错了。高级的后端程序员不仅要能高效的开发,还要会高效的运维,在遇到线上问题的时候能快速响应并定位修复。 后端程序员不管在什么公司,基本上都是会以下三种情况中的一种: 开发加自主运维:公司没有专门的项目运维人员,后端程序员既做开发,又做运维; 开发加协助运维:公司有专门的项目运维人员,后端程序员以开发为主,日常协助运维; 开发加自助运维:公司有专门的自助运维工具,后端程序员兼顾开发和项目运维; 开发加自主运维 这三种情况一般也对应了不同的互联网公司,第一种是创业型的小公司,在创业型的小公司没有专业的运维人员,所以项目的开发上线完全由后端程序员自己上手,也包括后期服务的运维,往往创业型公司相关的工具和制度都不会特别完善,也不会有什么发布集成工具,基本上都是人为的手动拷贝 war 包或者 jar 上传到服务器上面,进行完全人工运维。 针对这种情况如果作为一个后端程序员不会 Linux 命令那基本上是无法胜任工作的,虽说常用的简单的命令大家可能都知道,但是当真正遇到线上问题的时候,往....
弱弱地问大家一下,你们遇到过的最烂的代码是什么样子的? 好奇的阿粉在知乎上面搜了一下,果不其然没有令人失望,这个问题被上千万的人浏览过,然后如你所见,二哥也关注了这个问题~ 阿粉最近就接手了一个遗留项目,整个项目的代码结构混乱,动不动就是一个大几千行的类文件,一个方法五六百行而且其中还充斥着各种 if-else,让人看着简直头皮发麻。 很多相似的逻辑就是整段的代码复制粘贴,没有任何封装的存在,注释什么的就更不存在了,几个类似的方法在不同的类中还互相的调用来调用去,看上去像是方法的重载,结果啥也不是。更坑人的这个服务存在很严重的性能问题,消息队列堆积严重,系统 FullGC 频繁,导致需要隔三岔五就进行重启,简直不能忍! 看了下代码的 Git 提交历史记录,发现都是一些好几年前都不知道是哪批人写的历史代码,在业内像这种情况的代码往往被称为屎山。 如果说像这样的屎山代码能正常运行并且也不需要迭代的话,那阿粉只会当它不存在,但是理想很丰满,现实却很骨干,需求总是不断变化的,而且历史的代码逻辑渐渐的也不在符合当前的业务,并且性能也远远跟不上,所以没办法只能硬着头皮往屎山上爬。 经过一段时间的艰....
前面的文章阿粉给大家介绍了 SpringBoot 的自动装配功能,相信大家对自动装配都有了很好的理解,那么今天阿粉通过一个示例来给大家演示一下如何编写一个自己的 starter。 再编写 starter 之前我们先了解一下什么是 starter,一个 starter 其实就是对一个功能的集成封装,然后对外提供一个依赖,让业务去使用,像我们熟悉的 Redis,mongo,mybatis 等。另外由于任何人都可以编写自己的 starter,那么为了区分官方的 starter 和个人的 starter,通常在命名上面会有一个规范。所以 SpringBoot 官方提出,第三方在建立自己的 Starter 的时候命名规则统一用xxx-spring-boot-starter,而官方提供的 Starter 统一命名方式为spring-boot-starter-xxx。 通过我们前面的文章,我们知道自动装配首先要有一个配置类,其次还要有 spring.factories 文件,所以这两步是必不可少的。接下来我们就实操一下。 编写配置类 编写配置类首先要添加一个自动装配的依赖,然后再编写对应的配置类和业....
前面的文章给大家介绍 Spring 的重试机制的时候有提到过 Spring 有很多 @Enable 开头的注解,平时在使用的时候也没有注意过为什么会有这些注解,今天就给大家介绍一下。 @Enable 注解 首先我们先看一下有哪些常用的 @Enable 开头的注解,以及都是干什么用的。 @EnableRetry:开启 Spring 的重试功能; @EnableScheduling:开启 Spring 的定时功能; @EnableAsync:开启 Spring 的异步功能; @EnableAutoConfiguration:开启 Spring 的自动装配功能; 上面这几个是我们经常会用到和看到的,都知道在使用相应的功能的时候,如果没有配置上面的注解功能都是不生效的。以我们前面的文章的 Spring 重试为例,我们需要在启动类上面配置 @EnableRetry ,否则自动重试注解 @Retryable 是不会生效的,如下所示,没看过的可以去看下,https://mp.weixin.qq.com/s/U_nm92ujCGArkii5ze7uaA。 @Import 注解 那有的小伙伴就要问了,这....
作为一名后端程序员,可以说天天都要跟数据库打交道,不管使用的是 MySQL, Oracle 还是 SQL Server,毫无疑问都逃不开 SQL,所以日常工作中对于 SQL 的性能优化可谓说十分重要。今天阿粉就带大家看一下,每个后端程序员都应该知道的十个提升查询性能的技巧。 1、使用 Exists 代替子查询 子查询在日常的工作中不可避免一定会使用到,很多时候我们的用法都是这样的: SELECT Id, Name FROM Employee WHERE DeptId In (SELECT Id FROM Department WHERE Name like '%Management%'); 相信大家平常肯定都是这样来使用的,其实还有一种更好的方法,如下所示: SELECT Id, Name FROM Employee WHERE DeptId Exist (SELECT Id FROM Department WHERE Name like '%Management%'); 这里我们使用 exist 关键字而不是 In 关键字,当然如果在数据量不大的时候,两种方式都可以,但是当数据量....
说到 Java 中的 Exception 可以说是谁见谁恨,一旦遇见 Exceptio 说明我们的程序出了异常,我们都知道 Java 的异常都是 Throwable 对象,Throwable 有两个子类,分别是 Error 和 Exception,对于 Error 中我们常见的无非就是 OutOfMemoryError 和 StackOverflowError,而对于 Exception 我们常见的会稍微多几个。这篇文章给大家介绍在开发中 Top 5 的异常,相信每一个你都遇到过! 首先 Exception 又分为 RuntimeException (运行时异常)和 CheckedException (检查时异常),两者区别如下: RuntimeException:顾名思义,在程序运行的时候触发的异常,这种异常往往是没办法提前知道的,只有程序在运行的时候才能触发出来,通常情况下出现这种 Exception 基本上都是代码的逻辑错误。 CheckedException:编译期间可以检查到的异常,必须显式的进行处理(捕获或者抛出到上一层)。 这里只列表最常见的五个 Exception,包含....
网上有一句话是这么说的:如果你不知道学什么语言的时候,那么就学 Java。 虽然听上去怪怪的,但是也还是有一定的道理的,首先 Java 的应用很广泛,脚手架很多,作为企业级的开发语言,社会上的工作岗位也是偏多的。另外虽然说Java 的体系很庞大,但是对于大部分日常工作来说,市面上的一些框架资料基本上也能撑撑场面就救火,但是成本相对会高很多,因为没有体系而且还要不断的试错。 对于很多想入门程序员的朋友来说,如果说只是想找个工作,那没必要想太多,建议直接学Java,因为学习 C++ 的难度和成本会比较高,Java 相对来说会比 C++ 容易上手一点,而且网上的资料也多一点,学起来会快很多,没必要现在浪费太多的时间去学一个很难的语言。但是如果喜欢做游戏,或者追求极致的话,可以考虑 C++,不过不太建议,不是因为 C++ 不好,而是因为会 C++ 的只有两种人,要么是大牛,要么是菜鸡。 对于很多刚入行或者想入行的朋友来说,既然选择了语言,那么接下来的就是寻找一个好的老师或者资料书籍进行一步步的深入学习。Java 领域最经典的入门书籍一定是那本《Java 编程思想》,但是说真的能有几个人把这本书....
作为 Java 后端程序员如果要问你什么是面试过程中最逃不过的终极问题,你的回答是什么呢?不管是面试初级中级还是高级,阿粉相信大家在面试的时候都遇到过下面这样的问题。 面试官: 麻烦你说下 Java 运行时数据区域是怎么样子的?哪些部分是线程私有的哪些是线程共享的? 什么是垃圾回收器,以及垃圾回收器是如何判断哪些对象是需要回收的?常用的垃圾回收器都有哪些? CMS 和 G1 有什么区别? 什么是类的加载机制?什么是双亲委派? JDK 自带了哪些常用的故障处理工具命令? 等等等 类似的问题还可以有很多,而且网上的答案也大同小异,基本上所有网上能查到的答案最终的归宿都是来自于周志明周老师的那本《深入理解 Java 虚拟机》,也就是下面这本。(福利见文末) JVM 是大厂面试中非常重要的一环,不论是校招还是社招,面试国内的一些大厂,都会被问到很多 JVM 相关的问题,只有搞懂了 JVM 才有可能真正把 Java 语言 "吃透",而且学习 JVM这部分的内容,一定要注意要实战和理论结合。 这本书可以说是 Java 程序员必读的一本书,在某瓣上平分 9.5,这本书不仅是必读,而且也还是必须多读的....