仿QQ聊天程序(java)

2023-05-16

简易版qq聊天qq聊天[简易版] (resourcecode.cn)

推荐java最新聊天项目(java仿微信聊天): java 简单仿微信聊天(springboot)_Garry1115的博客-CSDN博客_springboot 模拟微信

转载请标明出处:牟尼的专栏 牟尼的博客_CSDN博客-算法,C++,JAVA领域博主

一、设计内容及要求

1.1综述

A.系统概述

我们要做的就是类似QQ这样的面向企业内部的聊天软件,基本功能和QQ类似。首先,系统分为两大部分,第一部分是客户端,是用户使用的部分,第二部分就是服务器,所有的客户端都是通过服务器来进行用户身份验证及聊天转接的。客户端提供主要的界面及服务请求,如:登录界面、注册界面、找回密码界面、主窗体界面、聊天界面、信息查看界面等。客户端主要提供服务请求界面,核心的业务逻辑处理主要由服务器提供,并向客户端发送请求的结果。同时,服务器要能提供服务的开启、关闭功能及查看在线人数及客户端登录日志。

人员组成及分工

张XX(组长):负责整体的架构设计、后台数据库及通信部分。

房 X(组员):聊天界面、注册界面、登录界面、找回密码、及其业务逻辑。

高 X(组员):主窗体界面、信息查看及其业务逻辑。

B.要求

1).小组成员必须按时完成各自的任务。

2).设计上与技术上有问题的先自行解决(看书、上网查),如不能解决的集体讨论解决。有其它的问题及时提出来!

3).必须写文档(写把各自模块的整体设计用UML图或Viso画的图(尽量不要只是简单的语言叙述)表达出来),学会用面向对象的思想来来设计,采用模块化的思想分解模块。(设计原则与设计模式能用的用)

4).每个类必须有类说明,每个函数也必须有函数说明,函数的具体设计也必须有必要的注释。

5).如果不能遵守规定或要求的可以提前退出,不强留。

(注:即使不会写代码,也没关系,只要一能用UML图或其他的图等表达出自己的设计思想及具体的实现设计也行)

C.开发环境

运行环境:Myeclipse集成开发环境,jdk 1.6版本。

使用语言:Java语言。

使用数据库:Oracle数据库。

1.2需求分析

需求背景

即时通信软件为我们提供了诸多的方便,使我们逐步享受信息时代的便捷。大家最熟悉的即时通信软件就是QQ了,因为它几乎已经融入了我们每个人的日常生活。没有了QQ,没有了手机,我们或许真的“活不了了”。由此可见,生活在信息时代的人们对即时通信、聊天软件有巨大的需求,这样的软件也将为我们节省大量的时间和金钱,或许还能成为我们发家致富的工具,比如:产品的推介、售后服务及技术交流等。

    然而,既然已经有了QQ如此强大的即时通信软件,我们再去做这样的软件还有什么竞争力吗?QQ已经深入人心,要想再去做可能没有任何竞争力。此时,我们可以换一个角度,调整用户对象。如今,企业内部信息在这个信息时代就是金钱,尤其是一些大企业的内部信息,如果这些信息泄露,可能会造成巨大的经济损失,甚至将导致企业破产。但是,为了便捷企业员工之间的交流,做这样的一个企业内部即时通信、聊天软件还是很有市场的。我们的目标就是做的像QQ,但面向企业内部使用。

      企业内部为了方便员工之间便捷的交流,需要开发一款适合企业内部员工进行即时通信的软件,这样的软件既满足了企业内部员工之间便捷的交流,同时,也防止企业内部信息的外流,开发这样一块面向企业内部的即时通信软件,对于企业来说获益良多。

       在开发这款软件时,为了使习惯了使用QQ的用户,更加方便的使用本软件,我们将很大程度上,模仿QQ的用户界面设计,以适应用户的使用习惯,方便用户使用。

功能需求

1)客户端:提供登录、主窗体及聊天等界面及对应的业务逻辑,向服务器发送相应的服务请求,并接受相应的处理结果。客户端是轻量级的软件,只负责链接远程服务器,并发出相应的服务请求,并不进行核心业务逻辑的处理。具体的处理交给服务器,而客户端只接收服务器处理的结果并显示给用户。

