CircleChat:基于SpringBoot和Uni-App框架的圈聊平台的设计与实现

2021-09-10 00:35李金忠薛国鹏梁源祖李志鸿钟鸣山
关键词:列表聊天框架

李 源,李金忠, 薛国鹏,梁源祖,李志鸿,钟鸣山

CircleChat:基于SpringBoot和Uni-App框架的圈聊平台的设计与实现

李 源,*李金忠, 薛国鹏,梁源祖,李志鸿,钟鸣山

(井冈山大学电子与信息工程学院,江西,吉安 343009)

本文采用新近的主流框架技术,包括SpringBoot、Vue和Uni-App等前后端框架,还采用百度地图和高德地图的地图组件接口、WebSocket全双工通信协议、SpringSecurity+JWT登录验证和Nginx反向代理等前沿技术以及MySQL和Redis数据库技术,开发了一个支持百度小程序端及H5网页移动端的圈聊平台CircleChat。该平台包括用户管理、注册登录管理、圈管理,聊天管理。在圈管理中,可创建应急圈、交友圈和固定圈等类型的圈,采用Haversine公式计算地球上任意两点间的经纬度距离以确定用户是否在所创建的圈内;在聊天管理中,采用DFA敏感词过滤算法自动过滤掉包含有敏感词的聊天信息。CircleChat平台将地理位置、地图与圈聊结合在一起,在地图上以绘画图形的方式创建圈,从而达到造物者般境界。本平台操作简单、易于维护和扩展,具有较高的安全性。

圈聊平台;SpringBoot框架;Uni-App框架;WebSocket协议;圈管理

0 引言

当前,能迅速将某地理范围周边的人拉进一个线上圈子里进行互帮互助、聊天交友和休闲娱乐等活动以解决现实生活中的一些痛点问题的社交软件仍然缺乏。比如,平常生活中,在偌大的广场、商场中人流如潮,当小孩在人群中走丢时,父母总是会很慌张,到处呼唤着孩子的名字。在寻求路人帮助时,也只能大概描述孩子相貌或者手机里找出照片,一个一个地询问路人,如此寻找方式的扩散速度是很慢的。假如这时有一款软件,能瞬间将其方圆一定范围内的人群拉进自己的一个线上应急圈里,并放上孩子照片,立刻动员所有人参与寻人行列,如此可更迅速地找到孩子。对比普通寻人方式,效率会更高,并减少了许多不确定性因素。同样在丢失物品时也能使用这种方式找寻。再比如,在同一辆火车车厢里,旅客间可能不会交流,我们可以设计一款软件,将周围的人拉入一个交友圈里,可在圈里聊天、游戏,这样的形式既不影响周围想休息的人,也能增大交际圈,扩展人脉。此外,当用户以消费者身份前往商家店铺处时,自动加入商家的固定圈内,并可获取当前商家的商品信息及促销活动等;当用户以游客的身份进入景区时,默认加入景区的固定圈内,用户可获得当前景区的人数、开放时间、景区特点、最佳路线、某建筑的历史意义和背景故事等。

为此,应以上需求,本文采用SpingBoot和Uni-App框架技术设计与实现了一个圈聊平台CircleChat,该平台提供百度小程序端和H5网页移动端,提供在地图上画图形来创建圈聊的特色功能。在CircleChat平台中,我们设计了三种圈类型,包括应急圈、交友圈和固定圈。本平台功能丰富,利用好三类圈聊的特点就能创造出不一样的玩法,可解决现实生活中的一些痛点问题,十分符合当今市场的需求。

1 开发环境与技术介绍

本文所开发的圈聊平台CirdeChat采用Tomcat 8和MySQL 5.5作为服务器和数据库,开发平台为windows平台,采用前后端分离开发模式。在JDK 8开发环境下,采用IntelliJ IDEA和Visual Studio Code开发工具,前端采用Vue和Uni-App开发界面,引用地图API接口实现定位和地图功能,后端采用SpringBoot和Mybatis作为基础开发框架,继承Redis和WebSocket等技术,项目代码交由git管理。

SpringBoot是可以快速构建一个生产级别的Spring应用程序,在AOP和IOC有着突出优势,使得Java Web程序解耦,能优雅、高效地开发应用程序[1]。

Vue 框架是一套用于构建用户界面的渐进式框架,其核心库只关注视图层,具有易于上手和便于与第三方库或既有项目整合的优点[2]。使用Vue框架渲染数据时,两层之间仅以数据进行交互,耦合度低。

