SpringBoot初级知识总结,太难了,未完待续.......
idea如何打包发布springboot
1.1.环境准备
window系统,jdk8环境,springboot项目,maven3.5.4环境
1.2.进行打包发布
打开idea编辑器,打开一个写好的demo项目
在这里插入图片描述
然后打开idea编辑器下方的terminal窗口,当你打开这个窗口的时候,所在的位置就是目录的根位置了在这里插入图片描述
输入命令 mvn clean install -Dmaven.test.skip,这条命令就是用maven打成jar包的方式了,然后回车键。在这里插入图片描述
当看到BUILD SUCCESS的时候,就说明打包成功,在项目的target目录下就会出现一个jar包,默认的jar包名就是artifactId+version在这里插入图片描述
此时再进入到target目录,输入java -jar SpringBoot-Mybatis-0.0.1-SNAPSHOT.jar命令就可以运行jar包了在这里插入图片描述
当你看到Started DemoApplication in …的时候说明启动成功,就能在本地访问了在这里插入图片描述
结论:这就是SpringBoot项目的在Windows环境发布,linux环境也是一样的,同样要安装jdk和maven环境。这也是springboot的神奇之处,不需要发布到Tomcat下,因为SpringBoot内嵌了web服务器包括Tomcat
特点简介
- 由于传统的ssm、ssh等框架繁琐的配置文件,springboot的出现就是为了简化配置文件
- 内嵌Web服务器包括Tomcat,只需要打成jar包就可以运行项目
- SpringBoot基于全注解式的开发
SpringBoot整合Servlet
3.1.方式一
步骤:
- 写一个类MyFirstServlet继承HttpServlet,并重写doGet方法
- 在类的上面用@WebServlet标识Servlet并指明name和urlPatterns
- 在标识有@SpringBootApplication的主类上加上
@ServletComponentScan
FirstServlet.java
1package com.example.servlet.myservlet; 2 3import javax.servlet.http.HttpServlet; 4import java.io.IOException; 5import javax.servlet.ServletException; 6import javax.servlet.annotation.WebServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 910/**11 *SpringBoot整合Servlet方式一12 *@WebServlet(name="MyFirstServlet",urlPatterns="/myFirst")相当于如下:13 *14 *<servlet>15 * <servlet-name>MyFirstServlet</servlet-name>16 * <servlet-class>ah.szxy.servlet.FirstServlet</servlet-class>17 *</servlet>18 *<servlet-mapping>19 * <servlet-name>MyFirstServlet</servlet-name>20 * <url-pattern>/first</url-pattern>21 *</servlet-mapping>22 *23 */2425@WebServlet(name="MyFirstServlet",urlPatterns="/myFirst")26public class FirstServlet extends HttpServlet {2728 @Override29 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {30 System.out.println("MyFirstServlet init............");31 }32}
ServletApplication.java
1package com.example.servlet; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5import org.springframework.boot.web.servlet.ServletComponentScan; 6 7@SpringBootApplication 8@ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化 9public class ServletApplication {1011 public static void main(String[] args) {12 SpringApplication.run(ServletApplication.class, args);13 }1415}
然后启动项目
在这里插入图片描述
最后在浏览器输入localhost:8080/myFirstServlet,页面显示空白,在控制台打印MyFirstServlet init…………
在这里插入图片描述
3.2.方式二
步骤:
创建一个类SecondServlet继承HttpServlet,并重写doGet方法。
在@SpringBootApplication标识的主类中加@Bean的一个方法。
SecondServlet.java
1package com.example.servlet.myservlet; 2 3import javax.servlet.ServletException; 4import javax.servlet.http.HttpServlet; 5import javax.servlet.http.HttpServletRequest; 6import javax.servlet.http.HttpServletResponse; 7import java.io.IOException; 8 9/**10 * 整合Servlet的第二种方式11 */12public class SecondServlet extends HttpServlet {1314 @Override15 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {16 System.out.println("MySecondServlet init..........");17 }18}
ServletApplication.java
1package com.example.servlet; 2 3import com.example.servlet.myservlet.SecondServlet; 4import org.springframework.boot.SpringApplication; 5import org.springframework.boot.autoconfigure.SpringBootApplication; 6import org.springframework.boot.web.servlet.ServletComponentScan; 7import org.springframework.boot.web.servlet.ServletRegistrationBean; 8import org.springframework.context.annotation.Bean; 910@SpringBootApplication11//@ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化12public class ServletApplication {1314 public static void main(String[] args) {15 SpringApplication.run(ServletApplication.class, args);16 }171819 /**20 * 整合Servlet的第二种方式,创建ServletRegistrationBean并添加路径21 * @return22 */23@Bean24public ServletRegistrationBean getServletRegistrationBean(){25 ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());26 bean.addUrlMappings("/mySecond");27 return bean;28}
然后启动项目,在浏览器中访问localhost:8080/mySecondServlet,页面也是空白,在控制台就会打印MySecondServlet init……….
在这里插入图片描述
项目,结构如图所示
在这里插入图片描述
结论:
上面的两种方式推荐使用第一种基于注解的整合
虽然现在几乎用不到servlet了,但是学习SpringBoot整合servlet有助于学习的深入了解,更好的理解框架
4.SpringBoot整合Filter
4.1.方式一
步骤:
创建一个MyFirstFilter类实现Filter接口,并在类上面标注@WebFilter
在@SpringBootApplication的主类上加上@ServletComponentScan注解
MyFirstFilter.java
1package com.example.servlet.myfilter; 2 3import javax.servlet.*; 4import javax.servlet.annotation.WebFilter; 5import java.io.IOException; 6 7/** 8 * 基于@WebFilter注解整合Filter方式一 9 */10@WebFilter(filterName = "MyFirstFilter",urlPatterns = "/myFirst")11public class MyFirstFilter implements Filter {12 @Override13 public void init(FilterConfig filterConfig) throws ServletException {1415 }1617 @Override18 public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {19 System.out.println("进入Filter中了.....");20 arg2.doFilter(arg0,arg1);21 System.out.println("离开Filter了.......");22 }2324 @Override25 public void destroy() {2627 }28}
ServletApplication.java
1package com.example.servlet; 2 3import com.example.servlet.myservlet.SecondServlet; 4import org.springframework.boot.SpringApplication; 5import org.springframework.boot.autoconfigure.SpringBootApplication; 6import org.springframework.boot.web.servlet.ServletComponentScan; 7import org.springframework.boot.web.servlet.ServletRegistrationBean; 8import org.springframework.context.annotation.Bean; 910@SpringBootApplication11@ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化12public class ServletApplication {1314 public static void main(String[] args) {15 SpringApplication.run(ServletApplication.class, args);16 }1718 /**19 * 整合Servlet的第二种方式,创建ServletRegistrationBean并添加路径20 * @return21 */22 @Bean23 public ServletRegistrationBean getServletRegistrationBean(){24 ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());25 bean.addUrlMappings("/mySecond");26 return bean;27 }28}
4.2.方式二
步骤:
创建一个类MySecondFilter实现Filter接口,重写方法。
在@SpringBootApplication标识的主类中加@Bean的一个方法,将MySecondFilter对象注入容器中。
MySecondFilter.java
1package com.example.servlet.myfilter; 2 3import javax.servlet.*; 4import java.io.IOException; 5 6/** 7 * 整合Filter的第二种方式 8 */ 9public class MySecondFilter implements Filter {10 @Override11 public void init(FilterConfig filterConfig) throws ServletException {1213 }1415 @Override16 public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {17 System.out.println("进入MySecondFilter了......");18 arg2.doFilter(arg0, arg1);19 System.out.println("离开MySecondFilter了......");20 }2122 @Override23 public void destroy() {2425 }26}
ServletApplication.java
1package com.example.servlet; 2 3import com.example.servlet.myfilter.MySecondFilter; 4import com.example.servlet.myservlet.SecondServlet; 5import org.springframework.boot.SpringApplication; 6import org.springframework.boot.autoconfigure.SpringBootApplication; 7import org.springframework.boot.web.servlet.FilterRegistrationBean; 8import org.springframework.boot.web.servlet.ServletComponentScan; 9import org.springframework.boot.web.servlet.ServletRegistrationBean;10import org.springframework.context.annotation.Bean;1112@SpringBootApplication13//@ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化14public class ServletApplication {1516 public static void main(String[] args) {17 SpringApplication.run(ServletApplication.class, args);18 }1920 /**21 * 整合Filter的第二种方式22 * 注册Filter23 */24 @Bean25 public FilterRegistrationBean getFilterRegistrationBean() {26 FilterRegistrationBean bean = new FilterRegistrationBean(new MySecondFilter());27 // bean.addUrlPatterns(new String[]{"*.do","*.jsp"});//拦截多个时28 bean.addUrlPatterns("/mySecond");29 return bean;30 }31}
然后在浏览器访问localhost:8080/mySecond,就可以看到控制台打印如下
在这里插入图片描述
5.SpringBoot整合Listener
5.1.方式一
步骤:
创建一个类MyFirstListener实现ServletContextListener接口,重写方法
在该类上加上@WebListener注解
1package com.example.servlet.mylistener; 2 3import javax.servlet.ServletContextEvent; 4import javax.servlet.ServletContextListener; 5import javax.servlet.annotation.WebListener; 6 7/** 8 * springBoot 整合Listener第一种方式 9 * 创建一个Servlet上下文的监听器10 * @WebListener 自动注册,相当于在web.xml中添加如下代码11 *12 *<listener>13 * <listener-class>ah.szxy.listener.FirstListener</listener-class>14 *</listener>15 */16@WebListener17public class MyFirstListener implements ServletContextListener {1819 @Override20 public void contextDestroyed(ServletContextEvent arg0) {21 // TODO Auto-generated method stub22 System.out.println("MyFirstListener执行销毁了。。。");23 }2425 @Override26 public void contextInitialized(ServletContextEvent arg0) {27 // TODO Auto-generated method stub28 System.out.println("MyFirstListener执行初始化了。。。");29 }30}
执行项目会打印如下,因为用了@ServletComponentScan注解,在项目启动的时候就会扫描包中是否含有servlet,若有就初始化。由于FirstServlet是基于注解初始化的,所以在项目启动的时候,就会执行初始化servlet,被Listener监听到
在这里插入图片描述
5.1.方式二
步骤:
创建一个类MySecondListener实现ServletContextListener接口,重写方法
在@SpringBootApplication标识的主类中加@Bean的一个方法,将MySecondListener对象注入容器中。
1package com.example.servlet.mylistener; 2 3import javax.servlet.ServletContextEvent; 4import javax.servlet.ServletContextListener; 5 6/** 7 * 整合Listener的第二种方式 8 */ 9public class MySecondListener implements ServletContextListener {1011 @Override12 public void contextDestroyed(ServletContextEvent arg0) {13 // TODO Auto-generated method stub14 System.out.println("MySecondListener执行销毁了。。。");15 }1617 @Override18 public void contextInitialized(ServletContextEvent arg0) {19 // TODO Auto-generated method stub20 System.out.println("MySecondListener执行初始化了。。。");21 }2223}
1package com.example.servlet; 2 3import com.example.servlet.myfilter.MySecondFilter; 4import com.example.servlet.mylistener.MySecondListener; 5import com.example.servlet.myservlet.SecondServlet; 6import org.springframework.boot.SpringApplication; 7import org.springframework.boot.autoconfigure.SpringBootApplication; 8import org.springframework.boot.web.servlet.FilterRegistrationBean; 9import org.springframework.boot.web.servlet.ServletComponentScan;10import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;11import org.springframework.boot.web.servlet.ServletRegistrationBean;12import org.springframework.context.annotation.Bean;1314@SpringBootApplication15@ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化1617public class ServletApplication {1819 public static void main(String[] args) {20 SpringApplication.run(ServletApplication.class, args);21 }2223 /**24 * 注册listener25 */26 @Bean27 public ServletListenerRegistrationBean<MySecondListener> getServletListenerRegistrationBean() {28 ServletListenerRegistrationBean<MySecondListener> bean = new ServletListenerRegistrationBean<MySecondListener>(29 new MySecondListener());30 return bean;31 }3233}
执行项目,在控制台可以看到输出如下,两个Servlet监听器都执行了
在这里插入图片描述
总的项目目录包结构如下:
在这里插入图片描述
6.SpringBoot整合静态资源
6.1.在resource/static路径下在这里插入图片描述
然后启动项目,在浏览器访问localhost:8080/images/1.jpg在这里插入图片描述
6.2.在webapp目录路径下
6.2.1.idea中为SpringBoot项目添加web
因为SpringBoot的初始化后是没有webapp目录的,需要在idea中手动加入,但不是直接创建,而是配置出来的,下面是SpringBoot项目配置webapp的教程
6.2.2.选中项目然后是ctrl+alt+shift+s,就会弹出如下页面
在这里插入图片描述
6.2.3.选中Modules,然后点击+号,如下
在这里插入图片描述
配置的目录的路径分别为:
E:\liduchang\servlet\src\main\webapp\WEB-INF\web.xml
E:\liduchang\servlet\src\main\webapp
6.2.4出现如下界面,点击铅笔进行编辑web.xml的路径,然后双击第二处同理编辑webapp的路径
在这里插入图片描述
6.2.5最后配置出来的目录结构,如下图所示在这里插入图片描述
6.2.6然后再webapp先新建一个images文件夹,复制一张图片到images文件夹下,名为2.jpg,并再webapp下新建一个index.html内容如下
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6</head> 7<body> 8<h1>静态资源访问方式一</h1><hr> 9<img alt="" src="data:images/2.jpg">10</body>11</html>
6.2.7启动项目,然后再浏览器访问localhost:8080,出现如图所示,配置成功
在这里插入图片描述
7.SpringBoot文件上传
7.1.文件上传
项目结构图
在这里插入图片描述
- 上传到本地磁盘,名字为原文件名
- 上传到本地磁盘,名字为随机名
- 上传到项目webapp文件夹下的images文件夹下
upload.html(文件上传主页)
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6</head> 7<body> 8<!-- 9 表单提交的方式为 : post10 enctype的值为 : multipart/form-data11 file类型的输入框的name属性要和 MultipartFile 的形参一样 ,这样才能进行文件的上传12-->13<h1>文件上传到本地e盘</h1><hr>14<form action="/uploadToPC" method="post" enctype="multipart/form-data">15 <input type="file" name="file" ><br>16 <input type="submit" value="点击上传">17</form>1819<h1>文件上传到e盘名字随机</h1><hr>20<form action="/fileUploadToPCWithNameRandom" method="post" enctype="multipart/form-data">21 <input type="file" name="file" ><br>22 <input type="submit" value="点击上传">23</form>2425<h1>文件上传到本项目</h1><hr>26<form action="/uploadToProject" method="post" enctype="multipart/form-data">27 <input type="file" name="file" ><br>28 <input type="submit" value="点击上传">29</form>3031</body>3233</html>
FileUploadController.java(文件上传Controller)
1package com.example.servlet.controller; 2 3import com.example.servlet.util.FileUtils; 4import org.springframework.web.bind.annotation.RequestMapping; 5import org.springframework.web.bind.annotation.RestController; 6import org.springframework.web.multipart.MultipartFile; 7 8import javax.servlet.http.HttpSession; 9import java.io.File;10import java.io.IOException;11import java.util.HashMap;12import java.util.Map;1314/**15 * 文件上传Controller16 */17@RestController18public class FileUploadController {1920 /**21 * 测试文件上传到本地e磁盘22 * @return23 */24 @RequestMapping("/uploadToPC")25 public Map<String,Object> fileUploadToPC(MultipartFile file) throws IOException {26 // 获取文件名 df8306e403c49fdf701230317dc99d9.jpg27 System.out.println(file.getOriginalFilename());28 // 将上传的文件放在e盘下29 file.transferTo(new File("e:/"+file.getOriginalFilename()));30 Map<String, Object> map= new HashMap<>();31 map.put("msg", "上传文件成功");32 return map;33 }3435 @RequestMapping("/fileUploadToPCWithNameRandom")36 public Map<String, Object> fileUploadToPCWithNameRandom(MultipartFile file) throws IOException {37 String name = file.getOriginalFilename();38 String prefix = FileUtils.getRandomName();39 String suffix = name.substring(name.lastIndexOf("."));40 name = prefix+suffix;41 file.transferTo(new File("e:/"+name));42 Map<String, Object> map = new HashMap<String, Object>();43 map.put("msg", "ok");44 return map;45 }4647 /**48 * 上传文件到项目的webapp下的images文件夹下49 * 不过一般文件不会上传到项目下,一般上传到本50 * 服务器的其它磁盘上,或者上传到专门的服务器51 * 上,所以这个方法只要了解就好52 * @param file53 * @return54 */55 @RequestMapping("/uploadToProject")56 public String uploadToProject(MultipartFile file, HttpSession session){57 // 通过session获取绝对路径,方法内部加上/WEB-INF/images,58 // 表示在项目的images目录下,需要创建该文件夹并进行静态资源放行59 String path= session.getServletContext().getRealPath("/images");60 System.err.println(path);61 String fileName= file.getOriginalFilename();62 File f= new File(path, fileName);63 try {64 file.transferTo(f);65 } catch (IOException e) {66 e.printStackTrace();67 }68 return "ok";69 }70}
FileUtils.java(文件随机命名工具类)
1package com.example.servlet.util; 2 3import java.util.Random; 4import java.util.UUID; 5 6/** 7 * 文件名随机生成工具类 8 * @version 1.0 9 */10public class FileUtils {1112 /**13 * 图片名生成14 */15 public static String getRandomName() {16 //取当前时间的长整形毫秒数17 long millis = System.currentTimeMillis();18 Random random = new Random();19 //获取0-1000不包含1000,的整形20 int end3 = random.nextInt(1000);21 //如果不足三位前面补022 String str = millis + String.format("%03d", end3);23 return str;24 }2526 /**27 * 商品id生成28 */29 public static long getRandomId() {30 //取当前时间的长整形值包含毫秒31 long millis = System.currentTimeMillis();32 Random random = new Random();33 //随机获取0-99不包含99,之间的整形34 int end2 = random.nextInt(99);35 //如果不足两位前面补036 String str = millis + String.format("%02d", end2);37 long id = new Long(str);38 return id;39 }4041}
在配置文件配置文件的上传的配置信息
1application.properties2#设置单个文件上传大小3spring.http.multipart.maxFileSize=200MB4#设置一次请求上传文件的总容量5spring.http.multipart.maxRequestSize=200MB
最后分享一波java的资源,资源包括java从入门到开发的全套视频,以及java的26个项目,资源比较大,大小大概是290g左右,链接容易失效,获取的方式是关注公众号:非科班的科班,让后回复:java项目即可获得,祝大家学习愉快
SpringBoot初级知识总结,太难了,未完待续.......的更多相关文章
- 初进MFC的世界,太奇妙。第六次作业----未完待续
又一次的迁徙.我希望能够早些抵达. 第六次作业-未完待续!图形界面,计算器文件 本次的作业是给自己的计算器加一个可视化的窗口,我开始也是很激动和憧憬的,看了很多的界面库,发现并没有想象的那么简单,因为 ...
- ASP.NET Core 2.2 基础知识(八) 主机 (未完待续)
主机负责应用程序启动和生存期管理.共有两个主机 API : 1.Web 主机 : 适用于托管 Web 应用,基于 IWebHostBuilder ; 2.通用主机 : 适用于托管非 Web 应用. 基 ...
- 省钱版----查找 IoT 设备TTL线序__未完待续
作者:仙果 原文来自:省钱版—-查找 IoT 设备TTL线序 省钱版----查找 IoT 设备TTL线序__未完待续 缘由 在IoT固件调试分析的过程中,建议首先在IoT设备的板子上焊接调试线,这是能 ...
- virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)
virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...
- 一篇文章让Oracle程序猿学会MySql【未完待续】
一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...
- [python]爬代理ip v2.0(未完待续)
爬代理ip 所有的代码都放到了我的github上面, HTTP代理常识 HTTP代理按匿名度可分为透明代理.匿名代理和高度匿名代理. 特别感谢:勤奋的小孩 在评论中指出我文章中的错误. REMOTE_ ...
- C++语言体系设计哲学的一些随想(未完待续)
对于静态类型语言,其本质目标在于恰当地操作数据,得到期望的值.具体而言,需要: (1)定义数据类型 你定义的数据是什么,是整形还是浮点还是字符.该类型的数据可以包含的值的范围是什么. (2)定义操作的 ...
- 2017-2-17,c#基础,输入输出,定义变量,变量赋值,int.Parse的基础理解,在本的初学者也能看懂(未完待续)
计算机是死板的固定的,人是活跃的开放的,初学c#第一天给我的感觉就是:用人活跃开放式的思维去与呆萌的计算机沟通,摸清脾气,有利于双方深入合作,这也是今晚的教训,细心,仔细,大胆 c#基础 1.Hell ...
- 布隆过滤器(Bloom Filter) 未完待续
布隆过滤器雏形 未完待续..... 计算错误率 现在有一个空额布隆过滤器, 过滤器里的bit array的大小是m. 咱来插入一个元素. 这次插入过程中的第一个hash函数会算出一个位置, 然后把这个 ...
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
随机推荐
- codeforces 540E 离散化技巧+线段树/树状数组求逆序对
传送门:https://codeforces.com/contest/540/problem/E 题意: 有一段无限长的序列,有n次交换,每次将u位置的元素和v位置的元素交换,问n次交换后这个序列的逆 ...
- 搭建个人/企业私有云盘-seafile
一.安装依赖组件 安装前的准备工作安装 Seafile 服务器之前,请确认已安装以下软件MariaDB 或者 MySQL 服务器 (MariaDB 是 MySQL 的分支),python 2.7 (从 ...
- 错误 1 未能找到类型或命名空间名称“”, 引入DLL文件出现提示文件不存在问题
在所有引入都正确的情况下,查看项目目标框架是否正确
- java xml的读取与写入(dom)
首先,先获取到文档对象 private static Document getDocument(String path) { //1.创建DocumentBuilderFactory对象 Docume ...
- ajax异步发送时遇到的问题
问题原因是:controller中方法名与url中的名字不一样造成的 解决办法:找到错误的方法名,将其与url中的方法名统一:
- HashMap、lru、散列表
HashMap HashMap的数据结构:HashMap实际上是一个数组和链表("链表散列")的数据结构.底层就是一个数组结构,数组中的每一项又是一个链表. hashCode是一个 ...
- mysql主从之binlog日志
mysql的binlog说明 主从复制依赖于二进制日志文件,简称为binlog binlog里面有存放了偏移信息 mysql主库binlog信息查看命令 [root@master ~]# mysql ...
- mysql 时间函数总结
1. 获取当前时间 select now(); // 2018-08-24 11:01:26 select unix_timestamp(); // 1535079695 总结:unix_ ...
- 洛谷$P2150\ [NOI2015]$寿司晚宴 $dp$
正解:$dp$ 解题报告: 传送门$QwQ$. 遇事不决写$dp$($bushi$.讲道理这题一看就感觉除了$dp$也没啥很好的算法能做了,于是考虑$dp$呗 先看部分分?$30pts$发现质因数个数 ...
- [gitHub实践] 实践记录
[gitHub实践] 实践记录 版权2019.4.19更新 Q1:本地仓库和远程仓库连接提示输入用户名密码 本地仓库和远程仓库连接有两种方式 本地初始化建立一个仓库,远程也建立了一个仓库 本地建立仓库 ...