2)服务器:监控登录信息及在线用户信息,接收客户端的服务请求,并做相应的处理,然后将处理结果发送给客户端。服务器负责处理核心的业务逻辑,并负责连接数据库,保存和读取数据。因此,服务器端设计的好坏也直接影响即时通信软件的质量。

用例描述

1)客户端:

                                                                                       图 1-1 客户端用例图

2)服务器:

                                                                           图 1-2 服务器端用例图

二、设计原理及方案

2.1总体设计

系统架构设计

1)采用MVC架构模式

客户端:

A.   包view(视图、界面层):只负责界面的显示。

B.   包business(业务逻辑层):核心业务的处理。

C.   包data  (数据访问层):读写数据、接收发送数据。

服务器:

A. 包view(视图、界面层):只负责界面的显示。

B. 包business(业务逻辑层):核心业务的处理。

C. 包data  (数据访问层):读写数据、接收发送数据。

2)           文件组织

A.     客户端:

图2-1 客户端文件组织结构

B.     服务器:

图2-2 服务器文件组织结构

3)             采用基于网路的三层C/S模式

图2-3 基于C/S的模式图

功能模块设计

1)客户端:

图2-4 客户端功能模块图

2)服务器:

图3-5 服务器功能模块图

数据库设计

1)概念结构设计

   图 2-6 数据库实体E-R图

2)逻辑结构设计

用户表(QQ号、密码、签名、头像编号、昵称、性别、生日、星座、血型、学历、电话、邮箱、所在地)

分组表(组号、组名、创建时间、QQ号)

好友表(好友QQ号、QQ号、所属分组号、添加时间、是否上线)

聊天记录表(记录编号、发送者QQ号、接受者QQ号、发送时间、信息编号)

聊天内容信息编号、内容、字体类型、字体大小、字体颜色)

登录信息表(登录编号、登录IP、端口号、登录时间、是否在线、QQ号)

QQ群群编号、群名称、创建时间)

用户与群关系关系编号、QQ号、群编号)

3)表结构设计

表 2-1 用户与群关系(User_Group)

字段名称

说明

字段类型

字段长度

是否为空

约束

ugno

关系编号

Number

2

主键

qq

QQ号

number

5

外键

gno

群编号

number

5

外键

表 2-2 用户信息表(UserInfo)

字段名称

说明

字段类型

字段长度

是否为空

约束

qq

QQ号

number

5

主键

pwd

密码

Nvarchar2

10

sign

签名

Nvarchar2

30

photoID

头像编号

Number

2

nickname

昵称

Nvarchar2

10

sex

性别

Char

2

男或女

birthday

生日

Date

constellation

星座

Nvarchar2

60

bloodType

血型

Char

10

A、B、O、AB

diploma

学历

Nvarchar2

10

telephone

电话

Nvarchar2

15

email

电子邮件

Nvarchar2

20

address

所在地

Nvarchar2

20

 表 2-3分组信息表(Subgroup)

字段名称

说明

字段类型

字段长度

是否为空

约束

sno

组号

Number

2

主键

sname

组名

Nvarchar2

20

sdate

创建日期

Date

默认当前日期

qq

QQ号

number

5

外键

 表 2-4好友信息表(Friends)

字段名称

说明

字段类型

字段长度

是否为空

约束

Fno

编号

Number

2

主键

fqq

好友QQ

number

5

外键

fsno

所属分组号

Number

2

外键

fdate

添加日期

Date

Fstatus

是否在线

number

2

qq

本人QQ

number

5

外键

 表 2-5聊天记录表(ChatInfo)

字段名称

说明

字段类型

字段长度

是否为空

约束

cno

记录编号

number

2

主键

csendqq

发送者QQ

number

5

外键

creceiveqq

接受者QQ

number

5

外键

cdate

发送日期

TimeStamp

tno

信息编号

Number

3

外键

 表 2-6信息表(Text)

字段名称

说明

字段类型

字段长度

是否为空

约束

tno

信息编号

Number

3

主键

tcontext

内容

Nvarchar2

200

tfonttype

字体类型

Nvarchar2

10

tfontsize

字体大小

Number

5

tfontcolor

字体颜色

Nvarchar2

5

 表 2-7登录信息表(Login)

字段名称

说明

字段类型

字段长度

是否为空

约束

lno

登录编号

Number

5

主键

lip

登录IP

Nvarchar2

20

lport

端口号

Number

5

ldate

登录日期

Date

