因特马

努力探索B面人生:AI、副业搞钱、人生感悟

因特马

过去两年一直在 CSDN 上写博客,不过有广告、等待审核等一些不方便的地方,一直想搭建一个自己的博客。正好手里有一台闲置的腾讯云服务器,于是下定决心准别搭建一个个人博客。经过两天的折腾,终于初步搭建成功。下面分享下搭建过程。

准备材料

注:本方案非 hexo + GitHub 的免费方案,需要拥有一台个人公网服务器。

  • 公网服务器一台
  • GitHub 仓库
  • 个人域名(非必须)

搭建思路

阅读全文 »

本文译自:An Introduction to Tomcat Servlet Interactions
译者:因特马
邮箱:myz9412@163.com


Tomcat Servlet 功能介绍

Apache Tomcat 因其灵活的配置和交互能力其实是作为通用的 web 应用服务运行在多种环境上的,但主要还是作为一个 Java Servlet 容器。

Tomcat 利用它对 Java Servlet 和 JSP API 的实现,可以从客户端接收请求,通过动态编译容器管理的 Java class 文件来处理相关应用程序上下文中指定的请求,并将结果返还给客户端。这种动态生成的特点是快速、多线程,同时还不依赖于特有的平台去处理请求。

阅读全文 »

背景

最近发现项目中有关发送邮件的模块偶尔会阻塞住,导致整个线程阻塞。诡异的是没有捕获到任何异常日志,程序莫名其妙就卡在了 sendMail 上。

后来想到发送邮件的内容过大,可能由于这个原因导致,所以找了一下有关 JavaMail 超时设置的资料。现做整理,顺便聊聊一些小坑。

JavaMail smtp 超时参数

参数 类型 描述
mail.smtp.connectiontimeout int Socket connection timeout value in milliseconds. This timeout is implemented by java.net.Socket. Default is infinite timeout.
mail.smtp.timeout int Socket read timeout value in milliseconds. This timeout is implemented by java.net.Socket. Default is infinite timeout.
mail.smtp.writetimeout int Socket write timeout value in milliseconds. This timeout is implemented by using a java.util.concurrent.ScheduledExecutorService per connection that schedules a thread to close the socket if the timeout expires. Thus, the overhead of using this timeout is one thread per connection. Default is infinite timeout.
阅读全文 »

引言

之前发表过一篇 SpringBoot 对 controller 层捕获全局异常并处理的方法(@ControllerAdvice 和 @ExceptionHandler),介绍了如何在 SpringBoot 工程中对 Controller 配置全局异常处理。后来在实际工程中,又有了如下需求:有些接口在发生异常时,需要持久化错误信息,而有的接口则不需要。如果使用了全局异常处理,那每次发生了异常,还需要判断是哪个接口发生的异常,进而选择是否持久化错误日志。那能不能对全局异常进行配置,对不同类型的接口使用不同的全局异常进行处理呢?

经过查阅文档发现,Spring 提供了对 @ControllerAdvice 注解的配置,我们可以通过配置 @ControllerAdvice 指定拦截范围。

@ControllerAdvice 指定 Controller 范围

根据 API,我们可以看到注解 @ControllerAdvice 有如下几种配置:

阅读全文 »

有关 SpringBoot 邮件服务

Spring Framework 自己有一套基于 JavaMail 的邮件服务包 org.springframework.mail,并通过 JavaMailSender 接口提供了一种简易的发送邮件的方式。这样,开发人员就可以不用操心底层的邮件系统,使用 Spring 提供的接口即可方便地使用邮件服务。官方文档:https://docs.spring.io/spring/docs/5.0.10.RELEASE/spring-framework-reference/integration.html#mail

而在 SpringBoot 中,提供了更为简便的自动配置,又进一步简化了开发人员工作。官方文档:https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#boot-features-email 。下面介绍一下 SpringBoot 中配置邮件服务的具体方法。

具体操作

添加 Maven 依赖

阅读全文 »

引言

在开发中,我们会有如下的场景:某个接口中,存在一些业务异常。例如用户输入的参数校验失败、用户名密码不存在等。当触发这些业务异常时,我们需要抛出这些自定义的业务异常,并对其进行处理。一般我们要把这些异常信息的状态码和异常描述,友好地返回给调用者,调用者则利用状态码等信息判断异常的具体情况。

