Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

ACE网络库学习笔记

发表于 2024-03-20 | 更新于 2025-12-15

ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。

ACE提供了一组丰富的可复用C++ Wrapper Facade(包装外观)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。

ACE_Message_Queue

ACE消息队列,请参考:

  • 使用Message_Queue的经典的“有界缓冲区”的ACE实现

ACE_Message_Block

ACE_Message_Block用于构建“固定”和“可变”长度的消息。ACE_Message_Block可以将多条消息连接在一起,形成一个链表,从而支持复合消息。请参考:

  • ACE_Message_Block消息数据类
  • ACE_Message_Block—–ACE消息的存储

ACE_Thread_Manager

ACE线程管理类,请参考:

  • ACE_Thread_Manager(v3.12)

ACE日志设施

请参考:

  • 使用ACE日志设施(二)详细介绍(v4)

如果需要将日志写入文件,请参考:

  • ACE (自适应通信环境) 库的日志框架快速入门。

ACE组播通信

请参考:

  • ACE组播通信,by NoName.
  • linux网络编程之一—–多播(组播)编程 ,by 胡永光.

问题参考

ACE静态链接问题

请参考

  • ACE的”error LNK2019: unresolved external symbol”链接错误
  • ACE的开发和使用 - FAQ
  • How to solve unresolved external symbol error - if_nametoindex in visual studio 2013

ACE TCP Server无法Open的问题

最近突然发现ACE_SOCK_Acceptor.open方法报错,无法初始化,错误代码是10093,通过分析是WSAStartup()未初始化。最后在main函数文件中通过 #include <ace/OS_main.h> 解决。解决原因是该文件中将调用 WSAStartup() 函数初始化。

1
2
3
4
5
ACE_INET_Addr commAddr(1500);
if (m_acceptor->open(commAddr, 1) == -1) {
ACE_DEBUG((LM_ERROR, "errno=%d", ACE_OS::last_error()));
return -1;
}

ACE 多网口多播问题

当多播时存在多个网口,应指定多播绑定的网口。参考如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "ace/SOCK_Dgram_Mcast.h"
#include "ace/Log_Msg.h"

int main()
{
ACE_SOCK_Dgram_Mcast mcast;
ACE_INET_Addr srv_addr("224.0.0.9:520");

/*
if (mcast.open(srv_addr, "eth0", 1) == -1)
{
ACE_ERROR_RETURN((LM_ERROR, "%p"), -1);
}*/

mcast.join(srv_addr,1,"eth0");
}

参考链接

  1. ACE 示例2 — Echo Server,by peirenlei.
  2. ACE自适配通信环境,by wikipedia.
  3. 服务器并发策略,by maodanp.
  4. Threads and Connections in Backend Applications,by Hussein Nasser.
  5. error LNK2019: 无法解析的外部符号 “int __cdecl ace_main_i(int,char * * const)” ,by 金士顿.
  6. Windows Sockets Error Codes,by microsoft.
  7. WSAStartup 函数 (winsock.h),by microsoft.
  8. socket 函数 (winsock2.h),by microsoft.
  9. ACE_SOCK,by 咚咚锵锵.
  10. C++ Winsock 10093 error,by stackoverflow.
  11. ACE_SOCK_Dgram_Mcast Class Reference,by vanderbilt.
  12. ACE (自适应通信环境) 库的日志框架快速入门。,by r/cpp.

SpringBoot学习笔记

发表于 2024-03-16 | 更新于 2025-04-21

Spring Boot 是一个基于 Java 的开源框架,用于以最小的工作量编写独立的、生产级的基于 Spring 的应用程序。Spring Boot 是 Spring Java 平台的约定优先于配置的扩展,旨在帮助在创建基于 Spring 的应用程序时最大程度地减少配置问题。

由于其易用性和健壮性,它被广泛用于构建微服务、Web 应用程序和其他基于 Java 的项目。

