1.   今日大纲

1、  学习Nginx的使用

2、  实现商品的管理

a)       新增商品

b)       查询商品列表

c)       编辑商品

d)       删除商品

e)       上架和下架商品


SwitchHosts!_win_x64_3.5.0(5486)

https://oldj.github.io/SwitchHosts/

使用SwitchHosts!修改本地hosts文件,实现ip地址和域名的解析。

Win10系统的hosts目录为:

C:\Windows\System32\drivers\etc

Linux下的hosts文件所在路径: /etc/hosts

  1. # taotao2016 开发环境
  2. 127.0.0.1 www.taotao.com
  3. 127.0.0.1 manage.taotao.com
  4. 127.0.0.1 image.taotao.com

修改配置conf/nginx.conf

  1. #user nobody;
  2. worker_processes ;
  3.  
  4. #error_log logs/error.log;
  5. #error_log logs/error.log notice;
  6. #error_log logs/error.log info;
  7.  
  8. #pid logs/nginx.pid;
  9.  
  10. events {
  11. worker_connections ;
  12. }
  13.  
  14. http {
  15. include mime.types;
  16. default_type application/octet-stream;
  17.  
  18. sendfile on;
  19.  
  20. keepalive_timeout ;
  21.  
  22. gzip on;
  23.  
  24. server {
  25. listen ;
  26. server_name manage.taotao.com;
  27.  
  28. #charset koi8-r;
  29.  
  30. proxy_set_header X-Forwarded-Host $host;
  31. proxy_set_header X-Forwarded-Server $host;
  32. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  33.  
  34. location / {
  35. proxy_pass http://127.0.0.1:8081;
  36. proxy_connect_timeout ;
  37. proxy_read_timeout ;
  38. }
  39. }
  40. server {
  41. listen ;
  42. server_name image.taotao.com;
  43.  
  44. #charset koi8-r;
  45.  
  46. proxy_set_header X-Forwarded-Host $host;
  47. proxy_set_header X-Forwarded-Server $host;
  48. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  49.  
  50. location / {
  51. root F:\\javaweb\\taotao-upload;
  52. }
  53. }
  54. }

taotao2016.conf

使用nginx实现反向代理监听端口

  1. Shift+鼠标右键启动Powershell
  2. ls
  3. F:\javaweb\nginx-1.16.
  4.  
  5. #powershell启动和关闭nginx.exe服务
  6.  
  7. .\nginx -c conf\taotao2016.conf
  8.  
  9. .\nginx -s stop
  10.  
  11. .\nginx -s reload