Uni-App是一个基于Vue开发应用的现代化前端框架,它利用内置的组件及系统平台编译指令可以做到跨平台开发,可以让开发者使用框架内部API 实现在 Android、IOS、H5,以及百度开发者工具等多端上的产品研发及部署[3]。

JWT(Json Web Token)是一种基于JSON格式,用于Web应用环境下各方之间传递声明信息的开放标准。JWT令牌具有紧凑性和URL安全性,它的典型应用场景是在网络中传递认证用户的身份信息[4]。

WebSocket是基于HTML5提供的一种在单个TCP连接上进行全双工通讯的协议,可高效地在基于TCP连接的双向通道中实时互相发送信息。

WebSocket协议实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据[5]。

2 系统设计

2.1 系统框架结构设计

圈聊平台CircleChat是基于SpringBoot框架搭建后端,Uni-App和Vue框架设计前端,MySQL数据库用于数据存储,Redis用于数据缓存。在MVC模式下,把本系统分为表现层、控制层和持久层,各层之间的通信通过对应的接口编程实现。CircleChat平台的框架结构如图 1 所示。

图1 圈聊平台CircleChat总框架

2.2 系统功能模块设计

CircleChat是一款以聊天交友为途径而衍生出解决实际生活的一些痛点问题的圈聊平台,该平台的功能模块主要分为注册登录管理、用户管理、圈管理和聊天管理模块,如图2所示。

注册登录管理模块中,在百度小程序端,用户先登录百度账号,再完成“百度授权登录”后即可进入系统;而在H5移动端,若用户首次登录模块,用户先在注册页面下注册账号,填写邮箱后将收到的验证码填入输入框中,而后填写密码完成注册。登录时,输入账号即邮箱号,再输入密码,后台将会进行账号密码验证,通过则登录成功,失败则重新输入账号密码,如若忘记密码,可通过邮箱接收验证码进行账号验证,重新输入新密码后即完成密码重置。

用户管理模块包括权限管理、用户信息管理和关注列表管理。用户在进入系统后,可在“我的”栏目处查看并修改个人信息和管理账号信息等,并可设置权限管理,其中包括是否默认加入圈聊及是否开启消息通知;还可以查看关注列表信息,其中包括“我的关注”及“关注我的”,方便维持用户彼此之间的联系。

圈管理模块包括创建圈、显示圈和管理圈。在创建圈和显示圈中,可以以地图模式或表单模式来创建和显示不同类型的圈,包括应急圈、交友圈和固定圈,地图模式的主要功能是通过在地图上画一个圆来表示该圈包括的区域范围,在该圈的用户将会被邀请加入圈内,而表单模式是地图模式的简化,通过手动填写圈范围等信息来完成圈的创建。根据所创建的圈类型不同,圈聊的主要功能也不同,一般地,圈的范围将固定不变。应急圈是以创建者所在位置为中心,设定一个初始范围以应急解决某个紧急生活问题而临时创建的圈,其具有位置扩散性和时效即时性,当圈主人发布应急事件时,该类圈的范围会根据设定好的智能算法将圈自动扩大,从而将更多的用户拉入圈内提供线索信息,直到找到人或物时事件处理完毕将停止扩散;交友圈是以创建者所在位置为中心,设定一个距离范围以聊天交友为目的而创建的圈,其具有位置可变性和时效即时性,该类圈的位置会随着圈主人位置的变化而变化,但圈的范围大小不会改变,当超过设定时间后圈会自动解散;固定圈是以创建者所在位置为中心,设定一个固定范围以解决某个生活问题而创建的圈,其具有位置固定性和时效永久性,可用于公共场所,比如景区或店铺等,起到给前往当前场所的用户展示相关信息的作用。在管理圈中,圈的创建者可以修改圈的信息,包括圈头像、圈名称和圈简介等,还可以设置圈公告;普通用户可以加入和退出圈,还可以根据圈信息进行模糊搜索,筛选出用户想要查找的圈;在有效期未到的前提下,圈的创建者可以根据需求选择是否申请延长该圈的生命有效期,一旦超过有效期,该圈将会自动解散。

在聊天管理模块中,包括圈聊和私聊,可发送文字、表情和图片等消息以进行即时聊天、互帮互助和休闲娱乐等。在圈聊中,一个用户可以与多个用户在同一聊天室内进行即时聊天,而在私聊中,圈用户要互相关注后才能进行一对一的即时聊天。

图2 圈聊平台CircleChat功能模块图

2.3 数据库设计