过去,我们可能需要在 controller 层通过 try/catch 处理。首先 catch 自定义异常,然后 catch 其它异常。对于不同的异常,我们需要在 catch 的同时封装将要返回的对象。然而,这么做的弊端就是代码会变得冗长。每个接口都需要做 try/catch 处理,而且一旦需要调整,所有的接口都需要修改一遍,非常不利于代码的维护,如下段代码所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@RequestMapping (value = "/test")
public ResponseEntity test() {
ResponseEntity re = new ResponseEntity();
// 业务处理
// ...
try {
// 业务
} catch (BusinessException e) {
logger.info("业务发生异常,code:" + e.getCode() + "msg:" + e.getMsg());
re.setCode(e.getCode());
re.setMsg(e.getMsg());
return re;
} catch (Exception e) {
logger.error("服务错误:", e);
re.setCode("xxxxx");
re.setMsg("服务错误");
return re;
}
return re;
}

那么,有没有什么方法可以简便地处理这些异常信息呢?答案是肯定的。Spring 3.2 中,新增了 @ControllerAdvice 注解,可以用于定义 @ExceptionHandler@InitBinder@ModelAttribute,并应用到所有 @RequestMapping 中。简单来说就是,可以通过 @ControllerAdvice 注解配置一个全局异常处理类,来统一处理 controller 层中的异常,于此同时 controller 中可以不用再写 try/catch,这使得代码既整洁又便于维护。

阅读全文 »

计算机科学与技术专业的学生要怎样做才能避免成为 一个低级的码农?

知乎上计算机的似乎很多,大神也有不少,作为一个计算机科学与技术专业的学生,真心的请教一下要怎样做,要学什么,要怎样做,才能避免那种月工资两三千的码农甚至码奴的生活呢。 之前也有过类似的提问,但是本人看了一下那个问题下的答案,调侃者居多,希望大神们能够给小弟指一条不是那么荒唐的道路。。。

在知乎上看到上面这个问题(问题原链在【阅读原文】),以下是我的回答:

其实题主应该是看到一些学长学姐或者是看到网上一些有关程序员的言论才来问这个问题的吧?首先,我觉得题主是个很有心的人,还没毕业就开始对自己的未来开始考虑了。其次,题主现在的技术积累和学习成绩应该是一般般,我猜没什么项目经验,虽然想努力但是还是很迷茫,不知道如何下手。再者,题主应该是个对计算机抱有一定热爱的同学,要不然不会来问这个问题。

首先我来理解下题主所谓的低级码农:表象为工资低、职位低、工作内容枯燥乏味低级、工作前景不明朗、发展空间不大;内在为个人对技术不够热爱、没有进取心、以混日子为主、对工作中的内容不求甚解。不知道我理解的对不对,而以下的内容都是按照我的这个理解来展开的。

我是CS本科出身,在学校成绩中上,参加过一些比赛,成绩都一般,项目经验几乎为0,也就是平时自己会自学一些技术。所以,题主别慌,我当初也是跟你一样。好了,以下是干货,说一些适合普通人的路子。这其中有些我做到了,有些是我当时没有做到后来自己总结觉得应该去做的。另外这里也不讨论考研相关,只针对本科到工作。

阅读全文 »

前一段看到朋友圈里的学弟学妹们开始晒毕业照,这一晃据我毕业也一年多了。走出了校园,工作了一年,见得多了,体会和感触也随之变多。所以,又开始习惯性地来一波复盘,总结一下过去一年的经历,用现在不成熟的想法去回顾之前更不成熟的想法,哈哈。


挑出我认为比较重要的四点感受来叨叨吧。

一.理论知识的重要性

阅读全文 »

博观而约取,厚积而薄发。

                ——《稼说送张琥》 苏轼

理应在阳历年跨年之际写完2017总结,但是拖延症这种东西是真的可怕,记得2016年的总结应该是一直拖到现在吧。不过之前也一直也没有好好写过年度总结,学生时代的那些总结也就那么回事吧,写不写无妨(其实是我实在太过平凡,没什么可以拿出来写的事)。如果说2016年是我初入IT圈,那2017年可以说我百米冲刺前十米的冲刺阶段吧。所以2017倒还真的可以拿出来说说。

想说的内容太多,为了避免流水账,大体划分一下主要就是以下几块:工作、技术、生活。文笔有限,各位看官多多包涵。


工作

阅读全文 »

统计了一天的表格在发给负责人后,负责人问我为什么我发给她的Excel文件打开是空的?!

一开始我以为是发的过程文件被损坏,重发一次就行了。但我点开检查我的excel文件是否真的是空的时,excel提示我这个↓↓↓

我靠,我心里一沉。这怕是要翻车了。果然,点击“是”后

阅读全文 »
0%