Spring4.3.25版本集成使用通用Mapper,可以使用泛型注入的新特性。

  1. package com.taotao.manage.service;
  2.  
  3. import java.util.Date;
  4. import java.util.List;
  5.  
  6. import org.springframework.beans.factory.annotation.Autowired;
  7.  
  8. import com.github.pagehelper.PageHelper;
  9. import com.github.pagehelper.PageInfo;
  10. import com.taotao.manage.pojo.BasePojo;
  11.  
  12. import tk.mybatis.mapper.common.Mapper;
  13. import tk.mybatis.mapper.entity.Example;
  14.  
  15. public abstract class BaseService<T extends BasePojo> {
  16. /**
  17. * 方法:
  18. 1、 queryById
  19. 2、 queryAll
  20. 3、 queryOne
  21. 4、 queryListByWhere
  22. 5、 queryPageListByWhere
  23. 6、 save
  24. 7、 update
  25. 8、 deleteById
  26. 9、 deleteByIds
  27. 10、 deleteByWhere
  28. */
  29.  
  30. // public abstract Mapper<T> getMapper();
  31. // spring4.3.25支持泛型注入新特性
  32. @Autowired
  33. private Mapper<T> mapper;
  34.  
  35. /**
  36. * 根据id查询数据
  37. * @param id
  38. * @return
  39. */
  40. public T queryById(Long id) {
  41. return this.mapper.selectByPrimaryKey(id);
  42. }
  43. /**
  44. * 查询所有数据
  45. * @return
  46. */
  47. public List<T> queryAll(){
  48. return this.mapper.selectAll();
  49. }
  50. /**
  51. * 根据条件查询一条数据
  52. * 如果该条件所查询的数据为多条会抛出异常
  53. * @param record
  54. * @return
  55. */
  56. public T queryOne(T record) {
  57. return this.mapper.selectOne(record);
  58. }
  59. /**
  60. * 根据条件查询多条数据
  61. * @param record
  62. * @return
  63. */
  64. public List<T> queryListByWhere(T record){
  65. return this.mapper.select(record);
  66. }
  67. /**
  68. * 根据条件分页查询数据
  69. * @param record
  70. * @param pageNum
  71. * @param pageSize
  72. * @return
  73. */
  74. public PageInfo<T> queryPageListByWhere(T record,Integer pageNum,Integer pageSize){
  75. //设置分页参数
  76. PageHelper.startPage(pageNum, pageSize);
  77. List<T> list = this.mapper.select(record);
  78. return new PageInfo<T>(list);
  79. }
  80. /**
  81. * 新增数据,未设置的值为null
  82. * @param t
  83. * @return
  84. */
  85. public Integer save(T t) {
  86.  
  87. t.setCreated(new Date());
  88. t.setUpdated(t.getCreated());
  89. return this.mapper.insert(t);
  90. }
  91. /**
  92. * 选择不为null的字段作为插入更新数据
  93. * @param t
  94. * @return
  95. */
  96. public Integer saveSelective(T t) {
  97. t.setCreated(new Date());
  98. t.setUpdated(t.getCreated());
  99. return this.mapper.insertSelective(t);
  100. }
  101.  
  102. /**
  103. * 更新数据,未设置的字段值为null
  104. * @param t
  105. * @return
  106. */
  107. public Integer update(T id) {
  108. id.setUpdated(new Date());
  109. return this.mapper.updateByPrimaryKey(id);
  110. }
  111. /**
  112. * 更新不为null的字段作为更新的字段
  113. * @param t
  114. * @return
  115. */
  116. public Integer updateSelective(T id) {
  117. id.setUpdated(new Date());
  118. id.setCreated(null); //强制设置创建时间为null,永远不会被更新
  119. return this.mapper.updateByPrimaryKeySelective(id);
  120. }
  121.  
  122. /**
  123. * 根据主键id删除数据(物理删除)
  124. * @param id
  125. * @return
  126. */
  127. public Integer deleteById(Long id) {
  128. return this.mapper.deleteByPrimaryKey(id);
  129. }
  130. /**
  131. * 根据主键ids批量删除数据(物理删除)
  132. * @param ids
  133. * @param clazz
  134. * @param property
  135. * @return
  136. */
  137. public Integer deleteByIds(List<Object> ids ,Class<T> clazz,String property) {
  138. Example example = new Example(clazz);
  139. //设置条件,andIn(数据库字段,12345)
  140. example.createCriteria().andIn(property, ids);
  141. return this.mapper.deleteByExample(example);
  142. }
  143. /**
  144. * 根据条件删除数据
  145. * @param record
  146. * @return
  147. */
  148. public Integer deleteByWhere(T record) {
  149. return this.mapper.delete(record);
  150. }
  151. }

public abstract class BaseService

mysql数据库的bigint类型对应JAVA中的Long

item-add.jps的第115行修改restful风格的ajax请求:

  1. //提交到后台的RESTful
  2. $.ajax({
  3. type: "POST",
  4. url: "/rest/item",
  5. data: $("#itemAddForm").serialize(),
  6. statusCode: {
  7. 201: function() {
  8. $.messager.alert('提示','新增商品成功!');
  9. },
  10. 400: function() {
  11. $.messager.alert('提示','提交的参数不合法!');
  12. },
  13. 500: function() {
  14. $.messager.alert('提示','新增商品失败!');
  15. }
  16. }
  17. });