CircleChat平台紧扣社交聊天、互帮互助这一需求,以用户账户信息表为核心设计数据库表,形成圈信息表、用户与圈的关系表、圈聊聊天记录表、私聊聊天记录表、邀请记录表、用户个人信息表、用户设置表和用户关注表,各表之间相辅相成,其数据库设计的物理模型如图3所示。项目数据库严格遵守数据库的三大范式进行设计,各表之间通过外键进行关联,极大减少了数据冗余,为项目代码的编写奠定了良好的基础。

图3 CircleChat平台数据库中各表的物理模型图

3 系统主要功能实现

本文所设计的圈聊平台CircleChat包括百度小程序端及H5网页移动端,两端系统主要区别仅为登录方式不同,其他功能实现上无明显区别。本系统主要功能模块的实现阐述包括注册登录管理模块、圈管理模块和聊天管理模块。

3.1 注册登录管理模块

注册登录管理模块在CircleChat系统中起到安全防护的作用,遏止了数据篡改和账号盗用等恶意攻击。百度小程序端参照百度小程序开发手册,结合百度账号实现安全验证完成登录,如图4所示。而H5移动端采用的是token验证的方式进行登录验证,如图5所示。当用户输入账号及密码后,后台将密码进行MD5加密后匹配数据库中存储的已加密密码,匹配成功后采用JWT技术生成两个有时效性的token串存储于redis缓存中,一个为时效短的accessToken,用于登录状态的验证。当前端请求接口时,后端自行判断当前accessToken是否过期,而非采用以往的前端将token信息传入后端再判断,避免了请求接口时token被拦截导致信息丢失或恶意攻击;另一个为时效长的refreshToken,用于刷新accessToken,当accessToken过期时并且refreshToken未过期时,后台系统将会重新生成一个accessToken维持登录状态,当refreshToken快到时效期时,若用户还处于活跃阶段,系统将会更新refreshToken,使得登录状态能维持更久,若refreshToken过期,则用户需重新登录后才能进入系统。

图4 百度授权登录页面

图5 H5移动端登录页面

3.2 圈管理模块

圈管理模块包括管理圈、表单模式和地图模式下圈的创建及显示,其中涉及到地球上任意两点经纬度距离的计算。传统的表单模式下创建圈是通过手动填写圈范围等信息的方式进行创建,拥有简约风格,也能更精确地输入圈范围的大小,显示模式是以列表的方式排列在页面上,可根据圈的类型进行筛选,为了页面的流畅度提升用户的体验,后端采用了分页查询,前端采用懒加载及骨架屏技术。在地图模式下,以一种直观的方式创建圈,即通过用手划屏幕的方式拉取圆的大小,将想要包括的建筑等区域用圆圈覆盖,以上帝视角感受所创建圈的大小;前端通过调用地图接口将地图组件引入项目,添加监控事件监听用户手势,确定圆心和半径,并传入后端,后端将数据存入数据库。完成创建后可在地图上查看、显示“附近的圈”,若用户处于某圈的范围内则可选择加入该圈,也可在表单模式下查看、显示“附近的圈”并完成筛选。

3.2.1 地图模式的实现

地图模式分为创建圈和显示“附近的圈”两个模块组成,地图组件由前端获取百度地图和高德地图的地图接口实现。在创建圈后,所创建的圈将会在“附近的圈”模块中呈现,如图6所示,前端通过监听页面事件,获取圈的半径范围,而后传递给后端,后端获取到数据将其存入数据库,即完成创建。在显示“附近的圈”模块中,调用后端接口,获取当前用户位置,查询附近范围内的圈,呈现在页面上。为保持页面的美观和简洁,当地图上一些圈的中心相近且范围相似,则采用重合的方式,将圈归纳,用数字代表该点所存在圈的数量,如图7所示。

图6 地图模式下创建圈

图7 地图模式下显示“附近的圈”

3.2.2 地球上任意两点经纬度距离的计算

由于CircleChat平台要频繁使用定位系统,为使获取到的经纬度与实际距离对应起来,圈中用户位置经纬度与实际距离的关系转换采用了一种距离转换算法,该算法的核心是Haversine公式[5]。设有两点赤道坐标分别为p1 (α1 ,δ1)和p2 (α2 ,δ2),采用Haversine公式计算地球上两点之间的经纬度距离d,计算方法如公式(1)所示,其中,变量α1和δ1分别表示p1点的经度和纬度,而α2和δ2分别表示p2点的经度和纬度。

3.3 聊天管理模块

