项目介绍: JeecgBoot是一款基于代码生成器的低代码开发平台!前后端分离架构SpringBoot2。x,SpringCloud,AntDesignVue,Mybatisplus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发! JeecgBoot引领新的低代码开发模式(OnlineCoding代码生成器手工MERGE),帮助解决Java项目70的重复工作,让开发更多关注业务。既能快速提高效率,节省研发成本,同时又不失灵活性! JeecgBoot提供了一系列低代码模块,实现在线开发真正的零代码:Online表单开发、Online报表、报表配置能力、在线图表设计、大屏设计、移动配置能力、表单设计器、在线设计流程、流程自动化配置、插件能力(可插拔)等等! JEECG宗旨是:简单功能由OnlineCoding配置实现,做到零代码开发;复杂功能由代码生成器生成进行手工Merge实现低代码开发,既保证了智能又兼顾灵活;实现了低代码开发的同时又支持灵活编码,解决了当前低代码产品普遍不灵活的弊端! JEECG业务流程:采用工作流来实现、扩展出任务接口,供开发编写业务逻辑,表单提供多种解决方案:表单设计器、online配置表单、编码表单。同时实现了流程与表单的分离设计(松耦合)、并支持任务节点灵活配置,既保证了公司流程的保密性,又减少了开发人员的工作量。适用项目 JeecgBoot低代码开发平台,可以应用在任何J2EE项目的开发中,尤其适合SAAS项目、企业信息管理系统(MIS)、内部办公系统(OA)、企业资源计划系统(ERP)、客户关系管理系统(CRM)等,其半智能手工Merge的开发方式,可以显著提高开发效率70以上,极大降低开发成本。技术架构:开发环境语言:Java8IDE(JAVA):IDEAEclipse安装lombok插件IDE(前端):WebStorm或者IDEA依赖管理:Maven数据库:MySQL5。7Oracle11gSqlserver2017缓存:Redis后端基础框架:SpringBoot2。3。5。RELEASE微服务框架:SpringCloudAlibaba2。2。3。RELEASE持久层框架:Mybatisplus3。4。1安全框架:ApacheShiro1。7。0,Jwt3。11。0微服务技术栈:SpringCloudAlibaba、Nacos、Gateway、Sentinel、Skywarking数据库连接池:阿里巴巴Druid1。1。22缓存框架:redis日志打印:logback其他:fastjson,poi,Swaggerui,quartz,lombok(简化代码)等。前端Vue2。6。10,Vuex,VueRouterAxiosantdesignvuewebpack,yarnvuecropper头像裁剪组件antvg2AlipayAntV数据可视化图表Viservueantvg2封装实现eslint,vuecli3。2。1vueprintnb打印功能模块系统管理用户管理角色管理菜单管理权限设置(支持按钮权限、数据权限)表单权限(控制字段禁用、隐藏)部门管理我的部门(二级管理员)字典管理分类字典系统公告职务管理通讯录多租户管理消息中心消息管理模板管理代码生成器(低代码)代码生成器功能(一键生成前后端代码,生成后无需修改直接用,绝对是后端开发福音)代码生成器模板(提供4套模板,分别支持单表和一对多模型,不同风格选择)代码生成器模板(生成代码,自带excel导入导出)查询过滤器(查询逻辑无需编码,系统根据页面配置自动生成)高级查询器(弹窗自动组合查询条件)Excel导入导出工具集成(支持单表,一对多导入导出)平台移动自适应支持系统监控Gateway路由网关性能扫描监控监控RedisTomcatjvm服务器信息请求追踪磁盘监控定时任务系统日志消息中心(支持短信、邮件、微信推送等等)数据日志(记录数据快照,可对比快照,查看数据变更情况)系统通知SQL监控swaggerui(在线接口文档)报表示例曲线图饼状图柱状图折线图面积图雷达图仪表图进度条排名列表等等大屏模板作战指挥中心大屏物流服务中心大屏常用示例自定义组件对象存储(对接阿里云)JVXETable示例(各种复杂ERP布局示例)单表模型例子一对多模型例子打印例子一对多TAB例子内嵌table例子常用选择组件异步树table接口模拟测试表格合计示例异步树列表示例一对多JEditableJEditable组件示例图片拖拽排序图片翻页图片预览PDF预览分屏功能封装通用组件行编辑表格JEditableTable省略显示组件时间控件高级查询用户选择组件报表组件封装字典组件下拉多选组件选人组件选部门组件通过部门选人组件封装曲线、柱状图、饼状图、折线图等等报表的组件(经过封装,使用简单)在线code编辑器上传文件组件验证码组件树列表组件表单禁用组件等等更多页面模板各种高级表单各种列表效果结果页面异常页面个人页面高级功能系统编码规则提供单点登录CAS集成方案提供APP发布方案集成Websocket消息通知机制Online在线开发(低代码)Online在线表单功能已开放Online代码生成器功能已开放Online在线报表功能已开放Online在线图表(暂不开源)Online图表模板配置(暂不开源)Online布局设计(暂不开源)多数据源管理功能已开放积木报表设计器(低代码)打印设计器数据报表设计图形报表设计(支持echart)大屏设计器(暂不开源)流程模块功能(暂不开源)流程设计器在线表单设计我的任务ahrefhttps:www。q578。coml140targetblankclassinfotextkey历史a流程ahrefhttps:www。q578。coml140targetblankclassinfotextkey历史a流程流程实例管理流程监听管理流程表达式我发起的流程我的抄送流程委派、抄送、跳转其他模块更多功能开发中微服务整体解决方案(2。4版本) 1、服务注册和发现Nacos 2、统一配置中心Nacos 3、路由网关gateway(三种加载方式) 4、分布式httpfeign 5、熔断和降级Sentinel 6、分布式文件Minio、阿里OSS 7、统一权限控制JWTShiro 8、服务监控SpringBootAdmin 9、链路跟踪Skywarking 10、消息中间件RabbitMQ 11、分布式任务xxljob 12、分布式事务Seata 13、分布式日志elkkafa 14、支持dockercompose、k8s、jenkins 15、CAS单点登录 16、路由限流微服务架构图 微服务架构图JeecgBoot产品功能蓝图 功能蓝图项目下载和运行拉取项目代码gitclonehttps:github。comzhangdaiscottjeecgboot。gitcdjeecgbootantdesignjeecgvue安装node。js切换到antdesignjeecgvue文件夹下安装yarnnpminstallgyarn下载依赖yarninstall启动yarnrunserve编译项目yarnrunbuildLintsandfixesfilesyarnrunlint系统效果大屏模板 输入图片说明 输入图片说明PC端 在线接口文档 报表 流程 手机端 PAD端 源码获取方式:关注小编转发文章私信【666】免费获取 重要的事情说三遍,转发转发转发,一定要记得点赞转发哦!!! JavaString类的5道面试题,这五道题,我自己在面试过程中亲身经历过几道题目,学完了这篇,我才焕然大悟,才知道为什么是这个答案,本篇就带你了解这些题的答案为什么是这样。1。判定定义为String类型的st1和st2是否相等,为什么packagestring;publicclassDemo2String{publicstaticvoidmain(String〔〕args){Stringst1abc;Stringst2abc;System。out。println(st1st2);System。out。println(st1。equals(st2));}} 输出结果: 第一行:true 第二行:true分析: 先看第一个打印语句,在Java中这个符号是比较运算符,它可以基本数据类型和引用数据类型是否相等,如果是基本数据类型,比较的是值是否相等,如果是引用数据类型,比较的是两个对象的内存地址是否相等。字符串不属于8中基本数据类型,字符串对象属于引用数据类型,在上面把abc同时赋值给了st1和st2两个字符串对象,指向的都是同一个地址,所以第一个打印语句中的比较输出结果是true 然后我们看第二个打印语句中的equals的比较,我们知道,equals是Object这个父类的方法,在String类中重写了这个equals方法,在JDKAPI1。6文档中找到String类下的equals方法,点击进去可以看大这么一句话将此字符串与指定的对象比较。当且仅当该参数不为null,并且是与此对象表示相同字符序列的String对象时,结果才为true。 注意这个相同字符序列,在后面介绍的比较两个数组,列表,字典是否相等,都是这个逻辑去写代码实现。由于st1和st2的值都是abc,两者指向同一个对象,当前字符序列相同,所以第二行打印结果也为true。 下面我们来画一个内存图来表示上面的代码,看起来更加有说服力。 内存过程大致如下:运行先编译,然后当前类Demo2String。class文件加载进入内存的方法区第二步,main方法压入栈内存常量池创建一个abc对象,产生一个内存地址然后把abc内存地址赋值给main方法里的成员变量st1,这个时候st1根据内存地址,指向了常量池中的abc。前面一篇提到,常量池有这个特点,如果发现已经存在,就不在创建重复的对象运行到代码Stringst2abc,由于常量池存在abc,所以不会再创建,直接把abc内存地址赋值给了st2最后st1和st2都指向了内存中同一个地址,所以两者是完全相同的。2。下面这句话在内存中创建了几个对象Stringst1newString(abc); 答案是:在内存中创建两个对象,一个在堆内存,一个在常量池,堆内存对象是常量池对象的一个拷贝副本。分析: 我们下面直接来一个内存图。 当我们看到了new这个关键字,就要想到,new出来的对象都是存储在堆内存。然后我们来解释堆中对象为什么是常量池的对象的拷贝副本。abc属于字符串,字符串属于常量,所以应该在常量池中创建,所以第一个创建的对象就是在常量池里的abc。 第二个对象在堆内存为啥是一个拷贝的副本呢,这个就需要在JDKAPI1。6找到String(Stringoriginal)这个构造方法的注释:初始化一个新创建的String对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。所以,答案就出来了,两个对象。3。判定以下定义为String类型的st1和st2是否相等packagestring;publicclassDemo2String{publicstaticvoidmain(String〔〕args){Stringst1newString(abc);Stringst2abc;System。out。println(st1st2);System。out。println(st1。equals(st2));}} 答案:false和true 由于有前面两道提内存分析的经验和理论,所以,我能快速得出上面的答案。比较的st1和st2对象的内存地址,由于st1指向的是堆内存的地址,st2看到abc已经在常量池存在,就不会再新建,所以st2指向了常量池的内存地址,所以判断结果输出false,两者不相等。第二个equals比较,比较是两个字符串序列是否相等,由于就一个abc,所以完全相等。内存图如下 4。判定以下定义为String类型的st1和st2是否相等packagestring;publicclassDemo2String{publicstaticvoidmain(String〔〕args){Stringst1abc;Stringst2abc;System。out。println(st1st2);System。out。println(st1。equals(st2));}} 答案是:true和true 分析: a,b,c三个本来就是字符串常量,进行符号拼接之后变成了abc,abc本身就是字符串常量(Java中有常量优化机制),所以常量池立马会创建一个abc的字符串常量对象,在进行st2abc,这个时候,常量池存在abc,所以不再创建。所以,不管比较内存地址还是比较字符串序列,都相等。更多面试题,欢迎关注公众号Java面试题精选5。判断以下st2和st3是否相等packagestring;publicclassDemo2String{publicstaticvoidmain(String〔〕args){Stringst1ab;Stringst2abc;Stringst3st1c;System。out。println(st2st3);System。out。println(st2。equals(st3));}} 答案:false和true分析: 上面的答案第一个是false,第二个是true,第二个是true我们很好理解,因为比较一个是abc,另外一个是拼接得到的abc,所以equals比较,这个是输出true,我们很好理解。那么第一个判断为什么是false,我们很疑惑。同样,下面我们用API的注释说明和内存图来解释这个为什么不相等。 首先,打开JDKAPI1。6中String的介绍,找到下面图片这句话。 关键点就在红圈这句话,我们知道任何数据和字符串进行加号()运算,最终得到是一个拼接的新的字符串。上面注释说明了这个拼接的原理是由StringBuilder或者StringBuffer类和里面的append方法实现拼接,然后调用toString()把拼接的对象转换成字符串对象,最后把得到字符串对象的地址赋值给变量。结合这个理解,我们下面画一个内存图来分析。 大致内存过程常量池创建ab对象,并赋值给st1,所以st1指向了ab常量池创建abc对象,并赋值给st2,所以st2指向了abc由于这里走的的拼接方法,所以第三步是使用StringBuffer类的append方法,得到了abc,这个时候内存0x0011表示的是一个StringBuffer对象,注意不是String对象。调用了Object的toString方法把StringBuffer对象装换成了String对象。把String对象(0x0022)赋值给st3 所以,st3和st2进行判断结果是不相等,因为两个对象内存地址不同。总结: 这篇的面试题,完全就是要求掌握JDKAPI中一些注解和原理,以及内存图分析,才能得到正确的结果,我承认是画内存图让我理解了答案为什么是这样。画完内存图之后,得到答案,你确实会发现很有趣,最后才会有原来如此的感叹。