通过日志查看操作Item表和ItemDesc表,由于在Service层的:同一个类、同一个方法,并且已经配置好了spring的AOP管理事务。

  1. 信息: Starting ProtocolHandler ["http-bio-8081"]
  2. -- ::, [http-bio--exec-] [com.alibaba.druid.pool.DruidDataSource]-[INFO] {dataSource-} inited
  3. -- ::, [http-bio--exec-] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Creating a new SqlSession
  4. -- ::, [http-bio--exec-] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4be7a5c4]
  5. -- ::, [http-bio--exec-] [org.mybatis.spring.transaction.SpringManagedTransaction]-[DEBUG] JDBC Connection [com.mysql.jdbc.JDBC4Connection@1e0b3b6e] will be managed by Spring
  6. -- ::, [http-bio--exec-] [com.taotao.manage.mapper.ItemMapper.insert]-[DEBUG] ==> Preparing: INSERT INTO tb_item ( created,updated,id,title,sell_point,price,num,barcode,image,cid,status ) VALUES( ?,?,?,?,?,?,?,?,?,?,? )
  7. -- ::, [http-bio--exec-] [com.taotao.manage.mapper.ItemMapper.insert]-[DEBUG] ==> Parameters: -- ::59.17(Timestamp), -- ::59.17(Timestamp), null, Z7(String), 970M(String), (Long), (Integer), (String), (String), (Long), (Integer)
  8. -- ::, [http-bio--exec-] [com.taotao.manage.mapper.ItemMapper.insert]-[DEBUG] <== Updates:
  9. -- ::, [http-bio--exec-] [com.taotao.manage.mapper.ItemMapper.insert!selectKey]-[DEBUG] ==> Executing: SELECT LAST_INSERT_ID()
  10. -- ::, [http-bio--exec-] [com.taotao.manage.mapper.ItemMapper.insert!selectKey]-[DEBUG] <== Total:
  11. -- ::, [http-bio--exec-] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4be7a5c4]
  12. -- ::, [http-bio--exec-] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4be7a5c4] from current transaction
  13. -- ::, [http-bio--exec-] [com.taotao.manage.mapper.ItemDescMapper.insert]-[DEBUG] ==> Preparing: INSERT INTO tb_item_desc ( created,updated,item_id,item_desc ) VALUES( ?,?,?,? )
  14. -- ::, [http-bio--exec-] [com.taotao.manage.mapper.ItemDescMapper.insert]-[DEBUG] ==> Parameters: -- ::59.332(Timestamp), -- ::59.332(Timestamp), (Long), qq(String)
  15. -- ::, [http-bio--exec-] [com.taotao.manage.mapper.ItemDescMapper.insert]-[DEBUG] <== Updates:
  16. -- ::, [http-bio--exec-] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4be7a5c4]
  17. -- ::, [http-bio--exec-] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4be7a5c4]
  18. -- ::, [http-bio--exec-] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4be7a5c4]
  19. -- ::, [http-bio--exec-] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4be7a5c4]

5.2.  上传组件的JS实现的上传参数

5.3.实现springMVC图片上传

1.导入 commons-fileupload 的依赖坐标

  1. <!-- 文件上传组件 -->
  2. <dependency>
  3. <groupId>commons-fileupload</groupId>
  4. <artifactId>commons-fileupload</artifactId>
  5. </dependency>

2.配置文件上传解析器在springmvc.xml

  1. <!-- 定义文件上传解析器 -->
  2. <bean id="multipartResolver"
  3. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  4. <!-- 设定默认编码 -->
  5. <property name="defaultEncoding" value="UTF-8"></property>
  6. <!-- 设定文件上传的最大值5MB,5*1024*1024 -->
  7. <property name="maxUploadSize" value="5242880"></property>
  8. </bean>