常用工具介绍

mvn repository

访问地址如下,用于查找Jar包

  • mvnrepository

当前很多项目使用mvn打包多模块,请参考:

  • Maven打包方式(多模块)

MyBatis

MyBatis-Plus

请参考:

  • MyBatis org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题解决

代码生成器新,请参考:

  • Mybatis Plus最新代码生成器AutoGenerator,更简单更高效!

SWagger

Swagger是一个可以根据你的代码,自动生成接口文档的一个工具,并且可以用作接口测试工具。

请参考:

  • springboot3.x集成SpringDoc Swagger3
  • 从 SpringFox 迁移到 SpringDoc

分层架构

参考SprintBoot的分层架构,可以更好的开发企业级应用。请参考:

  • Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
  • 在Spring Boot开发中使用DTO层
  • 真理大讨论:Service层的接口是不是多此一举?
  • Spring Boot中的业务层(Service)是否要创建接口,以及如果Service有多个实现类,如何让Spring知道该注入哪个Impl类的分析
  • 深入理解Spring Boot的Service层
  • 五个分层维度:Spring Boot 工程分层实战
  • 分层设计:Service 层真的需要实现接口吗?
  • 基于Spring框架的分层解耦详解

跨域问题

在用SpringBoot开发后端服务时,我们一般是提供接口给前端使用,但前端通过浏览器调我们接口时,浏览器会有个同源策略的限制,即协议,域名,端口任一不一样时都会导致跨域,这篇文章主要介绍跨域的几种常用解决方案。

具体方案请参考:

  • SpringBoot 项目解决跨域的几种方案

测试跨域问题

注意,当前以下代码无法在最新的Chrome浏览器控制台运行:

1
2
3
4
5
6
7
8
var xhr = new XMLHttpRequest()
xhr.open('GET', 'http://localhost:9090/user') // 替换请求的方法和地址
xhr.send()
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
console.log(xhr.responseText)
}
}

可使用Postman进行跨域测试,请参考:

  • Postman 中如何进行跨域(CORS)测试?图文教程

具体原理是:跨域问题源于浏览器同源策略,Postman 提供了模拟 CORS 请求的便捷方法,通过设置 Origin 字段和测试跨域请求,可检查响应头中的Access-Control-Allow-Origin等信息。

maven父子工程中的依赖引用

请参考:

  • 一文搞懂maven父子工程中的依赖引用

注解

@AliasFor注解

请参考:

  • SpringBoot深入理解 – @AliasFor注解的作用
  • @AliasFor 注解
  • Spring Boot常用注解(一) - 声明Bean的注解

@Component注解

请参考:

  • SpringBoot - @Component注解使用详解

@Service注解

请参考:

  • Spring5:@Autowired注解、@Resource注解和@Service注解
  • Spring注解之Service详解

@Configuration注解

请参考:

  • Spring Boot 中的 @Configuration 注解

@Aspect 注解

请参考:

  • Spring Boot中的 @Aspect 注解是什么,如何使用
  • @Aspect结合案例详解(一)
  • 基于@Aspect注解实现的SpringBoot AOP源码
  • Spring Boot 自定义注解实现AOP切面织入
  • Spring Boot 使用自定义注解实现操作日志的记录
  • AOP面向切面编程@Aspect 注解用法
  • 关于切点表达式中 @annotation 用法的疑问
  • SpringBoot AOP中JoinPoint的用法和通知切点表达式
  • SpringBoot Aop 详解和多种使用场景

@RestControllerAdvice注解

请参考:

  • RestControllerAdvice注解与全局异常处理

Actuator

在Spring Boot应用中,只需要依赖组件spring-boot-starter-actuator。它提供了很多监控和管理你的Spring Boot应用的HTTP或者JMX端点,并且你可以有选择地开启和关闭部分功能。当你的Spring Boot应用中引入依赖之后,将自动拥有审计、健康检查、Metrics监控等功能。