lstatus

是否在线

Number

1

1 or 0

lqq

QQ号

number

5

外键

 表 2-8 QQ群信息(GroupTable)

字段名称

说明

字段类型

字段长度

是否为空

约束

gno

群编号

Number

5

主键

gname

群名称

Nvarchar2

20

gdate

创建日期

date

通信协议设计

计算机之间传送数据由两种,即TCP通信和UDP通信。TCP是可靠的面向连接的通信协议,二UDP是不可靠的面向无连接的通信协议。

1)基于TCP的通信

在进行登录用户验证、添加好友、删除好友等操作时,采用基于TCP的通信协议。

2)基于UDP的通信

基于UDP通信的基本模式:

(1)将数据打包,称为数据包(好比将信件装入信封一样),然后将数据包发往目的地。

      (2)接受别人发来的数据包(好比接收信封一样),然后查看数据包中的内容。

       在进行用户聊天时,采用基于UDP的通信协议。

缓存数据设计

1) 用户信息Bean

 为了保存用户及好友的个人信息,此处设计用户信息缓存数据,当用户登录时,将用户个人及好友的基本信息保存,以备用户查询,就不用再次连接数据库获取了。

 UserInfoBean类:保存用户QQ号、昵称、签名、血型、地址等信息。

2) 消息信息Bean

 用户在进行聊天时,需要传递必要的信息,此处的消息Bean数据结构就是存储收发用户的QQ号、IP地址、消息内容、字体大小、字体颜色、字体类型等信息。

  Message类:保存收发用户的QQ号、IP地址等信息。

转载请标明出处:牟尼的专栏 牟尼的博客_CSDN博客-算法,C++,JAVA领域博主

2.2详细设计

系统流程图

图 2-7 系统流程图

设计模式使用

1)中介者模式:

所有的用户都通过服务器进行通信,服务器其中介的作用。

2)观察者模式:

  当有用户登录时,会通知其他在线好友,其他好友及时修改此用户的在线状态。

通信协议的实现

2.1.3.1基于TCP的通信

在进行登录用户验证、添加好友、删除好友等操作时,采用基于TCP的通信协议。

A.客户端TCP通信设计

  设计ClientToServer类,该类实现了Runnable接口,是一个线程。

主要方法:

[1] boolean sendLoginInfoToServer(User u) :登录请求。

[2] void getProgerties():获取配置文件中的服务器IP地址信息。

[3] void logout(): 下线,通知服务器该用户下线。

[4]inttoRegister(UserInfoBean user):新用户注册,返回QQ号。

[5] void noticeUpdate():通知刷新好友信息。

B. 服务器TCP通信设计

1)设计ServerThread线程类:处理用户连接服务器请求,并为其启动单独的服务(Server)线程。

主要方法:

[1] void run(): 重写线程类Thread的方法,不断的等待客户端的连接请求。

[2] void pauseThread():暂停服务。

[3] void reStartThread():恢复服务。

2)设计Server线程类:处理每个上线用户个各种服务请求。

主要方法:

[1] void run():不断的等待用户的请求信息,并判断请求类型。

[2] void login():处理用户登录。

[3] void registerNewUser():处理注册新用户

[4] void queryUser():处理查询用户。

[5] void addFriend():添加好友。

[6] void deleteFriend():删除好友。

[7] void updateOwnInfo():更新自己的信息。

[8] void logout():下线。

[9] void queryFriend():查询好友信息。

2.1.3.2基于UDP的通信

在进行用户聊天时,采用基于UDP的通信协议。

A.客户端UDP通信设计

  设计ClientToServerThread线程类:负责UDP通信。

主要方法:

[1]void run():循环等待监听发来的数据。

[2]void getPropertieInfo():获取通信的服务器的IP地址及本机通信端口。

[3]void sendData(byte buffer[]):发送数据。

[4]void Object ByteToObject(byte[] bytes):将Byte数据转为Object类型。

[5]void ObjectToByte(Object obj):将Object型数据转为Byte型。

[6]void closeSocket():关闭收发数据报套接字。

B. 服务器UDP通信设计

设计ClientToServerThread线程类:负责UDP通信,主要是转发用户发送的信息,并保存用户的聊天记录。

主要方法:

[1]void run():循环等待监听发来的数据。

[2]void getPropertieInfo():获取通信的服务器的IP地址及本机通信端口。