3.PicUploadController使用了配置文件中的路径,读取配置文件用Service层spring父容器的一个“读取配置文件的类” 的 public关键字修饰的成员属性

  1. package com.taotao.manage.controller;
  2.  
  3. import java.awt.image.BufferedImage;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.util.Date;
  7.  
  8. import javax.imageio.ImageIO;
  9. import javax.servlet.http.HttpServletResponse;
  10.  
  11. import org.apache.commons.lang3.RandomUtils;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.joda.time.DateTime;
  14. import org.slf4j.Logger;
  15. import org.slf4j.LoggerFactory;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.http.MediaType;
  18. import org.springframework.stereotype.Controller;
  19. import org.springframework.web.bind.annotation.PostMapping;
  20. import org.springframework.web.bind.annotation.RequestMapping;
  21. import org.springframework.web.bind.annotation.RequestParam;
  22. import org.springframework.web.bind.annotation.ResponseBody;
  23. import org.springframework.web.multipart.MultipartFile;
  24.  
  25. import com.fasterxml.jackson.databind.ObjectMapper;
  26. import com.taotao.common.bean.PicUploadResult;
  27. import com.taotao.manage.service.PropertieService;
  28.  
  29. /**
  30. * 图片上传
  31. */
  32. @Controller
  33. @RequestMapping("/pic")
  34. public class PicUploadController {
  35.  
  36. //创建日志对象
  37. private static final Logger LOGGER = LoggerFactory.getLogger(PicUploadController.class);
  38.  
  39. @Autowired
  40. private PropertieService propertieService;
  41.  
  42. private static final ObjectMapper mapper = new ObjectMapper();
  43.  
  44. // 允许上传的格式
  45. private static final String[] IMAGE_TYPE = new String[] { ".bmp", ".jpg", ".jpeg", ".gif", ".png" };
  46.  
  47. @PostMapping(value = "/upload", produces = MediaType.TEXT_PLAIN_VALUE)
  48. @ResponseBody
  49. public String upload(@RequestParam("uploadFile") MultipartFile uploadFile , HttpServletResponse response) throws Exception {
  50.  
  51. // 校验图片格式
  52. boolean isLegal = false;
  53. for (String type : IMAGE_TYPE) {
  54. //忽略大小写比较字符串的末尾
  55. if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {
  56. isLegal = true;
  57. break;
  58. }
  59. }
  60.  
  61. // 封装Result对象,并且将文件的byte数组放置到result对象中
  62. PicUploadResult fileUploadResult = new PicUploadResult();
  63.  
  64. // 状态
  65. fileUploadResult.setError(isLegal ? 0 : 1);
  66.  
  67. // 文件新路径
  68. String filePath = getFilePath(uploadFile.getOriginalFilename());
  69.  
  70. if (LOGGER.isDebugEnabled()) {
  71. LOGGER.debug("Pic file upload .[{}] to [{}] .", uploadFile.getOriginalFilename(), filePath);
  72. }
  73.  
  74. // 生成图片的绝对引用地址
  75. String picUrl = StringUtils.replace(StringUtils.substringAfter(filePath, propertieService.REPOSITORY_PATH), "\\", "/");
  76. fileUploadResult.setUrl(propertieService.IMAGE_BASE_URL + picUrl);
  77.  
  78. File newFile = new File(filePath);
  79.  
  80. // 写文件到磁盘
  81. uploadFile.transferTo(newFile);
  82.  
  83. // 校验图片是否合法
  84. isLegal = false;
  85. try {
  86. BufferedImage image = ImageIO.read(newFile);
  87. if (image != null) {
  88. fileUploadResult.setWidth(image.getWidth() + "");
  89. fileUploadResult.setHeight(image.getHeight() + "");
  90. isLegal = true;
  91. }
  92. } catch (IOException e) {
  93. }
  94.  
  95. // 状态
  96. fileUploadResult.setError(isLegal ? 0 : 1);
  97.  
  98. if (!isLegal) {
  99. // 不合法,将磁盘上的文件删除
  100. newFile.delete();
  101. }
  102.  
  103. response.setContentType(MediaType.TEXT_HTML_VALUE);
  104. //将java对象序列化成json数据
  105. return mapper.writeValueAsString(fileUploadResult);
  106. }
  107.  
  108. private String getFilePath(String sourceFileName) {
  109. String baseFolder = propertieService.REPOSITORY_PATH + File.separator + "images";
  110. Date nowDate = new Date();
  111. // yyyy/MM/dd
  112. String fileFolder = baseFolder + File.separator + new DateTime(nowDate).toString("yyyy") + File.separator + new DateTime(nowDate).toString("MM") + File.separator
  113. + new DateTime(nowDate).toString("dd");
  114. File file = new File(fileFolder);
  115. if (!file.isDirectory()) {
  116. // 如果目录不存在,则创建目录
  117. file.mkdirs();
  118. }
  119. // 生成新的文件名
  120. String fileName = new DateTime(nowDate).toString("yyyyMMddhhmmssSSSS") + RandomUtils.nextInt(100, 9999) + "." + StringUtils.substringAfterLast(sourceFileName, ".");
  121. return fileFolder + File.separator + fileName;
  122. }
  123.  
  124. }