请参考:

  • SpringBoot中集成Actuator实现监控系统运行状态

实体类划分

在项目应用中,VO对应于页面上需要显示的数据(表单),DO对应于数据库中存储的数据(数据表),DTO对应于除二者之外需要进行传递的数据。

  • VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。

  • DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。

  • DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。

  • PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。

请参考:

  • 实体类(VO,DO,DTO)的划分

Spring Security

请参考:

  • 秒懂SpringBoot之全网最易懂的Spring Security教程

PageHelper分页插件

请参考:

  • mybatis分页插件PageHelper使用及原理分析
  • Springboot Mybatis使用pageHelper实现分页查询

代码自动生成

请参考:

  • 使用 Velocity 模板引擎快速生成代码

定时任务

请参考:

  • 深入Quartz,更优雅地管理你的定时任务

部署方式

请参考:

  • 花5分钟过一遍jar包和war包的区别

参考链接

  1. Spring Boot,by spring.
  2. 从0开始带你手撸一套SpringBoot+Vue后台管理系统,让小白能跟着学会的项目实战,by 程序员青戈.
  3. SpringBoot 项目解决跨域的几种方案,by JK凯.
  4. springboot3.x集成SpringDoc Swagger3,by 咚咚阳.
  5. mvnrepository,by mvn.
  6. Spring中 Service和ServiceImpl的选择,by leeindex.
  7. Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程,by Leaton Lee.

Mybatis学习笔记

发表于 2024-03-12 | 更新于 2024-07-08

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

参考链接

  1. 什么是 MyBatis?,by mybatis.
  2. MyBatis教程(看这一篇就够了)入门到精通
  3. 若依前后端分离版如何集成的mybatis以及修改集成mybatisplus实现Mybatis增强,by 霸道流氓.

phpstudy简介

发表于 2024-03-10

最近接触一地方科技公司,他们使用phpstudy在Windows操作系统上部署应用,可以绿色化,无需安装,挺好用的。

phpstudy 为服务器环境提供最优配置的解决方案, 支持Web端管理,一键创建网站、FTP、数据库、SSL;安全管理,计划任务,文件管理,PHP多版本共存及切换;自带LNMP与LAMP 。

参考链接

  1. phpstudy,by xp.

FTP大文件传输之哈希验证

发表于 2024-03-02 | 更新于 2024-03-03

最近使用Filezilla下载GB级别的压缩文件时,发现文件完整性验证失败,导致压缩包无法解压。下载大文件出问题的原因是什么呢?如何解决该问题呢?下面简单探讨一下。

原因分析

根据数字通信系统的基本模型(如图1所示)可知,大文件传输失败的原因最有可能是信道存在干扰。

数字通信系统模型

图1 数字通信系统模型

解决方案

目前采用的解决方案如下:

  1. 将GB级别的文件分卷压缩,放入文件夹中。
  2. 使用HashCalculator工具对文件夹中分卷压缩包进行哈希计算,并将结果保存到文件夹中。
  3. 使用Filezilla下载整个文件夹
  4. 使用HashCalculator工具对下载的文件夹进行哈希验证,哪个分卷压缩包哈希验证不通过,就重新下载该分卷压缩包。

参考链接

  1. 数字通信系统模型(重点内容),by 通信小达人.
  2. HashCalculator,by hrpzcf.
  3. hash support?,by filezilla.
  4. Filezilla配置FTP中的坑以及出坑办法,by asdyzh.
  5. Windows certutil.exe 命令 简单举例 计算MD5与SHA1/256,by ldq_sd.

Web拦截的奇技淫巧

发表于 2024-02-24

Web拦截的作用

计算机科学领域的任何问题都可以通过增加一个中间层来解决。 —— Butler Lampson

在没有系统的控制权,不掌握系统代码的情况下,通过“非常规”(拦截) 手段来增加中间层,满足一些自定义的需求。类似于软件设计模式中的装饰模式。