聊天管理模块的实现主要包括聊天功能的实现、敏感词过滤算法的实现、消息列表展示的实现和圈聊成员列表展示的实现,它是CircleChat平台的基石,其余模块都得在此基础上构建才有其存在的意义。

3.3.1 聊天功能

传统聊天即时通讯是采用AJAX轮询方式,这种方式具有很明显的缺点,即浏览器需要不断地向服务器发出请求,然而HTTP请求可能包含较长的头部,但其中真正需要有效的数据只是很小的一部分,显然这样会浪费很多的带宽等资源。而在WebSocket协议中,服务器与浏览器只用完成一次HTTP握手,两端就能创建持久性的长连接,并能进行双向的数据交互,可使得客户端与服务器端的数据交互变得更加简单,允许服务器端主动向客户端推送消息。为此,我们采用基于Spring WebSocket 的方式实现WebSocket协议以完成CircleChat平台的聊天即时通讯。客户端发送消息的流程图如图8所示。

图8 客户端发送消息流程图

在WebSocket协议中,发送消息只是将单次消息进行单次发送,如果是群聊则需要进行多次发送,循环调用该方法,每一次都相当于一次私聊。例如,群内有n位用户,那么将要进行(n-1)次发送消息,若n的数值比较小,则每个人都几乎同时收到消息,若n的数值比较大,那处于循环头和循环尾的用户收到消息的时间差距就会很大,这显然不是所想要的即时通讯。为了解决这个时间差问题,我们采用并发编程异步非阻塞编程的思想进行处理。思路如下:采用Executor框架技术控制线程创建与销毁的开销,将任务映射为固定数量的线程,配置好异步线程池后,用@Async注解标记方法体达到异步的效果,标记后的方法在执行时会独立出一条线程进行执行,底层通过AOP和异步线程池实现。为优化发送消息的运行效率,可以从减少发送人数的方式进行优化,只将消息发送给在线用户,而对于其余不在线的用户,则可直接将消息存储在数据库中,其余用户再次上线时可通过查询数据库的方式获取聊天记录。对于在线用户的信息存储,本文采用Java的一种并发容器ConcurrentHashMap来实现。因为ConcurrentHashMap是线程安全且高效的HashMap,在JDK8版本中,ConcurrentHashMap得到了升级,摈弃了原来以分段锁的结构来保证线程安全,取而代之的是采用CAS无锁算法与synchronized来保证线程安全且其数据结构变更为数组+链表+红黑树来提高性能。

3.3.2 敏感词过滤算法

在聊天页面,对聊天消息进行了敏感词过滤。每当用户所发的消息中涵盖了敏感词库中的某一词,则将敏感词替代成“*”号处理,其中敏感词过滤算法采用的是DFA算法[7],即确定有穷自动机,该算法是一种能高效地在信息源头、传播路径及接收端过滤经人工干扰后的敏感词。DFA的匹配特性使得基于DFA的正则表达式匹配是以“文本主导”的,由于DFA在进行下一步跳转时,其后继状态确定,通过event和当前的state来得到下一个state。因此,基于DFA的正则表达式匹配速度非常快,但缺点是增大了其空间复杂度。

下面从理论上推导时间复杂度,首先假定消息文本是等长的,长度为lengthA,每个敏感词的长度相同,长度为lengthB,敏感词的个数是n。由于DFA算法的核心是构建一棵多叉树,我们已假设敏感词的长度相同,所以树的最大深度为lengthB,那么我们可以说从消息文本中的某个位置(字节)开始的某个子串是否在敏感词树中,最多只用经过lengthB次匹配,也就是说判断一个消息文本中是否有敏感词的时间复杂度是lengthA * lengthB。而普通的算法是使用for循环对每一个敏感词依次在消息文本中进行查找,假如使用的是KMP算法,那么时间复杂度为(lengthA+lengthB)*n。综上所述,DFA算法的时间复杂度与敏感词的个数无关,所以速度上占明显优势。

敏感词过滤算法的具体实现步骤如下:

步骤1 将敏感词库构建成一个类似于一颗一颗的树,这样判断一个词是否为敏感词时就大大减少了检索的匹配范围。

步骤2 执行基于DFA的正则模式匹配算法。

步骤3 将文本消息中的敏感词替换成“*”字符,即完成过滤的实现。

3.3.3 消息列表展示