Spring容器  --  父容器

SpringMVC容器  -- 子容器

父子容器的关系:

1、  子容器能够访问父容器的资源(bean)

a)       示例:Controller可以注入Service

2、  父容器不能访问子容器的资源(bean)

  1. package com.taotao.manage.service;
  2.  
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.stereotype.Service;
  5.  
  6. @Service
  7. public class PropertieService {
  8. // 加载spring父容器中配置文件内容
  9. @Value("${REPOSITORY_PATH}")
  10. public String REPOSITORY_PATH;
  11.  
  12. @Value("${IMAGE_BASE_URL}")
  13. public String IMAGE_BASE_URL;
  14. }

对文件做校验:

1、 类型,通过文件的后缀名

2、 大小

3、 上传文件的内容做校验

 a)   通过获取文件的宽和高来判断是否是图片

7.   日志的书写

总结:

1、  方法的入参处需要将参数打印出

2、  业务执行的状态发生变化时,需要打印

3、  异常处需要打印


6.   查询商品列表

EasyUI的datagrid的格式化输出。

默认情况下,会直接显示返回的数据,但是有些情况下不能直接显示,如:价格、日期、性别,需要指定formatter函数。

  1. @Service
  2. public class ItemListService extends BaseService<Item> {
  3.  
  4. @Autowired
  5. ItemMapper itemMapper;
  6.  
  7. //根据商品更新时间降序排序
  8. public EasyUIResult queryItemList(Integer page, Integer rows) {
  9. //第三个参数:是否count查询
  10. PageHelper.startPage(page, rows, true);
  11.  
  12. //设置查询条件
  13. Example example = new Example(Item.class);
  14. example.setOrderByClause("updated DESC");
  15. List<Item> list = itemMapper.selectByExample(example);
  16.  
  17. PageInfo<Item> pageInfo = new PageInfo<>(list);
  18. // 返回给视图层一个包装好的EasyUIResult对象
  19. return new EasyUIResult(pageInfo.getTotal(), pageInfo.getList());
  20. }
  21.  
  22. }

=====================================

end

