
项目开发问题
本专栏汇总笔者在日常项目开发过程中碰到的问题,解决过程,以及个人的思考,作为网络笔记,方便以后使用时检索!
毕小宝
从事 Java 开发 7 年+,精于 Java 服务器端程序开发,熟悉设计模式及其在各大主流框架中的应用原理,研究过 Java 并发包源码,搭建过 ORM 框架。路漫漫,仍然在路上的 Java 程序员!
-
原创 编译了三个版本 Tomcat 源码后,我可能发现了一个 bug
本周对 Tomcat 的多应用部署时共享公共包的能力产生了怀疑,理论上,同一个 Tomcat 下部署多个应用时,可以将所有共享 jar 放在 `shared/lib` 目录下,然后配置 `shared.loader` 就可以了。实际实践的时候,多个 SpringBoot 导出的 war 部署在 Tomcat 下时,抽取了公共包后,启动时 `WEB-INF/lib` 下明明有对应的 Spring 框架包,还是报 `Caused by: java.lang.NoClassDefFoundError: or2021-02-05 19:45:5457
3
-
原创 基于 Vue.js 的普通 http 网站如何实现帐号密码加密传输?
如果买不起 https 证书,又不愿意让网站敏感数据在网络中曝露,怎么自己实现一套 https 加密通讯呢?现在大部分网站都采用 https 协议来传输数据,客户端和服务端自动通过证书完成密钥协商和数据加密传输的过程。但是,https 证书一般都是要收费的,因此有些网站开发时还会直接使用 http 协议,这种情况下就需要对敏感数据比如帐号、密码等信息进行加密传输。这个过程其实就是一个 https 协议传输的过程,只是需要网站自己实现加密传输逻辑。2021-02-01 07:51:39130
1
-
原创 @Log 注解的实例打印的日志去哪儿了?
@Log 注解的实例打印的日志去哪儿了?AOP 系统日志的 Aspect 类中使用了 @Log 注解,请求操作日志记录失败了,但是系统日志文件中却没有相关的异常信息,那么问题来了,日志到底去哪了呢?2021-01-29 19:59:2577
0
-
原创 Webmagic 任务 ID 和 RedisScheduler 的设置顺序问题分析
笔者在测试分布式爬虫的时候,在调用 Spider的 setScheduler后,希望能够分片爬取,就再次设置 Spider 的 uuid 为新值后,爬虫就会一秒中结束,下载页面数为 0 。为什么呢?2021-01-25 07:11:41151
0
-
原创 SpringBoot引入依赖包中的日志覆盖现有日志问题分析
一个爬虫项目遇到了反爬,需要验证下代理 IP 能否解决反爬问题,所以在项目中引入了 spring-boot-starter-data-redis 用 RedisTemplate 来存储爬来的代理 IP。项目的日志框架是 slf4j-api,运行正常。但是引入这个新依赖配置后,启动报错,本文来分享这个问题的流程。2021-01-19 12:02:1766
0
-
原创 CentOS7 下Tomcat 添加依赖 MySQL 的开机启动服务
我们的 Java web 应用通常是依赖于 MySQL 数据库服务的,必须保证 MySQL 服务启动后再启动 Tomcat 容器。因此,使用 chkconfig方式就可能出现 Tomcat 比 MySQL 服务先启动、导致 Tomcat 应用数据库连接异常的问题2017-12-08 14:28:583041
0
-
原创 Java web开发问题整理
背景近期开发过程中的简单问题,整理一下。数据库字段类型选择数据库设计过程中,选择合适的类型,可以极大提高磁盘空间的利用率。使用TokuDB数据库引擎的某张表的主键,由原来的128位的varchar类型,改为bigint类型后,相同数据规模下,发现数据库文件大小减少了一半。效果非常明显:原来一亿条记录的字符串主键类型,需要7G左右磁盘空间,改为数值存储后,只需要3G左右的磁盘空间,大大减少了磁盘消耗。2017-09-17 16:21:52401
0
-
原创 vncserver: Wrong type or access mode
背景最近配置 Cuckoo Sandbox 环境,在配置 Guest 端的时候,必须用图形界面工具连接到 Ubuntu 然后启动虚拟机,创建 Guest 实例。由于权限限制,只能用普通用户上传文件到虚拟机,所以就将 /root 目录的所属用户设置为普通用户了。这导致 vncserver 工具失效。权限问题vncserver: Wrong type or access mode of /root/.vnc.进入这个报错目录看了下权限,当前用户是一个普通用户,这就是症结了。重新还给 root 用户,2020-12-31 18:05:46218
0
-
原创 啊,久违的 win7 开机画面!
Cuckoo Sandbox 环境部署需要 win7 的客户机,昨天找到了一个 win7 64 位的镜像文件,然后在本地虚拟机上用该镜像创建了一个 win7 的节点。在虚拟机上跑起来的一刻,啊,久违的 win7 开机画面!2020-12-30 13:31:4574
0
-
原创 Webmagic 重试次数怎么设置才能生效?
Webmagic 爬虫时出现了请求超时异常、但是请求没有重新被重新发送的情况,跟踪了一遍源码,发现 `Site` 类定义了两个重试次数的变量,有一个看似正确的变量,却并不是请求重试使用的属性,导致超时异常后直接中断了请求。本文来分享这个问题的始末。2020-12-21 19:04:1796
0
-
原创 Windows下操作 Elasticsearch 问题汇总
Elasticsearch 作为一款流行的文本检索数据库,2014 年的时候项目中用它实现过文本检索,后来就用的较少了。去年公司的一款产品中使用了 Elasticsearch ,由于我写了一段时间的前端,没关注过后台代码。近期需要了解下整个项目的后台,所以重新了解了一下 Elasticsearch 的用法,本文汇总操作过程中遇到的异常。2020-12-19 09:32:082373
4
-
原创 ElasticSearch源码编译时如何选择Gradle版本?
导入 ElasticSearch 源码,下载了ElasticSearch6.3 和 6.8 的版本,三个版本的 gradle ,都没有编译成功。ElasticSearch 和 Gradle 之间的版本对应关系如何呢?我从 ElasticSearch 源码包中的说明文档中找到了答案。2020-12-18 06:27:37241
0
-
原创 Tomcat 包缺失导致 missing ServletWebServerFactory bean.
Spring Boot 启动报错阅读项目中某个模块的代码时,直接运行 SpringBoot 的启动类报错:org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context. ApplicationContextException: Unable to start ServletWebServerA2020-12-17 06:40:04218
1
-
原创 10038,3306/tcp closed mysql,这是什么鬼问题?
用 Navicat 连了一个新安装的数据库,报 10038 错误,本文记录这个问题的分析及解决过程。10038,3306/tcp closed mysql,这是什么鬼问题?2020-11-13 06:18:56163
0
-
原创 Linux 下 Redis 编译流程整理
今天弄了下 Redis 编译,整理下编译过程。理论上来说,直接将编译后的 bin 目录上传也是可以用的,但是可能跟操作系统版本有关,所以还是现场在目标机器上编译一遍比较稳妥。这里还是用的两年前的版本 3.2.8 ,但是最新版本都已经到 6.6 了,迭代速度太快了!2020-11-02 19:20:30743
7
-
原创 掉坑了,小乌龟SVN默认提交的文件竟然不含 .so
发现一个小问题,归档项目部署包中竟然没有第三方 jni 库,是一个用 C 语言实现的 .so 文件。这导致项目部署的时候报 JNI 加载失败错误,具体怎么回事儿呢?2020-10-20 12:25:19608
7
-
原创 一个基于 Java Servlet 的二手物品交易系统
本文的目标用户是 Java Web 的初学者,纯手工的 Servelt 应用,页面全是用 JSP 命令完成数据渲染的,对初学 Java Servlet 的小伙伴可能会有启发。2020-06-07 12:24:451180
3
-
原创 Java Swing 实现一个学生社团信息管理小应用
最近玩了一下 Java 的 Swing 技术,实现了一个简单的学生社团信息管理系统,基本功能有用户注册、登录、社团信息的增、删、改、查、退出系统等。2020-05-30 18:44:10342
1
-
原创 Linux 学习:用 awk 命令提取 JSON 数据的值列
用 awk 命令提取 JSON 数据的值列,可以通过对指定的列添加处理逻辑来完成,本文将整理一个简单的解析 JSON 值的过程。2020-05-01 09:20:521052
0
-
原创 关于代理模式和装饰模式的一些思考
笔者前几天看了一个面试题 “说一下什么是代理模式?”,于是回忆了一下这个设计模式。2020-01-20 11:23:59179
0
-
原创 SNMP 学习中篇——v3 版本使用
SNMP v3 版本是一种安全的协议,支持认证和加密过程,前面实现了 v1、v2 版本获取路由器 ARP 表的过程,这里继续完善一下 v3 版本的支持。v3 版本的特点是,增加了帐号密码认证和加密传输,所以需要安全方面的配置信息,详情如下。2019-11-23 10:30:36331
0
-
原创 SNMP 学习下篇——知识整理
众所周知,数据在网络传输过程中需要找到目标主机的 IP、端口 、MAC 地址,才能到达通信目的地。路由器位于二层链路层,它在数据转发过程中如果不能找到目的 IP 的 MAC 地址,会修正数据包,将数据包中的目的 MAC 地址设置为下一跳的路由器的 MAC 地址,然后一层层直到真正的目的地址。2019-11-14 10:44:46120
0
-
原创 SNMP 学习上篇——获取路由器的 ARP 表
背景SNMP 协议可以跟远程主机进行通信,实现对目标主机的监控。路由器的 ARP路由器的 APR 信息表是通过两个 oid 结果关联形成的,先获取 oid 为 1.3.6.1.2.1.4.22.1.2 标识的主机的 MAC 物理地址信息,再获取 oid 为 1.3.6.1.2.1.4.22.1.3 的 IP 地址信息,二者通过 OID 关联,形成一张 ARP 信息表。snmp4j PDU...2019-11-14 10:43:201463
0
-
原创 expect 应用之操作 MySQL
问答频道看到一个关于 expect 命令操作 MySQL 的问题,这个命令没见过,花了半个小时研究了一下,发现这个工具还是有用的,本文整理一下解答该问题的过程,顺便练习一下 Shell 编程。安装 expect测试这个脚本时,执行到了 /usr/bin/expect 这一行报文件不存在错误,一搜才知道 expect 是一个命令,需要安装,安装命令为:yum install expect...2019-10-30 18:09:04708
0
-
原创 问答频道有价值的问题整理
CSDN 有一个问答模块,经常看看问答也是很有启发的,这里整理一些这些今年看到的有价值的问题。IDEA 编辑的功能IDEA 强大的自动代码补全功能快捷键 Tab,代码标签输入完成后,按Tab,生成代码。div.class.out + Tab常用的有 fori/sout/psvm+Tab 即可生成循环System.out、main 方法等 boilerplate 样板代码,要输入 for...2019-10-24 19:02:16130
0
-
原创 一个完整的 Zookeeper 集群自动部署脚本
背景我们知道 Kafka 作为一个比较流行的消息中间件,它的集群部署是依赖于 Zookeeper 的,所以集群不是的第一步就是部署 Zookeeper 集群,并记录 Zookeeper 集群信息,将其作为 server.properties 配置中 zookeeper.connect 的值。本文就来实现一个 Zookeeper 集群自动部署脚本。手动部署流程Zookeeper 部署流程,还...2019-10-22 09:23:35404
0
-
原创 Shell 脚本中 3>&1 1>&2 2>&3 的含义
用了一下 whiptail 工具实现在 shell 脚本以图形界面方式进行交互,据其 使用文档 上的说明,这个工具好古老啊,竟然是 1998 年开发出来的。2019-09-11 17:47:391382
0
-
原创 3 分钟带你了解一封邮件的收取过程
背景我们常使用邮件客户端,如 Foxmail 、Outlook 等收发邮件。大家应该了解邮件协议基础知识吧,发送邮件是通过 SMTP 协议完成,收取邮件则走的是 POP3 协议。由于工作原因,笔者曾对邮件协议的通信过程进行过完整的分析,这里承接上一篇 SMTP 协议,继续分析一些 POP3 协议的处理流程。POP3 协议基础POP3全称为「 Post Office Protocol - Ve...2019-08-21 18:22:29170
0
-
原创 HMM 基本问题的公式推导及 Java 实现(三)
HMM 的预测问题HMM 预测问题的定义:给定模型 λ=(A,B,π) 和观测序列 Q={q1,q2,…,qT},求给定观测序列条件概率 P(I|Q,λ)最大的状态序列 I 。即推导一组使得目标观测序列产生的概率最大的状态序列。单个状态的概率求给定模型 λ 和观测序列 Q 的情况下,在时刻 t 处于状态 si 的概率,记作:这是单个状态的概率定义,其意义是用于判断在每个时刻最可能...2019-08-05 18:16:26380
0
-
原创 3 分钟带你了解一封邮件的发送过程
背景我们常使用邮件客户端进行收发邮件,如 Foxmail 、Outlook 之类的,发送邮件通过 SMTP 协议完成,收取邮件走的是 POP3 协议,但是这些协议的通信过程是怎么样的呢?...2019-08-12 08:51:402079
0
-
原创 用 Java 实现贪吃蛇小游戏
程序说明这是一个用 Java Awt 实现的贪吃蛇小游戏的完整代码算法分析(一)启动一个独立线程根据 direction 重绘面板实现蛇身移动效果,运行过程:记录上次头部的坐标到 tempBody 中根据方向修改头部坐标重绘面板判断头部坐标与食物坐标的关系,如果重合则蛇身增加,同时生成新的食物坐标,积分累加判断与边缘的关系,如果重叠,则游戏结束判断与 body 的关系,如果重叠...2019-08-02 18:25:53654
0
-
原创 HMM 基本问题的公式推导及 Java 实现(二)
后向概率公式及推导过程1.后向概率定义给定 λ,定义到时刻 t ,部分观测序列为 q1,q2,…,qt 且状态为 si 的概率为前向概率。记作: αt(i) = P(q1,q2,…qt,st=si | λ)。2.后向概率的初始条件根据定义,第一个时刻的前向概率是 α1(i)=P(q1,s1=si| λ) ,给定观察模型下,第一个时刻的状态为 Si 且观测结果为 q1 。这个值很容易用 H...2019-07-31 06:39:45561
0
-
原创 Windows10 操作系统下 MongoDB 安装过程
背景工作需要了解百度的 OpenRASP 产品,它的服务端依赖的数据库是 MongoDB 和 ElasticSearch ,本文记录在初识 MongoDB 数据库过程中的一些简单问题。安装1.下载安装文件到 MongoDB 官方 下载中心下载 Windows 的最新稳定版本。2.本地安装双击安装文件,走推荐默认安装,完成后选择自动重启主机。3.服务信息推荐的安装会自动创建一个服务名...2019-07-29 15:33:29202
0
-
原创 IDEA 文件夹颜色对目录的影响分析
背景一个网友发了一个 IDEA 的简单工程,名为 test ,导入本地后,中途不经意间做了什么操作导致工程目录中没有文件、看不到正常的目录结构了。虽然玩 IDEA 的时间不长,但 “ 事出必有因,有因必有果 ” ,这个问题是怎么产生的呢?网络上搜索也有类似问题,但跟这种现象不一样。问题分析打开一个正常的工程对比,发现工程文件夹的颜色不一样:正常的工程目录结果如右图,是蓝色的异常的结...2019-07-21 06:47:013990
0
-
原创 Git Bash 提交文件过程整理
背景工作中使用的代码管理工具是 SVN ,偶尔会使用 Git ,由于不常用,每次使用命令时都需要现场百度。说起来,我每次用到用的 Git 并不复杂,都是一些基本命令,用以向自己的 GitHub 仓库提交一些内容。索性今天来整理一下 Git 的基本用法,作为网络笔记吧。Git 安装首先,需要安装 Git 命令工具,类似 SVN 的小乌龟,Windows 系统访问 Git bash 的 Win...2019-07-07 12:33:501006
0
-
原创 IDEA 中 Jetty 的配置过程
背景昨天因为工作需要,玩了下 Jetty 。本来没打算了解 Jetty 的,想着就是一种 Web 服务器而已,用 Tomcat 应该是没有问题的吧。出乎意料的是,接手的这个项目代码完全是依赖于 Jetty 的,项目中的页面路径以及有些文件读取的代码竟然是按照 Jetty 定制的,用 Tomcat 无法跑起来,这点挺让人无语的。那就弄一下 Jetty 吧,以前也没玩过这个东西,在百度的指引下,...2019-06-22 17:10:1911254
5
-
原创 IT 从业者应该了解的著作权知识
普通人的眼力,著作权可能就是跟出书、写书或者艺术作品有关。但是作为 IT 从业者,我们日常的工作就可能跟著作权产生一些关联的,因为软件开发的成果是享有著作权的。(备注:我也是两年前参加系统集成项目管理工程师考试才知道软件领域的著作权相关的内容的。)著作权的对象是作品,是指文学、艺术、和科学领域内具有独创性并能以某种有形形式复制的智力成果。一般职务作品,著作权由作者享有,单位或其他组织享有在...2019-07-19 09:58:53262
2
-
原创 Shell 编程:利用字典统计文本次数
问题有一个 test.log ,内容如下:a,ea,b,eb,c,ec,ec,d,ed,e统计规则是这样的:每一行以逗号分割,如果第二个字段为 e 就统计该行,否则将第一个字段相同且第二个字段不为 e 的行数累加。脚本思路利用 Shell 脚本进行统计,可以考虑字典这个数据类型,循环遍历文件内容,对每一行进行如下的处理:awk 语句分割该行获取第一列和第二列取出第...2019-05-24 13:50:27458
0
-
原创 CentOS 7 下安装 ftp 服务过程
背景最近玩了下 ftp 服务的搭建,过程并不复杂,但是有两点值得整理记录的东西。一个是 ftp 相关的配置项中有一项违反常规思路的配置,不注意就无法访问 ftp 服务;另一个是用户权限问题,root 用户上传的文件 ,普通 ftp 用户访问执行删除操作时操作结果为 false ,文件删除失败,权限问题值得关注。vsftpVSFTP 是一个基于 GPL 发布的类 Unix 系统上使用的 FT...2019-05-05 17:39:352957
3
-
原创 Shell 编程:maven 安装脚本
Linux 下安装 maven流程1、解压二进制包;2、设置环境变量;3、输出版本信息,验证安装成果shell 脚本#!/bin/bashif [[ $0 =~ ^\/.* ]] ; then script=$0else script=$(pwd)/$0fiscript=`readlink -f $script`script_path=${script%/*}rea...2019-04-25 10:19:01387
0