[3]void sendData(byte buffer[]):发送数据。

[4] void Object ByteToObject(byte[] bytes):将Byte数据转为Object类型。

[5]void ObjectToByte(Object obj):将Object型数据转为Byte型。

[6]void closeSocket():关闭收发数据报套接字。

数据访问层的实现

2.1.4.1 打开数据库连接类(ConnectionFactory)

[1]void getPropertiesInfo():从配置文件中获取数据库连接信息。

[2]Connection getConnection():打开数据库连接。

2.1.4.2 关闭数据库连接类(DbClose)

[1]void getPropertiesInfo():从配置文件中获取数据库连接信息。

[2]void close(Connection conn):关闭数据库连接。

[3]void close(PreparedStatement pre):关闭数据库语句

[4]void close(ResultSet rs):关闭结果集

[5]voidclose(Connection conn, PreparedStatement pre, ResultSet rs)

2.1.4.3 数据操作类(Dml)

[1]void insert(UserInfoBean user):增加新用户,插入信息。

[2]void update(UserInfoBean user):更新用户信息。

[3]void delete(int qq):删除信息。

界面层的实现

2.1.5.1登录界面

JLoginFrm登陆窗体主要用于用户登陆,注册和找回密码。

内部类:

BackgroundPanel 继承于JPanel主要用于设置窗体背景图片

主要函数:

1.actionPerformed(ActionEvent e)主要对窗体的按键监听

2.JLoginFrm()构造函数,控件的初始化。

2.1.5.2注册界面

JRegisterFrm继承与JFrame主要用于用户基本信息的注册。

主要函数:

1. Void setDay()根据不同的年份和月份设置天数

2.String getBir()以1-1月-2014形式得到用户的生日

3.getUserInfo()得到用户的所有信息

2.1.5.3 聊天界面

ChatPanel主要用于用户间的聊天通信

主要函数:

1、setMessage()设置当前显示所有会话的面板,不可编辑

2、setSendMessage()设置当前发送消息的面板,可编辑

3、sendMessage()发送消息,讲发送消息面板的内容发送到会话面板            和对方。

4、sendFile()传输文件

5、sendImage()发送图片

6、startShake()发送震动消息

2.1.5.4 主界面

主界面的主要内容有QQ头像设置,包括昵称、QQ号、签名的显示,用户登录状态设置,还有好友列表显示,像这些创建好友列表所需要的信息是从服务端获得的;还有一些辅助界面,比如查看好友资料或者查看自己的资料界面,查找好友界面,添加好友界面等。

源码中的一些主要类及类中的主要方法及其作用:

1.ColorConvertOp类:这个类主要负责颜色转换的

[1] public ImageIcon getGrayPicture(String path)//该方法获取图片路径,将转换后的灰色ImageIcon返回。

[2] public class CombListRenderer extends JLabelimplements       2.ListCellRenderer//该类个性化设置combobox的单元格属性

[1] publicComponent getListCellRendererComponent(JList list,Object obj,int row,booleansel,booleanhasFocus)   

//该方法是重写了ListCellRenderer中的getListCellRendererComponent,返回了一个自定义的Component

3、public class findFriendFrm extends JFrame

//该类负责查找好友界面

[1] public String getName()//获得找到好友的昵称或者QQ号

[2] public class InformationFrm extends JFrame

//该类负责显示好友信息的界面

2.1.5.5 用户信息界面

  好友信息界面主要是将从服务端读取的好友的个人信息显示出来。

[1] publicInformationFrm(UserInfoBean userInfo)

//在该构造方法中必须传入一个UserInfoBean 的对象,此对象中包含了好友的所有信息

[2] public class selectGroupFrm extends JFrame

//该类负责显示添加好友的一个界面

 三、实现效果

图 5-1 登录界面

图 5-2 登录界面

图 5-3 注册界面

图 5-4 找回密码界面

图 5-5 主界面        

 图 5-6 信息查看界面

图 5-7 聊天界面

图 5-8 消息记录界面

图 5-9 服务器登录界面

图 5 – 10 服务器管理界面

四、技术难点与解决方案

4.1通信模块

在通信模块,我们既使用了基于TCP的通信协议,也使用了基于UDP的通信协议,在登录验证、添加好友等通信部分,我们采用了基于TCP的通信协议,在聊天时,我们采用了基于UDP的通信协议,将两种协议都进行了相应的练习。  