在消息列表栏中显示当前用户的圈聊列表和私聊列表,如图9所示。消息列表按照圈聊及私聊的最后一条消息的发送时间排序,当有新消息加入时,该圈聊或私聊的栏目就会到列表的首位上。由于私聊聊天记录和圈聊聊天记录并不存储在同一表内,所以需要分别从数据库中查找私聊记录和圈聊记录,并合并在一起,再通过时间进行排序,考虑到查询私聊记录和圈聊记录时互不影响,所以可以使用异步编程的思想来提高运行效率。

图9 消息列表

图10 成员列表

基于异步编程思想,CircleChat平台通过开放多条线程分别获取私聊列表和圈聊列表,最终再将获取到的数据进行合并,合并后通过重写Comparator,根据最后一条消息的发送时间实现自定义排序。当一个线程依赖另一个线程时,调用CompletableFuture 的静态工厂方法thenApply 来将这两个线程串行化,使用ForkJoinPool.commonPool()作为它的线程池执行异步代码,这样将大大提高代码的运行效率,且该异步操作有返回值。

3.3.4 圈聊成员列表展示

在圈聊成员列表展示中,需要包含当前聊天圈内的所有用户,并按照用户昵称的中文拼音首字母或英文字母按照字母顺序依次排序,然后展示在列表中,如图10所示。首先通过开源拼音工具类JPinyin获取首字母,然后将数据按照首字母顺序排序,采用TreeMap集合存储首字母及成员信息数据,并根据键值自定义排序以重写Comparable 接口。若开头为中文或英文,则添加到[A~Z]的字母集合中,若开头为数字、符号等其它非字母类,则添加至[#]非字母集合中,待字母集合筛选完毕后,将非字母集合用add()方法添加至集合末位,这样就防止了集合通过key值比较时将[#]集放置在开头,从而影响页面布局。在前端页面加载中,采用懒加载的方式提前缓存用户头像,从而加速页面加载速度。

4 总结和展望

为了基于软件开发来利用移动互联网以有效解决现实生活中的一些痛点问题,本文设计和实现了一个圈聊平台CircleChat。该平台使用SpringBoot、Vue和Uni-App框架和配合前端UI框架组件等主流框架技术完成整体开发,采用百度地图和高德地图的地图组件接口、WebSocket全双工通信协议、SpringSecurity+JWT登录验证和Nginx反向代理等前沿技术以及MySQL等数据库技术,开发了一个支持百度小程序端及H5网页移动端的圈聊平台。CircleChat平台将地理位置、地图与圈聊结合在一起,通过在地图上绘画图形的方式创建圈,使用户直观地认识到自身所在的地理位置和圈所覆盖的范围,这可极大地方便用户创建圈以迅速与周围的用户进行圈聊。

CircleChat平台的特色主要体现在:

1)市面上未曾出现一款与地图相结合的社交软件。

2)能通过画图形来创建圈并一键邀请周围用户加入圈聊。

3)与地理位置完美契合,处于圈所属范围外的用户将无法加入圈聊。

4)急圈能根据拟定算法随时间的扩散自动扩大圈范围,逐渐邀请更多的用户参与援助提供线索。

我们所开发的圈聊平台CircleChat已在校园内外进行了推广,现用户量已达千量级,体验过高并发下场景,在众多用户同时在线的环境下平台还欠缺抗压能力,后期也会着重考虑用户体验方面的问题,从而使用户能更为流畅地体验各项功能。后续功能的添加主要有以下方面:

1)为每个圈聊及个人用户加入二维码标识,并且添加识别二维码功能,目的是为了方便用户更快地加入圈聊及关注个人。

2)添加独立聊天室的新类型圈聊,该圈聊不限地理位置,在任一位置的用户都能加入,圈主人可以设置该聊天圈是否允许被外人搜索,当不允许外人搜索的时候,其他用户则无法通过搜索获取到该聊天室的信息,也无法加入,唯有该圈主分享该聊天圈的二维码时其余用户才能加入。该功能方便于处在不同地点的用户有专属于他们自己的聊天室,且该聊天室不限有效期,可长期存在。

3)在聊天室内添加娱乐小功能,如:抽取幸运儿玩法,在该聊天室内随机抽取一位用户为幸运儿,至于该幸运儿得到什么取决于用户如何定义。增强软件的趣味性和高可玩性,在此方面还有许多功能可以继续往下延伸。

4)在地图模式创建圈的功能上,增加自定义图形,不仅仅限制于圆圈,让地理范围内的图形形状更加多样性,这样能适应更多的场景。