Web拦截的方法

请参考:

  • Web 终极拦截技巧(全是骚操作)

参考链接

  1. Web 终极拦截技巧(全是骚操作),by 风痕 · 術&思.

Spring_Boot_CLI入门教程

发表于 2024-02-21

Spring Boot CLI 是一个命令行工具,可用于从 start.spring.io 引导新项目或对密码进行编码。

安装

手动安装,参考以下链接,下载 spring-boot-cli-3.2.2-bin.zip ,并将 spring 可执行程序文件夹添加到系统 PATH 环境变量中。

  • 3.2. Installing the Spring Boot CLI

使用

安装 CLI 后,您可以通过在命令行中键入 spring 并按 Enter 来运行它。

1
2
3
4
$ spring
$ spring help init
$ spring version
$ spring init --dependencies=web,data-jpa my-project

参考链接

  1. Spring Boot CLI,by spring.
  2. 3.2. Installing the Spring Boot CLI,by spring.

技术写作的诀窍

发表于 2024-01-27

什么是技术写作

技术写作非常重要,产品的开发、推广、维护都需要它。

技术写作的关键

技术写作的好坏,跟语文水平关系不大,更多是一个技巧问题。

因为技术写作的评价标准,不是艺术性,而是表达是否清楚明白。它不需要华丽的词藻、巧妙的比喻、深刻的感悟,只需要把问题说清楚。

把问题说清楚的关键,在于你的思想是否清楚。

技术写作的诀窍

文章采用单线结构。

所谓”单线结构”(也称”线性结构”),指的是一篇文章只说一件事,按照线性顺序进行叙述,由浅入深、循序渐进、平铺直叙、层层递进。

参考链接

  1. 科技爱好者周刊(第 288 期):技术写作的首要诀窍, 阮一峰.

MobaXterm终端远程访问工具入门

发表于 2024-01-24

MobaXterm 是一个增强型的 Windows 终端。

其为 Windows 桌面提供所有重要的 远程网络工具(SSH、X11、RDP、VNC、FTP、MOSH…)

和 Unix 命令(bash、ls、cat、sed、grep、awk、rsync…)。

参考链接

  1. MobaXterm(终端工具)下载&安装&使用教程,by 蜗牛也不慢…….
  2. 全能终端神器——MobaXterm,by 程序员良许​.
  3. 比Xshell更全能,更好用的SSH客户端神器,MobaXterm,by 大技术.

kettle入门教程

发表于 2024-01-23 | 更新于 2024-01-26

Kettle 是一款国外开源的 ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。

简介

Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。

Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。

Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

Kettle(现在已经更名为PDI,Pentaho Data Integration-Pentaho数据集成)。

概念

Kettle的执行分为两个层次:Job(作业)和Transformation(转换)。

组成

  • Spoon.bat/spoon.sh:是一个图形化界面,可以让我们用图形化的方式开发转换和作业。

  • Pan.bat/pan.sh:利用Pan可以用命令行的形式调用Trans。

  • Kitchen.bat/kitchen.sh:利用Kitchen可以使用命令行调用Job。

  • Carte.bat/Carte.sh:Carte是一个轻量级的Web容器,用于建立专用、远程的ETL Server。

问题

kettle连不上mysql数据库

kettle 7.1在 win7 上能正常连接mysql数据库,复制到 Win10 上反而不能连接成功。最后发现原因是 Win10 的时间设置不对,改成正常时间就能连接成功。

参考链接

  1. kettle入门实战,by Gavin.
  2. kettle的基础概念入门、下载、安装、部署,by Kettle中文网.
  3. 七十七、Kettle的简介与安装部署,by 象在舞.
  4. Kettle下载与安装教程【保姆版】,by 亭子下的李子.
上一页1…789…54下一页

Jack Huang

535 日志
69 标签
© 2026 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse