基于spring boot2的个人博客系统

welcome rodert

需要项目请直接到文章末尾获取

简介

基于spring boot2、mybatis、bootstrap开发的个人博客系统。下面做了功能和相关技术的描述,适合初学spring boot的各位,如有问题欢迎留言。

 

项目描述

博客系统分为两大模块:

1.博客前台页面,游客可以查看博主发表的文章,也可以注册后登录对博主文章进行评论

2.博客系统后台管理,管理员登录后可以发表,删除,修改文章,也可以对游客信息进行查看,修改等操作

 

运行环境

JDK8、MySQL5.6、IntelliJ IDEA、Maven 

 

相关技术

核心技术:

Spring Boot2、MyBatis、Bootstrap、jQuery

 

项目截图

 

image.png

image.png

操作说明

如果使用原配置及数据库文件,可以使用一下方式登录

首页:http://127.0.0.1:8080/

账号:zhangsan zhangsan 


后台:http://127.0.0.1:8080/admin/login

账号:admin admin

系统截图

前台页面

image.png 首页

游客可以注册、登录、评论

image.png

image.png

image.png

 

后台页面

image.png

image.png

image.png

image.png

image.png

更多功能自取

 

申明:项目来源网络,如有侵权,请联系。

转载是一种动力 分享是一种美德

 

—END—

rodert

更多文章后面会持续分享,有特别需要可以提前留言。

看后三连不迷路

 