4.2数据库模块

  在数据库建模时,使用了多张表来存储数据,使其达到了第三范式,虽然,查询数据的时候可能会涉及多个表的嵌套查询,但每个表很单一,扩展灵活。

4.3界面模块

4.3.1 登录界面

登陆界面主要使用到自定义最大化,最小化和关闭按钮,允许鼠标点击窗体拖动。对输入的字符进行判断设置,只允许QQ号码输入数字。使用setUndecorated(true);

setResizable(false);设置去除边框,和不允许改变窗体大小。使用addKeyListener()函数判断字符输入只允许输入数字,使用addMouseMotionListener()方法来允许鼠标点击任何地方拖动窗体。

4.3.2 主机界面

对一些组件的使用,如在好友显示列表中需要用到:JTree和JTabbedPane

右键好友时会弹出好多菜单需要用到:JMenuItem,JMenu和JPopupMenu在显示登录状态时需要用到:ComboBox但是系统默认的组件外观往往达不到我们的审美要求,所以我们要对它们的外观进行个性化设置,所以我们要对其进行重绘,以下是具体实现方法:重写BasicTreeUI 中的setLeftChildIndent和setRightChildIndent方法,以达到对齐父子节点,重写了DefaultTreeCellRenderer和DefaultMutableTreeNode来设置JTree带图片显示节点,并且给节点增加了一些我们需要的东西,重写ListCellRenderer   中的Component getListCellRendererComponent(JList list,Object obj,introw,boolean sel,boolean hasFocus)增加在ComboBox显示图片的效果。

头像灰色显示效果:还有一些图片处理效果的技术,如QQ头像去色处理(灰色头像),其中主要原理就是将头像图片中的像素数组取出来,利用一定的颜色变换公式对其颜色进行变换以达到灰显效果。主要实现代码见public classColorConvertOp中的 static public ImageIcon getGrayPicture(String path)throws IOException方法

五、总结

张的总结:

  通过这次聊天程序课程设计,又有了许多收获。最初,本来打算做大四学长的“我校淘”网站,但,后来通过与大四学长的交流、沟通,他说三周的时间太短了,因为我们之前没有接触过Java Web方面的知识,所以时间不够,因此,先学习这方面的的知识。

   聊天软件,是我之前一直想完成的一个小软件,但没有机会去做,这次有机会做,我决定把它做好,做的像QQ一样。刚开始,对于网络通信、数据库连接及操作这部分,我们之前没练习过,因此,对于整体的设计都很难把握,我们参考了部分书籍,大概了解了其原理,之后就是确定需求,虽然我们对QQ都很熟悉,也都基本了解其大概需求,但在实际设计时,很多需求方面东西都是看不见的,必须自己查资料、思考、练习才能发掘。然后就是总体设计及人员分工,这一步也很关键,如何协调每个人,如何发挥每个人的优势,这需要很多工作。

  在整体设计完成后,我们考虑先开发出简单的聊天软件,然后逐步细化,因此,在详细设计时,我们简化了一些东西,先开发出一个基本原型,用以验证技术并进一步明确需求。然后,对部分技术进行改进和细化,最后,再次基础上不断的迭代进行,由于我们的水平有限,我们最初的设计并不一定是好的设计,只有不断的试验和改进,才能开发出好的软件,当然,前期的整体架构设计非常重要,这将很大程度上决定软件的质量和适应需求变更的能力。总之,在试验与改进中,我们学到了很多东西,不光是技术,还有合作。

房X的总结:

这是第二次小组一起完成一个小项目,总体感觉相对个人完成比较轻松,而且完成的项目,比个人的更好,相互之间可以互相学习,可以看到别人的代码风格,和对同一问题的不同解决方法,每个人的设计思想,可充分展示每个人的优势,并通过相互学习,补充自己的知识不足之处,更快更好的学习知识。

高X的总结:

本次课程设计我做的是一部分界面设计,没啥核心技术,就是对一些组件使用的巩固,通过使用这些组件,加深了对一些常用组件的继承关系的理解,有些小问题还没有解决,但是以后会自己慢慢解决的。

总体而言,我们完成的聊天软件,较好的实现了预期的目标。

软件的优点:具有漂亮、友好的界面、功能较全,软件具有较好的架构设计,用户体验较好。软件的缺点:部分功能测试还不理想,有些功能还未实现。