ZZJ_淘淘商城项目:day03(淘淘商城02 - 后台系统功能实现)的更多相关文章

  1. 【SSH网上商城项目实战14】商城首页UI的设计

    转自:https://blog.csdn.net/eson_15/article/details/51373403 前面我们利用EasyUI和SSH搭建好了后台的基本框架,做好了后台的基本功能,包括对 ...

  2. ZZJ_淘淘商城项目:day01(RESTful Web Service、SVN)

    淘淘商城项目是很适合初级Java程序员练习的实战项目,本次复习是另一位张老师教授的课,内容上与之前入老师版taotao商城比较有些新东西加了进来. 因此有必要记录下那些直到现在还可供参考的技术亮点分享 ...

  3. day68_淘淘商城项目_01

    原文:day68_淘淘商城项目_01 课程计划 第一天: 1.电商行业的背景介绍--电子商务 2.淘淘商城的系统架构 a) 功能介绍 b) 架构讲解 3.工程搭建--后台工程 a) 使用maven搭建 ...

  4. day68_淘淘商城项目_01_电商介绍 + 互联网术语 + SOA + 分布式 + 集群介绍 + 环境配置 + 框架搭建_匠心笔记

    课程计划 第一天: 1.电商行业的背景介绍--电子商务 2.淘淘商城的系统架构 a) 功能介绍 b) 架构讲解 3.工程搭建--后台工程 a) 使用maven搭建工程(工程大) b) 使用maven的 ...

  5. 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)

    本次项目相当于对python基础做总结,常用语法,数组类型,函数,文本操作等等 本项目在博客园里其他开发者也做过,我是稍作修改来的,大体没变的 项目需求: 信用卡+商城: A.信用卡(类似白条/花呗) ...

  6. 后盾网lavarel视频项目---5、淘宝镜像cnpm的原理及如何使用

    后盾网lavarel视频项目---5.淘宝镜像cnpm的原理及如何使用 一.总结 一句话总结: 原理:把npm上面的所有软件copy过来 使用:npm install -g cnpm --regist ...

  7. 商城项目实战 | 1.1 Android 仿京东商城底部布局的选择效果 —— Selector 选择器的实现

    前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 京东商城的底部布局的选择效果看上去很复杂,其实很简单,这主要是要 ...

  8. 商城项目实战 | 2.1 Android 仿京东商城——自定义 Toolbar (一)

    前言 本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 现在很多的 APP 里面都有自己的自定义风格,特别是京东商城中自 ...

  9. 商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)

    本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 上一篇文章<商城项目实战 | 2.1 Android 仿京东商城 ...

随机推荐

  1. SpringMVC使用可以访问静态资源,但是导致Controller访问失败

    如果在web.xml 拦截配置如下: <!-- Spring MVC servlet --> <servlet> <servlet-name>SpringMVC&l ...

  2. comparable接口 和 comparator接口的特点与区别

    1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的. 什么是自定义class: 如 public class Pe ...

  3. 51Nod大数加法(两个数正负都可)

    很多大数的问题都运用模拟的思想,但是这个说一样也一样,但是难度较大,很麻烦,我自己谢写了100多行的代码,感觉很对,但就是WA.其实个人感觉C和C++没有大数类,是对人思想和算法的考验,但是有时候做不 ...

  4. vue的开发中v-for报错 [vue/require-v-for-key] Elements in iteration expect to have 'v-bind:key' directives.

    用的VS Code 工具,安装了vetur插件,报错了如下 [eslint-plugin-vue] [vue/require-v-for-key] Elements in iteration expe ...

  5. dwz框架

    官网:http://jui.org/index_menu.html PDF教程:http://jui.org/doc/dwz-user-guide.pdf DWZ最大的特点是使用html扩展的方式来代 ...

  6. CodeForces - 131C The World is a Theatre(组合数)

    题意:已知有n个男生,m个女生.现在要选t个人,要求有至少4个男生,至少1个女生,求有多少种选法. 分析: 1.展开,将分子中的m!与分母中n!相约,即可推出函数C. #pragma comment( ...

  7. SPOJ 247 chocolate (CHOCLO)

    题目http://www.spoj.com/problems/CHOCOLA/ 把一整块巧克力分成一个一个单元,掰断每一横行有个代价值,掰断每个纵行也有个代价值,要你求最后的总代价值最小 这个题目放在 ...

  8. c语言中指向整型指针的指针的理解

    /************************************************************************* > File Name: ptr_ptr_i ...

  9. 斐波那契数列 yield 和list 生成

    def fab_demo4(max): a,n,b = 0,0,1 while n < max: yield b # 生成器走到这一步返回b,需要再次调用才能继续执行 a,b = b,a+b n ...

  10. JavaEE--使用百度echarts实现地图报表

    参考:http://echarts.baidu.com/option.html#title https://www.cnblogs.com/zhangyong123/p/4974554.html ht ...