5)新增图形匹配功能,将某一建筑或场地的平铺图(带周边显著建筑且带比例尺)传入至系统中,系统匹配图形自动创建符合该场地的区域范围的圈聊。例如公园、景点等公共场所,可传入该场所的平面图,系统将自动生成与该平面图等区域的图形范围,省去了用户自己精细勾勒图形,更快更便捷且更精准地在地图上圈出了该场所的范围。

[1] 陈瑞. 基于Springboot高并发Java Web开发模式[J].电脑编程技巧与维护,2019(4):27-30.

[2] 薛国鹏,李金忠,刘宇,等. 基于Flask和Spring Boot框架的校园点歌平台的设计与实现[J].井冈山大学学报:自然科学版,2020,41(5):49-58.

[3] 张晓明. 基于uni-app和Android的学生手机管控系统的设计与实现[D].兰州:兰州大学,2020.

[4] 范展源,罗福强. JWT认证技术及其在WEB中的应用[J].数字技术与应用,2016(2):114.

[5] 包文祥,胡广朋. 基于WebSocket的实时通信机制的设计与实现[J].计算机与数字工程, 2019, 47(7):1836-1840.

[6] 樊东卫,何勃亮,李长华,等. 球面距离计算方法及精度比较[J].天文研究与技术, 2019,16(1):69-76.

[7] 吴珊,李英祥,徐鸿雁,等. 基于改进的Trie树和DFA的敏感词过滤算法[J].计算机应用研究, 2020(9):240.

CIRCLECHAT: DESIGN AND IMPLEMENTATION OF CIRCLE CHAT PLATFORM BASED ON SPRINGBOOT AND UNI-APP FRAMEWORKS

LI Yuan,*LI Jin-zhong, XUE Guo-peng, LIANG Yuan-zu, LI Zhi-hong, ZHONG Ming-shan

(School of Electronic and Information Engineering, Jinggangshan University, Ji'an, Jiangxi 343009, China)

A circle chat platform supporting Baidu App terminal and H5 web mobile terminal, CircleChat, is developed by using the latest mainstream framework technologies, including SpringBoot, Vue, Uni-App and other front-end framework, and some frontier technologies, also including the map component interface of Baidu map and Gaode map, WebSocket full duplex communication protocol, SpringSecurity and JWT login verification, Nginx reverse proxy, as well as MySQL and Redis database technologies. The platform includes user management, registration and login management, circle management, and chat management. In circle management, emergency circles, friend circles and fixed circles can be created. The Haveline formula is used to calculate the longitude and latitude distance between any two points on the earth to determine whether the user is in the created circle; In chat management, the DFA sensitive word filtering algorithm is used to automatically filter out the chat information containing sensitive words. The platform of CircleChat combines geographic location, map and circle chat, and creates circles by drawing graphics on the map, so as to achieve the realm of creator. This platform is simple to operate, easy to maintain and expand in functions, and has high security.

circle chat platform; SpringBoot framework; Uni-App framework; WebSocket protocol; circle management

TP311

A

10.3669/j.issn.1674-8085.2021.03.012

1674-8085(2021)03-0064-08

2021-02-07;

2021-04-19

江西省教育科学“十三五”规划项目(20YB118)

李 源(1999-),男,江西赣州人,井冈山大学电子与信息工程学院计算机科学与E-mail技术专业2018级本科生(E-mail: liryan.ly@gmail.com);

*李金忠(1976-),男, 江西吉安, 博士, 副教授, 主要从事大数据与人工智能、信息检索研究(Email: lijinzhong@jgsu.edu.cn);

薛国鹏(1999-),男, 江西赣州人, 井冈山大学电子与信息工程学院网络工程专业2018级本科生(E-mail: xueguopeng123@gmail.com);

梁源祖(1999-),男, 江西赣州人, 井冈山大学电子与信息工程学院计算机科学与技术专业2018级本科生(E-mail:liangyuanzu@gmail.com);

李志鸿(2001-),男, 江西上饶人, 井冈山大学电子与信息工程学院软件工程专业2019级本科生(E-mail: lzh_create@qq.com);

钟鸣山(2001-),男, 江西赣州人, 井冈山大学电子与信息工程学院软件工程专业2019级本科生(E-mail: 1909104012@jgsu.edu.cn).

猜你喜欢
列表聊天框架
有机框架材料的后合成交换
框架
Rn上的测度双K-框架
学习运用列表法
扩列吧
我就是不想跟你聊天了
敞开门聊天
列表画树状图各有所长
我国在WYO框架下面对的贸易保护现状及应对
2011年《小说月刊》转载列表