参考文献

1.石彦芳,李丹.《Oracle数据库应用与开发》.机械工业出版社,2013

2.耿祥义,张跃平.《Java面向对象程序设计》.清华大学出版社,2010

3.张海藩.《软件工程导论》(第5版).北京.清华大学出版社,2008

4.刘新.《Java开发技术大全》.北京.清华大学出版社,2009

5.明日科技 《Java经典编程300例》清华大学出版社 2012

6.梁建全  《你必须知道的261个Java语言问题》  人民邮电大学 2009

转载请标明出处:牟尼的专栏 牟尼的博客_CSDN博客-算法,C++,JAVA领域博主

推荐java最新聊天项目(java仿微信聊天):java 简单仿微信聊天(springboot)_Garry1115的博客-CSDN博客_springboot 模拟微信

源码下载地址:qq聊天[简易版] (resourcecode.cn)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仿QQ聊天程序(java) 的相关文章

  • 在java中将RFC3339 DateTime转换为Date [重复]

    这个问题在这里已经有答案了 如何转换RFC 3339 https www rfc editor org rfc rfc3339java 中的 com google api client util DateTime 到 DateTime 例如
  • 使用 TreeMap 和 Comparator 按值对 HashMap 进行排序

    我使用以下代码创建哈希图 然后使用树形图和比较器对哈希图中的值进行排序 然而 输出结果却出乎意料 所以任何关于我做错了什么的想法都会有帮助 Code public static void main String args System ou
  • 使用 Intellij 2017.2 /out 目录构建会重复 /build 目录中的文件

    更新到 Intellij 2017 2 后 构建我的项目会创建一个 out包含生成的源文件和资源文件的目录 这些文件与已包含的文件重复 build并导致duplicate class生成的类的编译器错误 关于 Gradle 或 Intell
  • 在 Java 8 中将对象追加到列表并返回结果?

    有没有一种方法可以将对象附加到列表并以功能性非命令方式在一行中返回结果 如果原始列表也不应该被改变 你会怎么做 Java 8 是允许的 我已经知道如何将两个列表连接到一行中 Source https stackoverflow com a
  • 使用 Nginx 时缺少 HTTP 状态代码名称

    我正在使用 Nginx 将所有 HTTP 请求重定向到 HTTPS 在我的 Spring Boot 应用程序中 这是我正在使用的 nginx 配置 通过它我可以将所有请求重定向到 Https 但是当我这样做时 我得到了状态码返回正确 但没有
  • 使用 google-api-java-client 的 2 足 OAuth

    有谁知道如何将 2 legged OAuth 与 google api java client 一起使用 我正在尝试访问 Google Apps 配置 API 以获取特定域的用户列表 以下不起作用 HttpTransport transpo
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • Java 相当于 Perl 的 s/// 运算符?

    我有一些代码正在从 Perl 转换为 Java 它大量使用了正则表达式 包括s 操作员 我已经使用 Perl 很长时间了 但仍然习惯 Java 的做事方式 特别是 字符串似乎更难使用 有谁知道或有一个完全实现的Java函数s 这样它就可以处
  • 如何显示/隐藏jsf组件

    在我的一个 JSF 应用程序中 顶部的标题部分包含 selectOneMenu 底部的内容部分显示过滤器组件 默认情况下 应用程序首先在顶部显示 selectOneMenu 数据 在底部显示相应的 Filter 信息 如果用户选择不同的se
  • 到底什么是哈希冲突

    HashMap 中的哈希冲突或哈希冲突并不是一个新主题 我遇到过几个博客和讨论板 以模糊且详细的方式解释如何产生哈希冲突或如何避免它 我最近在一次采访中遇到了这个问题 我有很多事情要解释 但我认为很难准确地给出正确的解释 抱歉 如果我的问题
  • @Cachable 在没有输入参数的方法上?

    我有问题 org springframework cache annotation Cachable注解 Bean public ConcurrentMapCache cache return new ConcurrentMapCache
  • 如何使 ScheduledExecutorService 在计划任务取消时自动终止

    我正在使用一个ScheduledExecutorService如果网络连接已打开超过几个小时 则关闭该连接 然而 在大多数情况下 网络连接在超时之前就关闭了 所以我取消了ScheduledFuture 在这种情况下 我还希望执行程序服务终止
  • 解密 TLS 1.2 AES-GCM 数据包

    我正在开发一个 Java 程序来解密TLS 1 2正在使用的会话TLS RSA WITH AES 128 GCM SHA256密码 我使用wireshark 录制了一个测试会话 这大师秘密是已知的 No Time Protocol Leng
  • 处理 ANTLR 4 中的错误

    遵循后接受的答案 https stackoverflow com a 18137301 2279200的指示处理 ANTLR4 中的错误 https stackoverflow com q 18132078 2279200问题 我遇到了以下
  • Spring Boot 多部分文件始终为 null

    我正在使用 Spring Boot version 1 4 0 RC1 和 Spring Boot Stormpath 1 0 2 我正在尝试使用分段文件上传 但控制器中的 MultipartFile 始终为空 当我使用 RequestPa
  • 有界通配符相关的编译器错误

    我想知道这段代码有什么问题 Map 但我试图说得更具体 这个问题在这个旧的 Apache 线程 ht
  • java.lang.ClassCastException: [B 无法转换为 java.lang.String

    我编写了一个带有字段 LoginId 和密码的实体类 我使用 AES ENCRYPT 加密密码并将其存储在数据库中 我只想检索已解密的密码 所以 我使用 AES DECRYPT 使用本机查询是在 OPen JPA 2 0 中 我写的查询是
  • iText7 将 SVG 添加到 PdfDocument 中以及可能出现的问题

    关于问题的答案 如何使用 iText7 将 SVG 添加到 PDF 这是一个链接点击这里 https stackoverflow com questions 50059456 how to add an svg to a pdf using
  • 当通过 Map.put(K, V) 添加值时,是否必须通过 Map.get(K) 返回相同的实例?

    假设您有以下代码 Map
  • 通过 ssh 发送命令并读取输出结果

    我有代码通过 ssh 连接到远程服务器并向其发送 2 个或更多命令 例如 cd export home ops bin和 viewlinkload time 20131205 19 但我没有看到命令执行 也没有收到结果 我需要获取服务器返回

随机推荐

  • idea+ApifoxUploader+Apifox真是内外双修,香

    前言 最近部门为整合后端组 前端组 测试组 需求组 产品组等组之间的工作流程 xff0c 旨在提高协调与高效 xff0c 其中之一就是希望开发组 xff08 后端 前端 xff09 开发的接口能及时更新 xff0c 测试组能做接口测试 xf
  • SpringBoot3+最新MybatisPlus+Mysql与TDengine双数据源

    前言 昨天写的idea 43 Apifox uploader插件 43 apifox新年第一天上班就上榜了 xff0c 真是不错 今天来补一篇 xff0c 本来应该是在前一篇之前发的 实际上就是最新的springBoot集成最新的mybat
  • 业务平台扩展支持TDengine时序数据库方案

    1 场景与架构 1 1业务架构 这里涉及项目隐私 xff0c 架构图不方便公开 大致情况就是 xff1a 应用层的园区畅行 生态宜居 安全守护是我方要交付的系统 平台层的物联网感知中台是我方平台 1 2数据架构 从数据架构看 xff0c 园
  • 物联网平台+业务平台基本架构设计与优化想法

    前言 目前的交付底座有点老 xff0c 而且集成的有点杂 xff0c 计划是要升级下 xff0c 先说想法 xff0c 看领导做不做 1 业务平台定位 我们的愿景 xff1a 通过物联平台赋能 xff0c 让数据产生价值 为客户提供可视化的
  • Qt 正则表达式匹配失败的一个原因

    在Qt中做正则表达式时 xff0c 遇到一个很坑爹的问题 xff0c 还是经验不足导致 在正则表达式中 xff0c 有很多需要元字符 xff0c 是需要使用普通字符加转义符号搭配使用的 比如 w xff0c s 对于这类字符 xff0c 在
  • C++对象模型(整理)

    C 43 43 对象模型 1 何为C 43 43 对象模型 xff1f C 43 43 对象模型可以概括为以下2部分 xff1a 语言中直接支持面向对象程序设计的部分 面向对象程序设计部分 xff1a 如构造函数 析构函数 虚函数 继承 x
  • MybatisPlus多表查询之零sql编写实现

    1 前言 年初节奏还没有快起来 xff0c 适合做做技术前瞻 xff0c 无论是对个人还是团队都是好事 真要说分享 xff0c 其实感觉也没啥好分享的 xff0c 就像接手新项目一样 xff0c 代码都是自己看 xff0c 别人讲的再多 x
  • 物联网设备流水入库TDengine改造方案

    1 存储机制改造 针对提出的流水查询需求 xff0c 结合设备上报数据讨论后 xff0c 初步定以下几种方案 1 1 ES gt TDengine 1 ES入库有延时 2 ES没有提供数据监听API xff08 不能主动监听 xff0c 实
  • SpringBoot3集成Kafka优雅实现信息消费发送

    前言 首先 xff0c 你的JDK是否已经是8 43 了呢 xff1f 其次 xff0c 你是否已经用上SpringBoot3了呢 xff1f 最后 xff0c 这次分享的是SpringBoot3下的kafka发信息与消费信息 一 场景说明
  • SpringBoot3集成TDengine自适应裂变存储

    前言 首先很遗憾的告诉大家 xff0c 今天这篇分享要关注才可以看了 原因是穷啊 xff0c 现在基本都是要人民币玩家了 xff0c 就比如chatGPT copilot xff0c 这些AI虽然都是可以很好的辅助编码 xff0c 但是都是
  • Github Copilot编码神剑

    前言 今天跟大家分享的其实是现在比较火的Github copilot xff0c 另外 xff0c 就是分享下它的优雅使用 其实知道用这个以后 xff0c 瑟瑟发抖 xff0c 感觉就要失业了 不过真正用过后 xff0c 其实发现这要完全取
  • 一个基于缓存的业务链路日志记录设计方案

    前言 一个简单的全接口日志设计文档 xff0c 先分享设计文档 xff0c 后面分享核心设计代码 1 对外接口设计原则 1 1 基本原则 对外接口要遵守的基本原则 xff1a 1 开闭原则 2 依赖倒置原则 3 单一职责原则 4 接口隔离原
  • 基于缓存的统一请求日志实现

    前言 昨天说的会分享方案的具体实现 xff0c 今天就来分享想核心代码吧 一 思路 我们用的是springboot组服务 xff0c 每个链路通过http请求 所以要实现全链路的日志记录 xff0c 也都是围绕sprinboot做的处理 这
  • SpringBoot集成ChatGPT实现AI聊天

    前言 ChatGPT已经组件放开了 xff0c 现在都可以基于它写插件了 但是说实话我还真没想到可以用它干嘛 xff0c 也许可以用它结合文字语音开发一个老人小孩需要的智能的说话陪伴啥的 今天我就先分享下SpringBoot结合ChatGP
  • activemq 延时队列以及不生效问题

    最近在做的项目中有一个业务涉及到了订单的有效期的问题 xff08 即订单达到一定的时间未支付完成就让该订单失效 xff09 xff0c 于是就想到了延时队列的方式 xff0c 由于项目采用的是activemq xff0c 所以就写了个act
  • elasticsearch的分布式架构原理

    对于全文检索 xff0c lucene是目前最流行的搜索库 以前我们都需要学习使用lucene 基于lucene做相关的开发 xff0c 学习倒排索引的原理 xff0c 而现在 xff0c 我们可以直接使用现成的搜索框架了 xff0c 因为
  • vscode设置代理

    1 通过命令行方式设置 参考 xff1a https liliyuanshangcaoyisuiyikurongyehuoshaobujinchunfengchuiyousheng com 2021 vscode socks5 proxy
  • springboot oa 办公系统,springboot权限系统

    springboot oa 自动化办公系统 43 springboot 完整权限管理系统合二为一 xff01 办公自动化 xff08 OA xff09 是面向组织的日常运作和管理 xff0c 员工及管理者使用频率最高的应用系统 xff0c
  • linux下的shell运算(加、减、乘、除)

    关注微信公众号 虾米聊吧 获取所有资料干货 xff0c 每天更新技术干货 xff0c 一起交流一起学习 i 61 j 43 k 等价于 i 61 96 expr j 43 k 96 i 61 j k 等价于 i 61 96 expr j k
  • 仿QQ聊天程序(java)

    简易版qq聊天 xff1a qq聊天 简易版 resourcecode cn 推荐java最新聊天项目 xff08 java仿微信聊天 xff09 java 简单仿微信聊天 springboot Garry1115的博客 CSDN博客 sp