SQL文件:


 
 
  1. /*
  2. Navicat MySQL Data Transfer
  3. Source Server : localhost
  4. Source Server Version : 50716
  5. Source Host : localhost:3306
  6. Source Database : sb_blog
  7. Target Server Type : MYSQL
  8. Target Server Version : 50716
  9. File Encoding : 65001
  10. Date: 2020-04-11 14:45:10
  11. */
  12. SET FOREIGN_KEY_CHECKS= 0;
  13. -- ----------------------------
  14. -- Table structure for admin
  15. -- ----------------------------
  16. DROP TABLE IF EXISTS `admin`;
  17. CREATE TABLE `admin` (
  18. `id` int( 10) NOT NULL AUTO_INCREMENT COMMENT '主键',
  19. `username` varchar( 100) NOT NULL COMMENT '管理员账户',
  20. `password` varchar( 100) DEFAULT NULL COMMENT '密码',
  21. `nickname` varchar( 100) DEFAULT NULL COMMENT '昵称',
  22. `email` varchar( 100) DEFAULT NULL COMMENT '邮箱',
  23. `status` int( 10) DEFAULT '0' COMMENT '状态',
  24. `is_supper` int( 10) DEFAULT '0' COMMENT '是否超级管理员',
  25. `create_time` varchar( 100) DEFAULT NULL COMMENT '创建时间',
  26. `update_time` varchar( 100) DEFAULT NULL COMMENT '更新时间',
  27. `delete_time` varbinary( 100) DEFAULT NULL COMMENT '软删除时间',
  28. `isdel` int( 10) DEFAULT '0' COMMENT '逻辑删除标记',
  29. PRIMARY KEY ( `id`) USING BTREE
  30. ) ENGINE=MyISAM AUTO_INCREMENT= 4 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
  31. -- ----------------------------
  32. -- Records of admin
  33. -- ----------------------------
  34. INSERT INTO `admin` VALUES ( '1', 'admin', 'admin', '超级管理员', 'admin@qq.com', '0', '1', '2020-02-28 13:30:11', null, null, '0');
  35. INSERT INTO `admin` VALUES ( '2', 'zhangfei', 'admin', '张飞管理', 'zhangfei@qq.com', '0', '0', '2020-02-28 13:31:52', null, null, '0');
  36. -- ----------------------------
  37. -- Table structure for article
  38. -- ----------------------------
  39. DROP TABLE IF EXISTS `article`;
  40. CREATE TABLE `article` (
  41. `id` int( 10) NOT NULL AUTO_INCREMENT COMMENT '主键',
  42. `title` varchar( 100) DEFAULT NULL COMMENT '标题',
  43. `artdesc` text COMMENT '概要',
  44. `tags` varchar( 100) DEFAULT NULL COMMENT '标签',
  45. `content` longtext COMMENT '内容',
  46. `is_top` int( 10) DEFAULT '0' COMMENT '是否推荐',
  47. `cate_id` int( 10) NOT NULL COMMENT '所属导航id',
  48. `create_time` varchar( 100) DEFAULT NULL COMMENT '创建时间',
  49. `update_time` varchar( 100) DEFAULT NULL COMMENT '更新时间',
  50. `delete_time` varchar( 100) DEFAULT NULL COMMENT '软删除',
  51. `isdel` int( 10) DEFAULT '0' COMMENT '软删除标记位',
  52. `member_id` int( 10) DEFAULT NULL COMMENT '添加人员id',
  53. `viewnum` int( 100) DEFAULT '0' COMMENT '浏览次数',
  54. `commentnum` int( 100) DEFAULT '0' COMMENT '评论次数',
  55. `authorname` varchar( 20) DEFAULT NULL COMMENT '文章作者',
  56. PRIMARY KEY ( `id`) USING BTREE
  57. ) ENGINE=MyISAM AUTO_INCREMENT= 8 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
  58. -- ----------------------------
  59. -- Records of article
  60. -- ----------------------------
  61. INSERT INTO `article` VALUES ( '1', 'SpringBoot框架原理', 'SpringBoot框架原理', 'Springboot|框架|原理', '<p>一、入门</p><p>1.简介</p><p>Spring Boot是一个简化Spring开发的框架。用来监护spring应用开发,约定大于配置,去繁就简,just run 就能创建一个独立的,产品级的应用。</p><p>我们在使用Spring Boot时只需要配置相应的Spring Boot就可以用所有的Spring组件,简单的说,spring boot就是整合了很多优秀的框架,不用我们自己手动的去写一堆xml配置然后进行配置。从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。</p><p>2.优点</p><div><img width=\"485px\" src=\"https://ss0.baidu.com/6ONWsjip0QIZ8tyhnq/it/u=899973693,1238735383&fm=173&app=49&f=JPEG?w=485&h=202&s=1E8A762395C04CEA085DC0DB0100C0B0\"></div><p>3.单体应用与微服务</p><p>单体应用是把所有的应用模块都写在一个应用中,导致项目越写越大,模块之间的耦合度也会越来越高。微服务是一种架构风格,用微服务可以将应用的模块单独部署,对不同的模块进行不同的管理操作,不同的模块生成小型服务,每个功能元素最后都可以成为一个可以独立替换、独立升级的功能单元,各个小型服务之间通过http进行通信。</p><p>4.Spring Boot的核心特点</p><p>·微服务:</p><p>使用Spring Boot可以生成独立的微服务功能单元</p><p>·自动配置:</p><p>针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置</p><p>·起步依赖:</p><p>告诉Spring Boot需要什么功能,它就能引入需要的库。</p><p>·命令行界面:</p><p>这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。</p><p>·Actuator:</p><p>让你能够深入运行中的Spring Boot应用程序。</p><p>5.简单案例:使用maven创建HelloWorld项目</p><div><img width=\"439px\" src=\"https://ss0.baidu.com/6ONWsjip0QIZ8tyhnq/it/u=3842725662,3686477038&fm=173&app=49&f=JPEG?w=439&h=184&s=6752E53A17BB40285E51B4CA0100C0B1\"></div><p>第一步:首先要配置Spring Boot 依赖</p><p><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version> </parent>Spring Boot的版本仲裁中心;以后我们导入依赖默认是不需要写版本。(没有在dependencies里面管理的依赖自然需要声明版本号)<dependencies> <dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies></p><p>spring-boot-starter-web:</p><p>spring-boot-starter:spring-boot场景启动器。帮我们导入了web模块正常运行所依赖的组件。</p><p>Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter 相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器</p>', '0', '3', '2020-02-28 13:37:17', null, null, '0', '1', '1', '0', '大懒猫');
  62. INSERT INTO `article` VALUES ( '2', 'Java & C++(引言一)', 'Java & C++(引言一)\r\n', 'java|c++', '<p>废话连篇</p><p>Java和C++都是世界范围内通用的两种语言,关于两种语言之间的差异和优劣的问题从来没有中断过。就差异问题而言,随着两种语言的不断成熟,差异性也越来越明显,各个大神都有各自的见解和说法,在这里我就不再赘述。就语言的优劣性而言,我认为语言之间没有优劣性而言,相信很多程序员的认知也是一样的,要不也不会有‘PHP是世界上最好的语言’这种无伤大雅的玩笑了,当然不可否认PHP确实是一门非常好的语言。其实我感觉任何语言之间都是有相通性的,无论一门语言被设计出来做什么,无论其编码风格,结构设计,都脱离不了‘以人为本’这个目的。</p><p>好了,废话不多讲,接下来直入正题。</p><div><img src=\"https://pics4.baidu.com/feed/8435e5dde71190ef982fc6c72571cd13fcfa6046.jpeg?token=476d1627084733f4d40a078af9d76710&s=F9831B70600E774949E6554C0300E0F9\"></div><p>设计思想</p><p>就C++和Java而言,C++的设计能够让人更好的理解计算机,也能让计算机更好的理解人。当然,C++作为C的一个超集,为了向后兼容C,使语言本身的复杂度大大的增加,程序员在使用C++的时候不得不去花很多的时间去理清楚这层关系。但是这并不妨碍C++的效率性,反而为C++获得更高的效率提供了很大的帮助,一个好的程序员能够借助这些特点设计出很优美的程序,大大提高程序的执行效率和使用范围,当然这对程序员本身的要求是非常高的。这点在我看来,C++相对于Java来说,确实是要优美的多。</p><p>C++和Java都是一种杂合语言。之所以不说二者都是面向对象语言,是因为二者都不是纯粹的面向对象语言。(C++要向后兼容C的设计使得C++不是一个完全面向对象的语言。Java的八种基本数据类型和Java兼容C的设计,也使得Java不是一个纯粹的面向对象的语言,当然Java对八种数据类型提供了封装类,这点不说了。)但是面对Java时并不妨碍我们以一种绝对的面向对象的思想去考虑一个问题。Java的设计特点就是程序向自然万物的延伸,万物皆可被当作对象来看,缺什么程序员就创造什么。所以也有一种说法‘Java是一系列对象的集合’,这种说法确实没错。这种思想上完全面向对象的设计确实给Java带来了很大的便利,程序员不需要像在C++中一样考虑那么多关于程序底层的问题,上手非常快,所以选择Java作为第一语言的人非常的多。</p><div><img width=\"500px\" src=\"https://pics2.baidu.com/feed/0b46f21fbe096b63da2eb43be759d741ebf8ac12.jpeg?token=df36f987ae394a8345c86a2cd4568d76&s=5EADA444C842FF5F802285830300E09B\"></div><p>物质守恒</p><p>在我看来,物质是守恒的,程序也一样需要考虑资源枯竭的问题。Java的程序员就像是一个造物主,程序本身是造物主的领地,领地内缺什么造物主就补充什么,不需要考虑资源枯竭的问题,因为程序底层的设计就是资源守恒的,没有用的时候就自动回收再利用。而C++的程序员则更像是一个领主,C++的程序本身是领主们的上帝,程序员想要改造自己的领地时需要向上帝申请资源,程序员用过这些资源后,必须还给上帝,保证上帝的资源守恒。</p><p>这一段说得比较绕,其实简单点就是垃圾回收和内存分配的问题。C++创建一个对象需要合理分配内存,分配存在时间。而Java完全不需要去考虑这两者,一切都可以自动完成,当然这样牺牲了很多效率,这也是Java执行效率低的一个主要原因。</p><p>有人说Java像是一个高配自动挡的汽车,开着舒服。C++像是全能手动挡的汽车,让人体会到操控的乐趣,就上面这两点来看确实是这样。</p><p>……未完待续……</p>', '0', '3', '2020-02-28 13:49:02', null, null, '0', '1', '1', '0', '空中飞船');
  63. INSERT INTO `article` VALUES ( '3', '4亿美元,丰田投给了这家中国自动驾驶公司', null, '自动驾驶|丰田', '<p>北京时间2月26日,自动驾驶公司小马智行(Pony.ai) 宣布已从丰田汽车公司(Toyota Motor Corporation)筹集4亿美元,以加深和扩大两家公司在出行领域的合作。这是双方2019年建立的业务合作关系的延伸。在该基础上,两家公司将进一步加速自动驾驶的研发和商业化应用,旨在打造能造福每个人的产品和服务。</p><p>同时,小马智行也宣布其B轮融资总额高达4.62亿美元,估值略高于30亿美元。算上之前的融资,它的总融资额近8亿美元。这个成绩不仅再次打破中国自动驾驶公司估值的记录(上一次是该公司的Pre-B轮估值),也令小马智行成为全球最高估值的自动驾驶公司之一。</p><p>小马智行表示,此次合作关系的加深,有利于双方把一流的自动驾驶技术,与一流的车辆平台及技术更深入地融合,这和两家公司的战略重点一致。</p><div><img src=\"https://pics2.baidu.com/feed/d439b6003af33a8720e099036712573e5243b5eb.jpeg?token=52a633cb538bcda6de364fad48165b98&s=460A2FE04C1225EF198D851B030040D1\"></div><p>据悉,小马智行和丰田于2019年8月宣布了共同在中国公开道路开始试点项目,使用丰田旗下雷克萨斯品牌的SUV,结合小马智行的自动驾驶的软件系统和硬件方案(上图为披露的自动驾驶车辆)。据悉,在今年的战略投资框架下,双方将扩大合作范围,除了共同开发自动驾驶技术外,双方还将在出行领域探索更多可能性。</p><p>2018年12月,小马智行发布PonyPilot自动驾驶移动出行(Robotaxi)项目,并在广州率先试点城区公开道路Robotaxi常态化运营,成为首个在中国市场提供Robotaxi服务的公司。2019年11月,小马智行在美国推出加州首个面向普通公众的Robotaxi服务,为其在全球范围内提供自动驾驶服务打下基础。根据公告,小马智行今后将与丰田携手,利用双方的技术、知识及服务,给人们带来安全和便利,共同推动移动社会的创建。</p>', '0', '4', '2020-02-28 13:50:09', null, null, '0', '1', '1', '0', '空中飞船');
  64. INSERT INTO `article` VALUES ( '4', '何小鹏:李斌走了一步险棋,走得非常好,走得非常棒!', '何小鹏:李斌走了一步险棋,走得非常好,走得非常棒!\r\n', '测试|文章', '<div><img src=\"https://tukuimg.bdstatic.com/scrop/dea1e3949555d03c91dfa2e21135ad62.gif\"></div><div><img src=\"https://pics5.baidu.com/feed/8b82b9014a90f60366d3c83173eaf61db151ed67.jpeg?token=74b4e03ab070de5608a04d1887597c25&s=C23AAA66C26332BCB236CC270300F04B\"></div><p>他在接受汽车商业评论采访时说:李斌也好,我也好,远远没马斯克苦!</p><div><img src=\"https://pics3.baidu.com/feed/c2fdfc039245d68836e1d9a8ed3a3818d01b24dd.jpeg?token=a1a3d62243ae48401563d6c41fd0be38&s=1AA874234B6347245A5520DA000080B1\"></div><p>疫情还远远没有散去,中国车企复工也还在路上,但是造车新势力蔚来汽车最近却成为热点。</p><p>2月25日,蔚来汽车获得合肥市政府的巨大资金支持,双方签署了被外界认为不可能落空的框架协议。</p><p>汽车商业评论认为,这一方面是因为蔚来汽车本身的力量得到了地方政府的认可,一方面这也证明智能网联汽车的前景不可估量。</p><p>2月22日,征求意见达2年的《智能汽车创新发展战略》终于由国家11部委联合下发。虽然没有增加什么新内容,但至少表明国家对这一战略的正式认可,现在就看各地怎么落实了。</p><p>安徽省或者说合肥市开了一个好头,由地方政府真正投资靠谱的战略新兴产业是中国疫情过后拉动社会经济复苏的发动机。</p><p>汽车商业评论认为,虽然诸多造车新势力正在遇到麻烦,但是真正的头部造车新势力的价值正在得到体现。</p><p>“中国汽车产业正发生巨大变革,从功能汽车走向智能电动汽车。小鹏汽车将在2020年拿出优秀产品——全新旗舰产品小鹏P7上市,迎来智能电动汽车的新春天。”</p><p>2020年1月9日下午,小鹏汽车董事长何小鹏在接受汽车商业评论总编辑、汽场联合创始人贾可博士长篇访谈时如此说道。</p><div><img src=\"https://pics3.baidu.com/feed/d53f8794a4c27d1ee5320354522de868dcc43803.jpeg?token=2286dfe78104ea6ac570a317d916436c&s=610592512CBB2D84708448F30300A0B2\"></div><p>当天,雪后的北京,寒风凛冽。何小鹏风尘仆仆地来到汽车商业评论的兄弟单位汽场买车APP的办公室。他和贾可就中国汽车的未来的诸多话题展开了讨论。比如:小鹏汽车能活下去吗?小鹏眼中的蔚来是什么样?何小鹏后悔造车吗?造车新势力的春天还远吗?</p><p>“李斌走了一步险棋,走得非常好,走得非常棒!”何小鹏说,“造车有很大的情怀,不然不会做这么苦逼的事。”</p><p>以下我们节录何小鹏对李斌和蔚来的看法和评价,以帮助大家更真实更真切了解造车新势力头部企业的想法和活法。关于此次访谈的全文,请关注2020年3月15日出版的汽车商业评论杂志。</p><p>“有些企业,在我和李斌看来,宁愿不做”</p><p>贾可:造车新势力,现在大家慢慢只关注头部的10家8家了,后面就不管了,不知道他们能不能活下去?</p><p>何小鹏:今年、明年就知道能不能活下去,现在10到8家没问题,未来就三四家。</p><p>贾可:后面就自动清盘了。</p><p>何小鹏:现在计划出车的不到10家,有人说出车,根本没出车,他根本没有钱或没有这个技术积累。就算今年会出车的,不外乎就是爱驰、理想。</p><p>贾可:还有天际、拜腾。</p><p>何小鹏:如果今年不能出车不能交付就糟糕了。之前出车的也有,但出不代表OK,我的意思是说,出车不代表能活,活着不代表能活好。</p><p>贾可:有一个企业我觉得很有趣,一共花了10亿元,可省钱了,融到一笔钱慢慢玩,慢慢死。</p><p>何小鹏:还有恒大、宝能都会出车的。其他还没有出车都完了。</p><p>贾可:还有一家领导做技术出身的企业,也挺悬的,我看也头疼。</p><p>何小鹏:如果我纯做互联网技术,我也干不了这事,在企业,技术只占四分之一。没有变化的管理不行。有些企业变化很快,核心点在平衡性,有很多企业做了很长时间,企业不变化。我有一个投资在美国失败了,是美国一个技术企业,5年10年跟以前没有什么变化,很稳定,不变。实际上创业就怕不变。</p><p>贾可:不变,抗挫折的能力就弱了。</p><p>何小鹏:如果是一个很大公司,很稳健,那是另外一回事。一个初创公司,二三十个人,5年10年后还是二三十人,你不痛苦?</p><p>贾可:那就是小卖部,就不想着做大,做大肯定不行。</p><p>何小鹏:最近5年,中国企业能走出去就走出去了,最近一两年能活下来,后面就起码不会死,但如果这两年活不下去就死掉了,这两年就特别明显。</p><p>贾可: 这两年得有钱续命。</p><p>何小鹏:有人认为是2019年,我不认为是,到2021年才看出来。</p><div><img src=\"https://pics2.baidu.com/feed/34fae6cd7b899e51ea327cb50a5f9c35ca950dd5.jpeg?token=5c14159f1170b75719fb3bc6658d1c09&s=6702F70F6C4C46CE58906DE30300F027\"></div><p>图片来源:网络</p><p>贾可:2020年说撑就撑过去(当时还不知道这次突如其来的疫情)。</p><p>何小鹏:有些车企不死,它是在停摆,或者很缓慢地在摆,这种没有意义。如果这种企业,我们宁愿就关掉,仅仅是活着,活着没有意义。</p><p>贾可:最后就变成有些企业的样子,10年前就应该死掉,但那根管子不拔,植物人就不死。</p><p>何小鹏:他或者在想有哪个政府哪一天再救他一下,他就又活起来。</p><p>贾可:这种可能性已经没有了。</p><p>何小鹏:不知道有没有,不敢说一定有,现在连煤老板也没有钱了。</p><p>贾可:但可能还有人对汽车缺乏敬畏,对汽车认识不清。</p><p>何小鹏:换个角度,我不关注市场大小,我只关心谁能做出好的产品,谁能够走向全球,谁能够改变一些东西,仅仅是活着,没有意义。这个事情对我来说,没有价值。</p><p>贾可:你想改变这个行业。</p><p>何小鹏:否则我根本不会创业。我二次创业,如果让我活着去挣点钱,去赚3个亿,我投20多个亿去赚3个亿,我疯了?我根本不是为了这个目标去做的,所以,有些企业,在我和李斌看来,宁愿不做。</p><p>我们要做的事情,就是去做不一样的事情,不一样的硬件,不一样的软件,把服务运营做得不一样,可能这一次做不到,我们就分6步7步走,从短期效果或长期效果看。</p><p>一定要看长期效果,也要看短期效果,这是两种道理。换个角度说,很多企业融不到钱,也跟这个有关系——格局、野心、想象力。</p><p>包括李斌,包括我,还是有很大的情怀,不然不会做这么苦逼的事,你考虑我们的逻辑,根本不是说要做挣点钱能活下去的公司,那是完全两个思考的逻辑。</p><p>“李斌的服务做得很好,我真的是没想到”</p><p>贾可:现在有一部分造车新势力把一些车卖给自己的出行公司。</p><p>何小鹏:我不看重to B,我注重两个:一个是全球化,第二是差异化。但是卖给出行公司,卖给自己的出行公司,那没有意义,那是一个资本运作。</p><p>贾可:卖给外部出行公司可以吧?</p><p>何小鹏:卖给外部出行公司也有问题,有一个问题是品牌定位。有些新能源车企最大的痛苦在于,买我们(小鹏)车的人根本不拿我们的车对比那些新能源车企的产品。他们觉得,那是出租车。</p><p>很多的士公司来找我们:第一就是你要降价;第二你要终身质保。只要愿意,我都可以卖,这个地方卖500台,那个地方卖1000台,但你今年多卖的5000台、8000台,你明年的品牌就有可能下行,后年就很难了。而且你卖给他们,你就要不断地往下降价,你怎么做智能化?</p><p>中国汽车到了后面,如果不能品牌上行,就没有毛利,没有毛利就不会有研发,没有研发就不会有差异化,这是一个正向的循环。所以越是打性价比(牌),一定不会有差异,你不能有差异,你怎么能真正做强?</p><p>我们的车补贴前21万元,补贴后18万元起,我们一直很努力地在卖,前面很难。</p><p>贾可:现在就看你们的P7了。</p><div><img src=\"https://pics2.baidu.com/feed/4034970a304e251f46c586adef7e8c117e3e53b7.jpeg?token=19b865e6ae9d0650c37b507fc8083fc8&s=E0358F744BE957036D4764D60300C0BA\"></div><p>图片来源:网络</p><p>何小鹏:P7很重要,是品牌往上,你看去年我的销售和市场费用,我可以看到蔚来的财报,我大概是他的十分之一。它在市场上也投了很多钱,销售、品牌、公关、市场、线索、销售、维修、服务都属于大销售体系,它是我的10倍。我今年开始发力,多花不少钱在这上面。</p><p>贾可:现在to B这方面在你看来,目前是旁门左道?</p><p>何小鹏:那不是,我从来没有这么说。我说的是如果做的士,或者偏低端的出行,对今天一个新的品牌价值不大,除非你的定位就在这里。一旦做了的士,目标就是规模、便宜、活着。</p><p>贾可:这是在中国的国情下。</p><p>何小鹏:如果你喊着要做中国智能汽车的引导者,做高端汽车,却去做的士,这是背离的。</p><p>贾可:你一直在强调运营用户这块,到现在为止,大家还做不到运营用户这个程度,还早着呢?</p><p>何小鹏:对。线下的叫服务,线上的叫运营,李斌的线下服务做得很好,但是能不能把成本控制到现在的三分之一,做到同样的效果,这个要看李斌的努力。我们现在在补很多服务的课。</p><p>我们去年做了很多运营的探索,我们有一些心得和有趣的效果。但受限于很多计算的能力,那个芯片我们很快就会有升级。今年,我们会把运营做得好一些,但是运营能力还做不到:第一赚很多钱,第二因为运营好,让客户买更多车。运营的效果在今天还没有体现。</p><p>贾可:运营,我们现在的手段实际还不多。</p><p>何小鹏:举一个例子,什么时候该开自动驾驶,什么时候该关掉,然后这个月充电和电耗费的情况,如果你的车被人撞了,或是你撞了别人的车,车会自动分析出来,然后打电话沟通该怎么修,这个都是全自动的。足够好的效果还没有体现,这个我说实话。</p><p>首先要把用户运营好才能商业。蔚来把服务做好,已经从推荐朋友那里获得很大的价值。李斌的服务做得很好,我真的是没想到。我以前做了很多服务,我不敢做这么好的服务,因为越大规模越麻烦。</p><p>服务是很难全球化的,服务一定是本土化的。用本土化的思维、本土化的文化去构建的服务的体验,它是跟人相关的,人就是区域化的。</p><p>“产品的科技能力是最能够全球化的”</p><p>贾可:蔚来是能挺过去的。</p><p>何小鹏:我也相信他能挺过去的,但是以什么方式挺过去,现在不敢说。</p><p>贾可:现在都还悬而未决,但是我认为他的底子还是很好的。</p><p>何小鹏:我也算是这个行业的人,但是我不知道,到底花多少现金是底子,我都不敢说。做车是一个长跑。</p><p>贾可:只要企业底子好,有现金流,就像人有血一样,哪怕这些血是借来的,就能把身体给弄好。</p><p>何小鹏:车需要的血太多,李斌走了一步险棋,走得非常好,走得非常棒。</p><div><img src=\"https://pics3.baidu.com/feed/d4628535e5dde71191788de7ef178b1d9c166173.jpeg?token=3bd445cf2aa7fa960f73c84b70c417bb&s=37824DA3740004FE1C08E1B00300C002\"></div><p>图片来源:网络</p><p>贾可:现在感觉资本特别是风投不注重造车新势力了?</p><p>何小鹏:资本也注重,一年后两年后越来越好,能获得下一个资本接应,如果你做不到,很难的。</p><p>贾可:你自己投了多少?</p><p>何小鹏:我自己投了3个多亿元吧,我投得最多,李斌(对蔚来汽车)投了2亿多元。</p><p>贾可:如果现在不融钱,你能坚持多久,不知李斌能坚持多久?</p><p>何小鹏:李斌大概融了30多个亿元美金吧,实际上里面还是有债的。有的传统民营车企融不到这么多钱,所以没有办法做大的投入。像我P7花几十亿元就是为了把底盘、整个智能化全部从头做。这一点和我和李斌一样,苦什么都不能苦研发。一些传统民企做不了,我们做出来了,我们把品质做好,再优化,OTA几次,可能就会感觉差异很大。</p><p>这是一个新时代,新时代的核心就是智能汽车,智能汽车如果实现了电动,电动对用户的好感知和坏感知实际上都很强烈:好感知是加速快、安静;坏感知是成本贵、充电麻烦、续航不够。</p><p>到了第三代智能驾驶,后面就会越来越好,但是智能化会有多少人愿意买单,今天我还打个问号?我们的车主是非智能版不买,但是这个面有多广,体验有多好,这还需要数据去进一步认证。</p><p>贾可:自动驾驶,用户认知不太强烈的话,就不太会买单。</p><p>何小鹏:有人愿意买,但是加钱不多,这是最核心的问题。可能明年最晚后年就会有感觉,差异化很大。特斯拉以前说它有三大优势:自动驾驶、电动和超充。但它没有其他的智能,5G也没有,语音交互也没有,在中国国内,它的自动驾驶是真的不足。在硅谷它的自动驾驶真好,这个我要完全认。</p><p>换一个角度说,今天特斯拉的全球品牌声誉来自于它对科技的不断的新的变化的把握,各种各样的科技,没有一个是价格便宜,没有一个是请了明星宣传的,产品的科技能力是最能够全球化的。</p><p>贾可:现在你们自动驾驶芯片用英伟达的英伟达DRIVE Xavier,做自动驾驶你们研发得比较深,比较全乎。</p><p>何小鹏:如果从全球看,就属我们和特斯拉做自动驾驶最全乎。自动驾驶要到L3到L3.5差距才明显,L3.5到L4非常明显,你会看到技术对开车有巨大的变化,整个车都变化了,再过两年,等后年的今天,你会感觉不一样。</p><p>贾可:像李斌做的那个大电机,你做吗?</p><p>何小鹏:不做,特斯拉就是因为多做一个电机,多搞一个电芯厂,多干了一个芯片,多干了这几件事,那个电芯就花了几十亿美元,我哪能出那些钱?</p><p>“李斌也好,我也好,远远没他苦”</p><p>贾可:你对做车不后悔吧?</p><p>何小鹏:为什么后悔?现在是很痛,再过两三年就会开始有点快乐,很爽。</p><p>贾可:现在做车,就像绑在一个战车上,已经下不来了。</p><p>何小鹏:做企业都一样,做企业,人越多,股东越多,你的责任感就越强。这和开一个茶馆担负的责任感不一样。</p><p>贾可:现在你们整个多少人?</p><p>何小鹏:我们4000人左右。</p><p>贾可:今年准备交付多少?</p><p>何小鹏:去年是15000辆,去年我们交个8个月的车,还是一款车,今年两款车,明年就有三款车。</p><p>贾可:P7什么时候交付?</p><p>何小鹏:6月份。</p><p>贾可:你卖到多少,会觉得有点快乐?</p><p>何小鹏:我的核心点,第一是我卖了多少,第二是增速多少。卖到一年10万台,且增速比现在快很多,我觉得很开心。</p><p>你看即使前年底,马斯克卖到20万辆,还有无数人说他有问题,还有股价从300美元跌到200美元出头,中间他还说要私有化。实际上只有两个中东的老大给他说了意向而已,他就对外宣布了,然后被美国证监会惩罚,然后多惨,那时候他已经卖了20万台。</p><p>贾可:他一赌气说要私有化,那也说明他对前途是看好的。</p><p>何小鹏:没有。2009年他更困难,把房子都卖了,最后凑了2000万美金,顶进去,所以李斌也好,我也好,远远没他苦。</p><p>他也和我一样,是投资人,从2006年冲进去到现在,做了14年,我现在才冲进去2年,我2017年8月28号才进来,换个角度,他2009年最困难的时候,比我们困难10倍,他2014年进入中国卖了3000台,2015年进中国卖了7000多台,两年加在一起11000台,我去年一年就搞定了,当然他卖得难度比我高。</p><div><img src=\"https://pics3.baidu.com/feed/8cb1cb1349540923ec0ab417dba0940fb2de4972.jpeg?token=db2e9a8e80a69c2e536d57caba721fce&s=C4A82AF790A9130DA091F07503004075\"></div><p>图片来源:网络</p><p>贾可:马斯克现在可能心里感觉很好?</p><p>何小鹏:不知道。你在外面看到他很好的时候,他可能很苦,因为他觉得他下一步的增长的速度不够,有可能,因为我不知道。</p><p>贾可:你觉得特斯拉度过危险期了吗?</p><p>何小鹏:不知道,这种话没有人敢说,再过三四年问这个问题,就是所有要进局要打牌的人都出了牌,最后就知道了。</p><p>贾可:现在是不是有一种对特斯拉盲目崇拜?</p><p>何小鹏:中国是当前结果论。比如说,有人把我们与特斯拉比,实际你应该拿特斯拉的第5年和我们的第5年去比,要不然没有可比性。特斯拉今年卖得好,但换个角度,它受了多大的苦?它是做得不错,也有很多未来的挑战。所以,我从来不会因为现在,就断言结果怎么样。</p><p>我一直说失败的企业有很多共性,成功的企业没有共性。不要去看别人做了这个,又去做那个,你也会成功,天时、地利与人和,要放到一起看。</p>', '0', '1', '2020-02-28 13:51:38', null, null, '0', '1', '1', '0', '空中飞船');
  65. INSERT INTO `article` VALUES ( '5', 'springboot怎么学?', 'springboot怎么学?\r\n', '测试|文章', '<div>作者:码云 Gitee<br>链接:https://www.zhihu.com/question/50958416/answer/529875117<br>来源:知乎<br>著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。<br><br><div><p>学习 SpringBoot 是个需要付出大量时间和精力的过程,但其实上手了操作难度不大。为题主和广大想要学习 SpringBoot 的推荐下面几个开源项目,先从项目入手,希望对大家有所帮助。觉得不错请给开发者一个大大的赞(* ̄︶ ̄)</p><p>1、<b>项目名称:</b>一个基于 SpringBoot 2 的管理后台系统 </p><figure><noscript><img src=\"https://pic3.zhimg.com/50/v2-d7385f31921d04772bbe532785f8b2a0_hd.jpg\"normal\" width=\"1305\"/></noscript><img src=\"https://pic3.zhimg.com/80/v2-d7385f31921d04772bbe532785f8b2a0_720w.jpg\" normal\"=\"\" width=\"1305\"></figure><p><b>项目介绍:</b>包含了用户管理,组织机构管理,角色管理,功能点管理,菜单管理,权限分配,数据权限分配,代码生成等功能, 系统基于 Spring Boot2.1 技术,前端采用了 Layui2.4 。数据库以MySQL/Oracle/Postgres/SQLServer 为实例,理论上是跨数据库平台 。</p><p><br></p><p><b>项目地址:</b><a href=\"https://link.zhihu.com/?target=https%3A//gitee.com/xiandafu/springboot-plus\" target=\"_blank\" rel=\"nofollow noreferrer\">https://gitee.com/xiandafu/springboot-plus</a></p></div></div><p>https://mp.weixin.qq.com/s/zeKL8Ki9pvM3Yw9SwM7mug</p>', '0', '2', '2020-02-28 13:52:49', '2020-04-11 14:32:00', null, '0', '1', '9', '2', '码云');
  66. INSERT INTO `article` VALUES ( '6', '代码官方验证通过', '该代码经过官方严格验证', '代码', '<p>该代码经过官方严格验证,可以完美运行,请访问下载</p><p>更多代码请访问</p><p><br></p>', '0', '5', '2020-04-05 22:45:11', '2020-04-11 14:00:49', null, '0', '1', '6', '1', '代码');
  67. INSERT INTO `article` VALUES ( '7', 'rodert ', '更多学习来源', '技术', '<p>更多gh提供给大家,源码来源网络</p><p><br></p><p>https://blog.csdn.net/qq_40374604/article/details/105326873</p><p><img src=\"https://img-blog.csdnimg.cn/20190619113941644.jpg\" style=\"max-width:100%;\"><br></p><p><br></p>', '1', '3', '2020-04-11 13:59:32', '2020-04-11 14:01:47', null, '0', '1', '2', '0', 'rodert');
  68. -- ----------------------------
  69. -- Table structure for cate
  70. -- ----------------------------
  71. DROP TABLE IF EXISTS `cate`;
  72. CREATE TABLE `cate` (
  73. `id` int( 10) NOT NULL AUTO_INCREMENT COMMENT '主键',
  74. `catename` varchar( 100) NOT NULL COMMENT '导航名称',
  75. `sort` int( 10) DEFAULT NULL COMMENT '排序',
  76. `create_time` varchar( 100) DEFAULT NULL COMMENT '创建时间',
  77. `update_time` varchar( 100) DEFAULT NULL COMMENT '更新时间',
  78. `delete_time` varchar( 100) DEFAULT NULL COMMENT '软删除',
  79. `isdel` int( 10) DEFAULT '0' COMMENT '软删除标记',
  80. PRIMARY KEY ( `id`) USING BTREE
  81. ) ENGINE=MyISAM AUTO_INCREMENT= 6 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
  82. -- ----------------------------
  83. -- Records of cate
  84. -- ----------------------------
  85. INSERT INTO `cate` VALUES ( '1', '心灵鸡汤', '1', '2020-02-28 13:33:36', null, null, '0');
  86. INSERT INTO `cate` VALUES ( '2', '学习心得', '1', '2020-02-28 13:34:05', null, null, '0');
  87. INSERT INTO `cate` VALUES ( '3', '技术教程', '3', '2020-02-28 13:34:13', null, null, '0');
  88. INSERT INTO `cate` VALUES ( '4', '轻松一刻', '2', '2020-02-28 13:34:31', null, null, '0');
  89. INSERT INTO `cate` VALUES ( '5', 'rodert', '5', '2020-04-05 22:43:36', '2020-04-11 13:59:50', null, '0');
  90. -- ----------------------------
  91. -- Table structure for comment
  92. -- ----------------------------
  93. DROP TABLE IF EXISTS `comment`;
  94. CREATE TABLE `comment` (
  95. `id` int( 11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  96. `content` text COMMENT '评论内容',
  97. `article_id` int( 11) DEFAULT NULL COMMENT '评论文章id',
  98. `member_id` int( 11) DEFAULT NULL COMMENT '评论用户id',
  99. `create_time` varchar( 20) DEFAULT NULL COMMENT '创建时间',
  100. `update_time` varchar( 20) DEFAULT NULL COMMENT '更新时间',
  101. `delete_time` varchar( 20) DEFAULT NULL COMMENT '软删除时间',
  102. `isdel` int( 10) DEFAULT '0' COMMENT '软删除标记位',
  103. PRIMARY KEY ( `id`) USING BTREE
  104. ) ENGINE=MyISAM AUTO_INCREMENT= 4 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
  105. -- ----------------------------
  106. -- Records of comment
  107. -- ----------------------------
  108. INSERT INTO `comment` VALUES ( '1', '这篇文章写得我都想哭了', '5', '1', '2020-02-28 13:53:42', null, null, '0');
  109. INSERT INTO `comment` VALUES ( '2', '你这评论我都不敢接', '5', '2', '2020-02-28 13:54:48', null, null, '0');
  110. INSERT INTO `comment` VALUES ( '3', '最代码官方验证过的代码', '6', '1', '2020-04-05 22:50:36', null, null, '1');
  111. -- ----------------------------
  112. -- Table structure for member
  113. -- ----------------------------
  114. DROP TABLE IF EXISTS `member`;
  115. CREATE TABLE `member` (
  116. `id` int( 10) NOT NULL AUTO_INCREMENT COMMENT '主键',
  117. `username` varchar( 100) NOT NULL COMMENT '用户名',
  118. `password` varchar( 100) DEFAULT NULL COMMENT '密码',
  119. `nickname` varchar( 100) DEFAULT NULL COMMENT '昵称',
  120. `email` varchar( 100) DEFAULT NULL COMMENT '邮箱',
  121. `create_time` varchar( 20) DEFAULT NULL COMMENT '创建时间',
  122. `update_time` varchar( 20) DEFAULT NULL COMMENT '更新时间',
  123. `delete_time` varchar( 20) DEFAULT NULL COMMENT '软删除时间',
  124. `isdel` int( 10) DEFAULT '0' COMMENT '软删除标记位',
  125. PRIMARY KEY ( `id`) USING BTREE
  126. ) ENGINE=MyISAM AUTO_INCREMENT= 7 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
  127. -- ----------------------------
  128. -- Records of member
  129. -- ----------------------------
  130. INSERT INTO `member` VALUES ( '1', 'zuidaima', '111111', '最代码官方', 'zuidaima@qq.com', '2020-04-05 13:53:18', null, null, '1');
  131. INSERT INTO `member` VALUES ( '2', 'damahou', 'admin', '大马猴', 'damahou@qq.com', '2020-02-28 13:54:16', null, null, '0');
  132. INSERT INTO `member` VALUES ( '3', '最代码客服', '111111', '最代码客服', 'zuidaima_noreply@qq.com', '2020-04-05 22:48:45', null, null, '1');
  133. INSERT INTO `member` VALUES ( '4', '最代码牛牛', '111111', 'niuniu', 'zuidaima@qq.com', '2020-04-05 22:51:43', null, null, '1');
  134. INSERT INTO `member` VALUES ( '5', 'zhangsan', 'zhangsan', 'zhangsan', 'zhangsan@qq.com', '2020-04-11 13:53:27', null, null, '0');
  135. INSERT INTO `member` VALUES ( '6', '李四', '李四', '李四-思密达', '李四@163.com', '2020-04-11 14:27:54', null, null, '0');
  136. -- ----------------------------
  137. -- Table structure for syssetting
  138. -- ----------------------------
  139. DROP TABLE IF EXISTS `syssetting`;
  140. CREATE TABLE `syssetting` (
  141. `id` int( 11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  142. `webname` varchar( 100) DEFAULT NULL COMMENT '网站名称',
  143. `copyright` varchar( 100) DEFAULT NULL COMMENT '版权信息',
  144. `create_time` varchar( 20) DEFAULT NULL COMMENT '创建时间',
  145. `update_time` varchar( 20) DEFAULT NULL COMMENT '更新时间',
  146. `delete_time` varchar( 20) DEFAULT NULL COMMENT '软删除时间',
  147. `sign` varchar( 100) DEFAULT NULL COMMENT '个性签名',
  148. PRIMARY KEY ( `id`) USING BTREE
  149. ) ENGINE=MyISAM AUTO_INCREMENT= 2 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
  150. -- ----------------------------
  151. -- Records of syssetting
  152. -- ----------------------------
  153. INSERT INTO `syssetting` VALUES ( '1', 'rodert', '京ICP备12032064号-2', '2020-02-28 13:33:06', '2020-04-11 14:03:17', null, 'https://mp.weixin.qq.com/s/zeKL8Ki9pvM3Yw9SwM7mug');

 

源码

 

源码地址:https://mp.weixin.qq.com/s/WybspWYfy4SjhQrl71No5g


来源:https://blog.csdn.net/qq_40374604/article/details/105397506

 

 

 

    • 0
      点赞
    • 2
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    第一章 绪论 1.1. 选题背景 这几年,许多新名词涌入我们的视野:博客、圈子、播客、WAP等。这些都预示着我们进入了一个新的互联网阶段web 2.0,它是相对web 1.0的新的一类互联网应用的总称,是一次从核心内容到外部应用的革命[10]。这个阶段发展迅速,互联网应用趋于多样化,其中变化最大的是由web 1.0网站创造内容的时代变为由用户创造内容的web 2.0时代。 在web 2.0应用中,博客(Blog)是web 2.0核心应用中最典型、最流行的代表之一,也是web 2.0技术应用的最直观的表现,是web 2.0精神和理念的具体体现。 1.2. 问题的提出 Blog记载了日常发生的事情和自己的兴趣爱好,把自己的思想和知识和他人分享、交流,同时又通过“六度空间”结识了更多志趣相投的朋友;而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的信息价值:不同的 Blog 选择不同的内容,收集和整理成为很多人关注的专业 Blog ——目前越来越多的人获取信息的来源是一些固定的 Blog 。随着博客人数的增加, Blog 作为一种新的生活方式、新的工作方式、新的学习方式已经被越来越多的人所接受,并且在改变传统的网络和社会结构:网络信息不再是虚假不可验证的,交流和沟通更有明确的选择和方向性,单一的思想和群体的智慧结合变的更加有效,个人出版变成人人都可以实现的梦想—— Blog 正在影响和改变着我们的生活。 1.3. 系统的开发目标 管理员通过前台页面进入后台管理模块后,可对注册的博客用户进行维护,包括对注册用户的添加、查找、修改和删除。 管理员进入登录后,可对帐户进行管理,包括添加管理员帐户、修改管理员帐户、删除管理员帐户和对帐户进行权限设置。 博客用户通过前台登录后,可对自己的博客空间进行管理,包括发布自己的网络日志、收藏个人图片、和相关人员进行交流和沟通以及删除访问者发表的评论等。 因此,在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客页面访问量统计(6) 博客个人文章管理维护功能(7) 博客个人文章分类管理维护功能(8) 博客个人友情链接维护功能(9) 博客个人基本信息管理维护功能(10) 博客图片上传及个人相册管理(11) 网络用户写留言,博主查看留言。 第二章 系统设计 2.1. 系统分析 在整个blog进行开发之前,要确定出整个项目的整体架构,包括系统的选型、运行环境的确定及系统结构设计。下面对这进行详细介绍。 在进行软件系统开发的最初环节,一般都需要进行系统的选型,即根据系统功能的实际需求,选择合适的开发工具及软件架构。 blog对系统的可靠性、稳定性有比较高的要求。本系统设计时,比较主流的B/S设计有基于JSP、ASP、PHP、CGI及J2EE等模式。相比较而言PHP的功能相对简单,不适合做大程序;而CGI效率相对较低,所以也不考虑。由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的吞吐量,提高并发处理客户请求数量,系统采用了IBM服务器作为主机。在数据库处理方面,不需要在数据层借助存储过程及数据库服务器端函数封装过多的业务逻辑,因此数据库系统采用相对精巧的MySQL[6]。 该在线博客系统服务器端如果需要布置到其他主机上,则该主机必备条件如下: 1. 服务器端操作系统:独立于操作系统的跨平台系统,客户端MicroSoft Windows 2000及以上; 2. 数据库:MySQL 5.0.27版本; 3. Web服务器:Tomcat 5.5及以上版本,配合MVC设计模式及 Hibernate开发架构; 4. 客户端运行环境:能运行IE 5以上或Netscape 5以上浏览器的操作系统,配合使用Ajax技术; 5. 客户端运行工具:目前的系统采用浏览器作为客户端,为了支持Ajax开发框架,应该选择使用IE 5以上版本浏览器。 本网站以xp为Web平台,JSP+Ajax+Servlet+JavaBean+Hibernate为网站实现技术,建立基于MySQL数据库系统的核心动态网页,实现博客网站前台及博客个人维护管理等功能模块。 1、 系统处理的准确性和及时性:系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足信息处理的需求。 2、 系统的开放性和系统的可扩充性:系统在开发过程中,应该充分考虑以后的可扩充性。例如数据表中用户选择字段方式的改变,用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。 3、 系统的易用性和易维护性:要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。 4、 系统的数据要求:1、数据录入和处理的准确性和实时性。2、数据的一致性与完整性。3、数据的共享与独立性。 2.2. 系统的可行性分析 2.2.1. 技术可行性 技术上的可行性分析要考虑将来要采用的硬件和软件技术能否满足用户(这里是服务器,网速)提出的要求(如计算机的容量、速度等)。此外,还要考虑开发人员的水平,学习了两年的jsp开发,对于这个系统的编写,我想完整的之需要两个月就可以写出程序,再花上几天的调试,计划两个月左右就可以完成投入使用了。 我们掌握了数据库及其应用技术、数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力,考取了信息处理、程序设计、数据库技术等国家IT认证。从一定程度上具备了开发一个小型系统的能力。再有就! 2.2.2. 经济可行性 主要从对项目的经济上进行分析评价,一方面是支出的费用,包括设备购置费、管理和维护费用、人员工资和培训费等,另一个是取得的收益。这是个小型的系统,从投入的人力,财力与物力来讲是非常小的,发布出去之需要注册域名就可以了,从节省人力方面,可以让管理人员从繁与复杂的工作中解脱出来,做更多的工作。 2.2.3. 管理可行性 有IP地址、用户名与密码等,可以下载一个FTP上传工具(cure)上传更新后的内容.可以在http://www.skycn.com/soft/683.html下载到. 下载以后,通过"站点管理"-->"新建站点".输入IP,用户名,密码.然后连接即可. 当然也可用FTP工具.直接在IE浏览器地址栏输入ftp://www.域名/然后输入用户名和密码.同样可以上传.随时更新文件! 第三章 开发环境的说明与安装 3.1. 开发语言的选择 3.1.1. JAVA简介 Java是Sun公司推出的新的一代面向对象程序设计语言,特别适合于Internet应用程序开发。Java的产生与流行是当今Internet发展的客观要求,Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的,特别适合在Internet环境上开发的应用系统。 3.1.2. Web应用程序开发环境—JSP技术 JSP的全称是Java Server Pages,它是SUN推出的一种动态网页技术标准。它在传统的静态页面文件(*.html,*.htm)中加入JAVA程序片段和JSP标记,就构成了JSP页面。JSP具有以下的优点: 1、将业务层与表示层分离:使用JSP技术,网络开发人员可充分使用HTML来设计页面显示部分(如字体颜色等),并使用JSP指令或者JAVA程序片段来生成网页上的动态内容; 2、能够跨平台:JSP支持绝大部分平台,包括现在非常流行的LINUX系统,应用非常广泛的Apache服务器也提供了支持JSP的服务; 3、组件的开发和使用很方便:如ASP的组件是由C++,VB等语言开发的,并需要注册才能使用;而JSP的组件是用Java开发的,可以直接使用; 4、一次编写,处处运行:作为JAVA开发平台的一部分,JSP具有JAVA的所有优点,包括Write once , Run everywhere. 3.2. 数据库的选择 3.2.1. Web应用程序开发环境—SQLserver数据库 SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的。SQL Server 2000是Microsoft公司于2000年推出的最新版本。 SQL Server 特点:   1.真正的客户机/服务器体系结构。   2.图形化用户界面,使系统管理和数据库管理更加直观、简单。   3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。   4.SQL Server与Windows NT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等。SQL Server也可以很好地与Microsoft BackOffice产品集成。   5.具有很好的伸缩性,可跨越从运行Windows 95/98的膝上型电脑到运行Windows 2000的大型多处理器等多种平台使用。   6.对Web技术的支持,使用户能够很容易地将数据库中的数据发布到Web页面上。   7.SQL Server提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。   SQL Server 2000与以前版本相比较,又具有以下新特性 :   1.支持XML(Extensive Markup Language,扩展标记语言)   2.强大的基于Web的分析   3.支持OLE DB和多种查询   4.支持分布式的分区视图   安装、运行SQL Server 2000的硬件需求   (1)计算机   Inter及其兼容计算机,Pentium 166Mz或者更高处理器或DEC Alpha和其兼容系统。   (2)内存(RAM)   企业版最少64MB内存,其他版本最少需要32MB内存,建议使用更多的内存。   (3)硬盘空间   完全安装(Full)需要180MB的空间,典型安装(Typical)需要170MB的空间,最小安装(Minimum)需要65MB的空间。 3.3. 开发工具的选择 MyEclipse,Deamweare,选择SQLserver作为后台的数据库,选择JAVA、JSP、JavaScript、Html作为应用程序开发工具,运用Tomcat服务器技术,整个系统完全基于B/S (Browser/Server)模式进行设计。 1、Tomcat应用服务器 目前支持JSP的应用服务器是较多的,Tomcat是其中较为流行的一个Web服务器,被JavaWorld杂志的编辑选为2001年度最具创新的Java产品,可见其在业界的地位。 Tomcat是一个免费的开源的Serlvet容器,在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。 Tomcat也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache。我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet。Tomcat是一个很好的工具,不仅仅因为其免费,功能强大,更因为其开放性,越来越受到人们的重视。 2、 B/S 开发模式 伴随着Internet的迅速发展,计算机技术正在由基于C/S(client/ Server)模式的应用系统转变为基于B/S模式的应用系统。 过去,网络软件的开发都采用C/S(client)模式,在这种模式下,主要的业务逻辑都集中于客户端程序,因此,必然导致以下问题: 系统安装、调试、维护和升级困难。由于客户端的硬件配置可能存在差异,软件环能各不相同,因此,在安装时,必须对每一个客户端分别进行配置,同样,在软件升级时也要对客户端分别处理。 B/S模式带来了巨大的好处: 开发成本及维护成本降低。由于B/S架构管理软件只安装在服务器端(Server)上,即应用程序在部署、升级、维护时,只需要在服务器端进行配置就可以了,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。 良好的安全性能,防火墙技术可以保证后台数据库的安全性。所有的配置工作都集中在服务器端且所有客户端请求都是通过DBMS来访问数据库,从而大大减少了数据直接暴露的风险。 第四章 系统设计 4.1开发框架技术介绍 对于框架技术,我们采用Struts+ajax的整合! Struts是应用比较广泛的一种表现层框架 1、 Struts是一个为开发基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Servlet,JSP和custom tag library构建Web应用的一项非常有用的技术。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速。它使用服务层框架可以将JavaBeans从Jsp/Servlet中分离出来,而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关信息,一般是通过标签库(Taglib)实现,不同框架有不同自己的标签库,Struts是应用比较广泛的一种表现层框架。 2、 Ajax我们主要应用就是xmlhttprequest,回调函数实现局部刷新达道数据更新! 4.2需求分析 Blog网站主要是实现注册用户登录、管理相关信息、博文及相关评论、查看留言、友情链接、及图片的上传和图像的播放而为上网用户提供按博文主题搜索,查看注册用户的博文及提出相关评论,并为注册用户写留言,游览注册用户的相册、注册等功能的系统。下面就以两种不同的用户来分析博客网站的需求。 4.2.1注册博友 首先必须在博客首页中登录填写用户名和密码,这样才能执行一些相关操作,不然就是普通用户只能查看一些信息,而不能发表博文。可以在管理页面上添加博文的分类,可以上传图片和游览自己的相册,在上传过程中可以将一张图片定义为自己的签名,在个人管理页面中注册用户还可以修改自己的个人信息。博文管理,友情链接管理及博文分类管理,用例图2。 图2 博客管理页面的用例图 在博客主界面中发表博文时可以选择博文类型,这样可以更好管理自己的博文。并查看和删除网友对自己的博文的一些评论、查看和删除网友留下的一些留言,提供与其他网友交流的空间。更好交流,在信息时代人们通过个人空间沟通也用来但不能在自己的博客主页面中提交评论和留言。。这样在本系统中就可以为博友提供更多的个人色彩。在管理页面中添加和删除友情连接。这样博友可以在自己空间中快速定位自己的关心的网站。这样还可以让网友看到自己的一些信息。友情链接及网页访问量统计显示:在博客的个人页面中还提供了推荐给普通网络用户的相关友情链接,此外,对个人页面的访问量也在随时进行统计,并在个人页面中进行直观的显示。 博客主页面的用例图如图3所示: 图3 博客主页面的用例图 4.2.2 普通用户 在博客注册页面注册成为博客的注册用户,才可以拥有自己独立的空间,进入某一博客页面查看相关文章信息时,可以随时对自己所感兴趣的文章发表评论,同时也可以查看到其他人针对该博文的评论。普通用户在阅读博文时可以在最后留下自己的一些评论。他也可以留下更多的信息。这样他可以写留言。这样他留下的信息就更快地被博友所看到。普通用户进入博友的用例图如图4所示: 图4上网博友在博客主页面的用例图 普通网友可以搜索自己关心的一些数据。并且在搜索结果中提供在结果范围内再次搜索。这样就可以将范围缩小。首页向注册用户提供登陆模块,注册用户在博客网站首页跟上网网友一样可以查看博客和博文推荐。上网网友可以注册成为博客用户,拥有自己独立的空间。这一模块的用例图如图5所示: 图5 博客首页的用例图 4.3 功能模块介绍 4.3.1 博客注册登录管理模块 博客注册登录管理模块用于建立博客网站固定的客户群体,通过记录对应的博客档案,实现对博客信息的后台维护及管理,同时也便于通过博客档案库将网站最新动态及相关企业的信息方便地传达给每一位潜在的客户。 该功能模块实现了以下几个子功能。 (1)新博客在线注册。 (2)博客登录管理。 (3)跳转到博客主页。 只有进行登录并通过身份验证的用户,才可以在个人博客页面发表日志,并借助个人设置实现对个人博客相关信息的管理维护。对于没有经过身份验证的网络用户不允许在博客页面中发表日志,更不允许对博客页面信息进行管理维护。 该模块实现新博客的注册及登录验证功能。其中,注册新博客时会对用户输入的注册信息进行有效性验证,包括基本数据格式的有效性以及逻辑有效性,例如,用户名被占用时将及时给出提示。注册成功的博客登录时,会随时根据博客输入的登录信息进行提示,如用户名错误或者密码错误。 4.3.2 博客及文章检索查询模块 博客及文章检索查询模块为网络用户提供便捷的搜索,以及日志阅读浏览等功能,同时对日志的评论信息、博客推荐也能够及时反馈给网络用户。 该功能模块实现了以下几个子功能。 (1)热门博客页面推荐。 (2)最新博客日志推荐。 (3)日志信息关键字搜索。 该模块能够在网页中随时提供在线的最新日志信息。该信息需要定期更新,网络用户可以随时获得最新日志以及最热门的博客推荐。在客户选择了某个博客或者某个感兴趣的日志后,可以方便地跳转到对应博客页面进行日志的阅读,并和博客进行交流互动。 为了使网络用户尽快定位到所需的博客资料及日志信息,本模块提供了搜索功能,用户可以对所关注的日志信息按照标题进行关键字搜索,以避免用户浏览多个页面来寻找所需的日志信息。 4.3.3博客页面显示模块 当网络用户进入某个人博客主页后,在该页面中将提供博客日志列表的显示,同时为了方便用户浏览,在该模块中提供根据分类名进行日志列表的显示,也提供日志评论的浏览,此外还允许用户在博客页面中发表评论及留言。 该功能模块实现了如下几个子功能。 (1)用户可以分页查看对应的日志内容及评论信息。 (2)用户可以针对日志内容发表评论。 (3)用户可以针对博客进行留言。 (4)用户可以分类查看日志内容。 在该模块中还提供了博客页面统计信息,日志、评论及留言信息分页显示等方便用户的显示效果。 4.3.4 博客个人维护管理模块 博客个人维护管理模块用于实现用户对博客个人主页及相关信息的动态管理。 该功能模块实现了如下几个子功能: (1)日志及日志分类管理。 (2)评论及留言管理。 (3)个人基本信息维护管理。 借助该模块,用户可以随时对个人博客主页中的内容进行增加或修改,包括日志分类信息的更新、评论及留言管理等功能,也允许用户对博客的个人信息进行维护及其管理。 4.4 系统分析 本系统采用严格的J2 EE 应用结构,主要有如下几个分层。 1. 表现层:由JSP 页面组成。 2. MVC 层:使用Struts框架。 3. 业务逻辑层:主要由Spring loC 容器管理的业务逻辑组件组成。 4. DAO 层:由7 个DAO 组件组成,实现类必须继承Spring提供的HibernateDaoSupport。 5. Hibernate 持久层:由7 个PO 组成,并在Hibernate Session 管理下,完成数据库访问。 6. 数据库服务层:使用MySQL 数据库存储持久化数据。 系统的具体分层如图5 所示。 图6 系统结构图 在图6 黑色大方框内的MVC 控制层、Service 层及DAO 组件层的组件,都由Spring IOC 容器负责生成,并管理组件的实例(实例必须是单身模式的,本系统中的bean基本上是单身的)。 4.3.1系统架构说明 本系统不仅严格按MVC 模式设计,还按J2 EE 分层设计,将中间层严格分成业务逻辑层、DAO 层及数据持久层等。MVC 层的控制器绝对禁止持久层访问,甚至不参与业务逻辑的实现。表现层采用传统JSP 技术。 本系统采用的是典型的J2EE 三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。Jsp广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。中间层采用的是流行的Spring+Hibernate ,为了将控制层与业务逻辑层分离,又细分为以下几种。 Web 层,就是MVC 模式里面的C,负责逻辑层和表现层的交互。调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC采用Struts框架。 Service 层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO 层为基础,通过对DAO 组件的正面模式包装,完成系统所要求的业务逻辑。 DAO 层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。 PO ,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate 作为ORM 框架。Spring 的作用贯穿了整个中间层,将Web 层、Service 层、DAO 层及PO 无缝整合,其数据服务层用来存放数据。 通过使用Hibernate 持久层,可以避免使用传统的JDBC 操作数据库,对JDBC近一步包装,从而更好地使用面向对象的方式来操作数据库。保证了整个软件开发过程以面向对象的方式进行,即面向对象分析、设计及编程,透过Hibernte 对PO对象持久化操作,不管插入还是查询都是通过PO。 4.3.2实现DAO 层 DAO 还有助于提升系统的可移植性。独立的DAO 层使得系统能在不同的数据库之间轻易切换,底层的数据库实现对于业务逻辑组件是透明的。数据库移植时仅仅影响DAO 层,不同数据库的切换不会影响业务逻辑组件,因此提高了系统的可复用性。 对于不同的持久层技术, Spring 的DAO 提供一个DAO 模板,将通用的操作放在模板里完成,而对于特定的操作,则通过回调接口完成。Spring 为Hibernate 提供的DAO 支持类是: HibernateDaoSupport。 4.3.3 DAO组件的定义 DAO 组件提供了各持久化对象的基本的CRUD 操作。而在DAO 接口里则对DAO组件包含的各种CRUD 方法提供了声明,但有一些IDE 工具也可以生成基本的CRUD方法。使用DAO 接口的原因是:避免业务逻辑组件与特定的DAO组件藕合。由于DAO 组件中的方法不是开始就设计出来的,其中的很多方法可能会随着业务逻辑的需求而增加,但以下几个方法是通用 的。 • get: 根据主键加载持久化实例。 • saveor update: 保存或更新持久化实例。 • remove: 删除持久化实例。 上面涉及了7个PO,这样我们必须设计7个对应的PODao 7个Dao必须继承BaseDao 这个BaseDao 有对接口的一些基本的CURD操作。7个Dao 如下。LinksDao ,BlogDao、FeedBackDao、ArticleDao、MessageDao、SortDao、PictureDao。这7个Dao 分别封装对自己的持久化对象的一些操作。 4.3.4 部署DAO 层 HibernateDaoSupport类只需要一个SessionFactory 属性,即可完成数据库访问。SessionFactroy创建Session,而数据库的CRUD操作都是有Session 完成,并将查询结果保存在一级缓存中,每次用户提交一次会话,可能需要Session完成一些数据库的操作而实际的数据库访问由模板类HibernateTemplate完成,该模板类提供了大量便捷的方法,简化了数据库的访问。 第五章 数据库设计 5.1定义(数据词典) 1、数据库表名的定义使用:重点字_table;重点字可以是多个英文单词的组合,从组合的第二单词起首字母大写,字段命名是能表达字段内容的英文单词的组合,组合方式同表名重点字相同。 2、NN 表示not null 不填表可为空。 3、数据类型不使用固定数据库的类型,标识大众类型,如字符串、字符、数字等。这样在更改数据库时需求的数据是可移植的 4、输写数据表在数据库中的物理名称,可用自己熟悉的语言再定义表名称,方便沟通。 5、长度定义又数据类型决定:如字符串可选8000以下,数字可在50位之间,字符只允许一位。 6、输入方式表示数据的来源:生成表由程序或数据库的索引自动生成,而不需人工录入;输入表示通过文本框等输入的数据;选择表单选框、复选框、下拉列表等通过选择输入的数据;自定获取是为外码的输入设定的,它由程序自动获取。 5.2主要表结构如下 1. 表[blogs]日志数据表 字段名 类型 说明 blogid Int(10) 日志的ID title text 日志标题 pubtime Int(11) 日志发表时间 authorid Int(8) 日志作者的UID replies Int(8) 日志的评论数 tbs Int(8) 日志的trackback数 views Int(8) 日志的查看次数 category Int(3) 日志所属的分类的ID content mediumtext 日志正文内容 property Int(1) 日志的属性 0 公开日志 1 锁定日志 2 隐藏日志 3 一般草稿 2.表[user]博友登陆信息表 字段名 类型 说明 userid Int(10) 博友ID nicheng Text 博友在博客里的称呼 username text 登陆时的用户名 password text 登陆密码 3.表[register]用户数据表 字段名 类型 说明 userid Int(8) 登陆时需要用到的用户名 username text 用户昵称 userpwd Int(8) 登陆密码 regtime Int(11) 注册时间 usergroup Int(2) 所属的用户组ID email text 用户email qq text Qq号 msn text 用户msn gender text 用户性别 第六章 主要功能的实现 6.1 登录控制: if(this.session().getAttribute("rand")!=null){//检验随机数是否为空 if(this.checkCode.equals(this.session().getAttribute("rand").toString())){//比较随机数 uservo=userbo.queryUserByINfo(uservo);//检验用户信息并将信息返回 if(uservo!=null){//看用户是否存在 this.setUserpurview(uservo.getPurviewId());//设置用户权限 this.session().setAttribute("user", uservo);//将用户信息放在session中 return SUCCESS;//返回用户主界面页面 }else{ return ERROR;返回到失败页面} }else{return ERROR; }}else{ return ERROR; } 6.2 Ajax 读取txt格式数据 function ajax_function(var1,var2){ var xmlHttp = null; //创建xmlhttprequest try { // Firefox, Opera 8.0+, Safari 对不同浏览器常见不同对象 xmlHttp=new XMLHttpRequest(); } catch (e) { try { // Internet Explorer xmlHttp=new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { xmlHttp=new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) { alert('Your browser does not support AJAX!'); return false; } } } xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState == 4 && xmlHttp.status == 200) { var someDiv = document.getElementById('someDiv'); someDiv.innerHTML=xmlHttp.responseText; } } xmlHttp.open('GET','www/index.jsp?param1='+var1+'¶m2='+var2,true); xmlHttp.send(null); } 6.3 系统架构与数据库的连接 由于我们开发时是利用MVC的设计模式,所以在此我们的数据库连接是封存在M中的,即只要我们和M层连接上,就已经连接上数据库了。 Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)。我们只需在hibernate.cfg.xml中配置以下语句即可: sa jdbc:microsoft:sqlserver://localhost:1035;DatabaseName=webexamine org.hibernate.dialect.SQLServerDialect sqlserver2000 aaaaaaaa com.microsoft.jdbc.sqlserver.SQLServerDriver org.hibernate.dialect.HSQLDialect true 其实我们在这里配置了一个数据连接,以保证系统的正常运行,我们需要使用proxool连接池,我们经测试,分别用proxool、tomcat JNDI、Hibernate自带的连接池进行配置之后分别执行以上的10000条数据插入和读取,结果显示proxool的性能要优于tomcat JNDI,而Hibernate自带的就更不用提了,差很远。依次为:39265毫秒/10000条、26013毫秒/10000条、50029毫秒/10000条。 6.4数据的备份与还原 我们根据Mysql数据库提供的backup(备份)命令及restore(恢复)命令,进行数据库的备份与还原,在连接数据库后,我们在需要备份和还原的地方加入以下语句: backup database to disk='备份文件名' restore database from disk='备份文件名' 然后发送给数据库的管理对象进行数据还原与备份。 在知道了数据库备份与还原的接口后,用JAVA进行具体的连接,这里采用JAVA直连的方 法,部分代码如下: try{ String user="sa";//连接sqlserver2000数据库登陆名 String password="aaaaaaaa";//连接sqlserver2000数据库密码 String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";//连接数据库的驱动字符串 String connStr="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=webexamine";//注册连接字符串 Connection con=null; Class.forName( sDBDriver);//注册数据库驱动 con = Driver Manager.getConnection(connStr ,user,password);//获取数据库连接 String sql="backup database xncsims to disk='d:\\xncback.dat'";//备份数据库,还原数据库和着类似,只是将这句变为还原的语句 st=con.createStatement();//创建发送对象 rs=st.executeQuery(sql);//这里就是把你的SQL语句发到数据库执行 }catch(SQLException e){ System.out.println(e.toString());} catch(Exception e){ System.out.println(e.toString());} 6.4部分效果预览图 主页 留言界面
    基于Spring Boot个人博客系统源码是一个基于Java语言开发的Web应用程序,可以实现个人分享、发布文章、管理评论等功能。该源码会基于Spring Boot框架来构建整个系统,使用Spring MVC来实现页面的展示和交互,利用Spring Data JPA来管理数据库操作,同时整合Thymeleaf模板引擎来实现页面的动态渲染。此外,该源码还会使用Spring Security来实现用户认证和权限控制,保障用户数据的安全性。 博客系统的源码会包括用户管理模块、文章管理模块、评论管理模块等功能。用户管理模块将包括用户注册、登录、个人信息修改等功能;文章管理模块将包括文章的发布、编辑、删除等功能;评论管理模块将包括评论的查看、回复、删除等功能。整个系统的源码会注重用户体验和系统性能,设计到前端页面的响应式布局和后端数据的高效管理。 另外,该源码还会考虑系统的扩展性和可维护性,会遵循MVC的设计模式,将页面、逻辑处理和数据管理做到清晰分离,还会注重代码的规范和注释,方便其他开发人员进行二次开发和维护。同时,会充分利用Spring Boot提供的快速开发特性,加速系统的建设过程。 综上所述,基于Spring Boot个人博客系统源码将会是一个强大的、高可用性的系统,可以满足用户的基本需求,而且具有良好的扩展性和可维护性,是一个值得学习和使用的优秀开源项目

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值