JAVA后台常用方法_一蓑烟雨任平生

Python实现安居客新房数据抓取简易版 本文介绍使用Python爬取安居客新房楼盘数据的方法,重点针对三四线城市。通过分析移动端H5页面结构,采用滚动加载方式获取推荐楼盘列表(class="recomm-list"),从中提取楼盘ID并拼接详情页链接。代码展示了如何解析HTML标签获取楼盘名称、状态、价格、户型等基本信息,并处理图片URL。爬取过程涉及一个一级页面和两个二级页面,同时提到可能遇到的验证码问题将在后续处理。核心代码使用BeautifulSoup解析HTML,requests发送请求,并将数据存入MySQL数据库。 阅读详情

Springboot

获取某字段的总和

Double total = list.stream().collect(Collectors.summingDouble(AgriculturalCropYieldVO::getProportion));

时间转换类,越用越爽

package com.hnyfkj.productmarket.web.config;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

@Configuration
public class DateConfig {

	/**
	 * 默认日期时间格式
	 */
	public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
	/**
	 * 默认日期格式
	 */
	public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
	/**
	 * 默认时间格式
	 */
	public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

	/**
	 * LocalDate转换器,用于转换RequestParam和PathVariable参数
	 */
	@Bean
	public Converter<String, LocalDate> localDateConverter() {
		return new Converter<String, LocalDate>() {
			@Override
			public LocalDate convert(String source) {

				if (source.isEmpty()) {
					return null;
				}

				return LocalDate.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT));
			}
		};
	}

	/**
	 * LocalDateTime转换器,用于转换RequestParam和PathVariable参数
	 */
	@Bean
	public Converter<String, LocalDateTime> localDateTimeConverter() {
		return new Converter<String, LocalDateTime>() {
			@Override
			public LocalDateTime convert(String source) {
				if (source.isEmpty()) {
					return null;
				}
				return LocalDateTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT));
			}
		};
	}

	/**
	 * LocalTime转换器,用于转换RequestParam和PathVariable参数
	 */
	@Bean
	public Converter<String, LocalTime> localTimeConverter() {
		return new Converter<String, LocalTime>() {
			@Override
			public LocalTime convert(String source) {
				if (source.isEmpty()) {
					return null;
				}
				return LocalTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT));
			}
		};
	}

	/**
	 * Date转换器,用于转换RequestParam和PathVariable参数
	 */
	@Bean
	public Converter<String, Date> dateConverter() {
		return new Converter<String, Date>() {
			@Override
			public Date convert(String source) {
				if (source.isEmpty()) {
					return null;
				}
				SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
				try {
					return format.parse(source);
				} catch (ParseException e) {
					throw new RuntimeException(e);
				}
			}
		};
	}

	/**
	 * Json序列化和反序列化转换器,用于转换Post请求体中的json以及将我们的对象序列化为返回响应的json
	 */
	@Bean
	public ObjectMapper objectMapper() {
		ObjectMapper objectMapper = new ObjectMapper();
		objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
		objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
		// ObjectMapper忽略多余字段
		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
		// LocalDateTime系列序列化和反序列化模块,继承自jsr310,我们在这里修改了日期格式
		JavaTimeModule javaTimeModule = new JavaTimeModule();
		javaTimeModule.addSerializer(LocalDateTime.class,
				new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
		javaTimeModule.addSerializer(LocalDate.class,
				new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
		javaTimeModule.addSerializer(LocalTime.class,
				new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
		javaTimeModule.addDeserializer(LocalDateTime.class,
				new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
		javaTimeModule.addDeserializer(LocalDate.class,
				new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
		javaTimeModule.addDeserializer(LocalTime.class,
				new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

		// Date序列化和反序列化
		javaTimeModule.addSerializer(Date.class, new JsonSerializer<Date>() {
			@Override
			public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
					throws IOException {
				SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
				String formattedDate = formatter.format(date);
				jsonGenerator.writeString(formattedDate);
			}
		});
		javaTimeModule.addDeserializer(Date.class, new JsonDeserializer<Date>() {
			@Override
			public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
					throws IOException, JsonProcessingException {
				SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT);
				String date = jsonParser.getText();
				try {
					return format.parse(date);
				} catch (ParseException e) {
					throw new RuntimeException(e);
				}
			}
		});
		// 注册新的模块到objectMapper
		objectMapper.registerModule(javaTimeModule);
		return objectMapper;
	}
}

后台跨域配置

package com.hnyfkj.productmarket.web.config;

import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.CorsRegistry;

import com.google.common.net.HttpHeaders;

/**
 * 跨域配置
 */
//@Configuration
public class CorsConfig extends WebMvcConfigurer {

    @Bean
    public WebMvcConfigurer corsConfigurer()
    {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").
                        allowedOrigins("*"). //允许跨域的域名,可以用*表示允许任何域名使用
                        allowedMethods("*"). //允许任何方法(post、get等)
                        allowedHeaders("*"). //允许任何请求头
                        allowCredentials(true). //带上cookie信息
                        exposedHeaders(HttpHeaders.SET_COOKIE).maxAge(3600L); //maxAge(3600)表明在3600秒内,不需要再发送预检验请求,可以缓存该结果
            }
        };
    }
}

引入用过中心过滤器(单点登录必用)

package com.hnyfkj.productmarket.web.config;

import com.hnyfkj.garden.user.core.conf.Conf;
import com.hnyfkj.garden.user.core.filter.HnyfkjSsoTokenFilter;
import com.hnyfkj.garden.user.core.filter.HnyfkjSsoWebFilter;
import com.hnyfkj.garden.user.core.user.JedisUtil;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * sso 配置
 * @date 2020-02-20
 * @author zzw
 * @version v0.0.1
 */
@Configuration
public class HnyfkjSsoConfig implements DisposableBean {

    @Value("${hnyfkj.sso.server}")
    private String hnyfkjSsoServer;//http://127.0.0.1:8080/

    @Value("${hnyfkj.sso.logout.path}")
    private String hnyfkjSsoLogoutPath;///logout

    @Value("${hnyfkj.sso.excluded.paths}")
    private String hnyfkjSsoExcludedPaths;

    @Value("${hnyfkj.sso.redis.address}")
    private String hnyfkjSsoRedisAddress;//redis://127.0.0.1:6379

    @Bean
    public FilterRegistrationBean<HnyfkjSsoWebFilter> hnyfkjSsoFilterRegistration() {

        // hnyfkj-sso, redis init
        JedisUtil.init(hnyfkjSsoRedisAddress);

        // hnyfkj-sso, filter init
        FilterRegistrationBean<HnyfkjSsoWebFilter> registration = new FilterRegistrationBean<>();

        registration.setName("hnyfkjSsoWebFilter");
        registration.setOrder(1);
        registration.addUrlPatterns("/*");
        registration.setFilter(new HnyfkjSsoWebFilter());
        registration.addInitParameter(Conf.SSO_SERVER, hnyfkjSsoServer);
        registration.addInitParameter(Conf.SSO_LOGOUT_PATH, hnyfkjSsoLogoutPath);
        registration.addInitParameter(Conf.SSO_EXCLUDED_PATHS, hnyfkjSsoExcludedPaths);

        return registration;
    }

    @Bean
    public FilterRegistrationBean<HnyfkjSsoTokenFilter> hnyfkjSsoTokenFilterRegistration() {

        // hnyfkj-sso, redis init
        JedisUtil.init(hnyfkjSsoRedisAddress);

        // hnyfkj-sso, filter init
        FilterRegistrationBean<HnyfkjSsoTokenFilter> registration = new FilterRegistrationBean<>();

        registration.setName("HnyfkjSsoTokenFilter");
        registration.setOrder(1);

        registration.addUrlPatterns("/*");
        registration.setFilter(new HnyfkjSsoTokenFilter());
        registration.addInitParameter(Conf.SSO_SERVER, hnyfkjSsoServer);
        registration.addInitParameter(Conf.SSO_LOGOUT_PATH, hnyfkjSsoLogoutPath);
        registration.addInitParameter(Conf.SSO_EXCLUDED_PATHS, hnyfkjSsoExcludedPaths);
        return registration;
    }

    @Override
    public void destroy() throws Exception {

        // hnyfkj-sso, redis close
        JedisUtil.close();
    }
}

分页配置加扫描包,不用启动类配置scan了

二选一

package com.hnyfkj.productmarket.web.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * mybatis plus 配置
 * 
 * @author 2020-02-13 zhangzw
 * @version v0.0.1
 */
@Configuration
@MapperScan("com.hnyfkj.productmarket.web.mapper")
public class MybatisPlusConfig {
    /**
     * 配置分页拦截器
     * 
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        paginationInterceptor.setOverflow(true);
        paginationInterceptor.setLimit(500);
        return paginationInterceptor;
    }
}

@Configuration
public class MybatisPlusConfig {

	@Bean
	public MapperScannerConfigurer mapperScannerConfigurer() {
		final MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
		scannerConfigurer.setBasePackage("com.hnyfkj.**.dao");
		return scannerConfigurer;
	}

}

封装异常类捕获,哪里需要异常返回直接

throw new BusinessException (“提示信息”)就可以了

public class BusinessException extends RuntimeException {

	private static final long serialVersionUID = 1L;

	private String msg;
	private int code = 500;

	public BusinessException(final String msg) {
		super(msg);
		this.msg = msg;
	}

	public BusinessException(final String msg, final Throwable e) {
		super(msg, e);
		this.msg = msg;
	}

	public BusinessException(final String msg, final int code) {
		super(msg);
		this.msg = msg;
		this.code = code;
	}

	public BusinessException(final String msg, final int code, final Throwable e) {
		super(msg, e);
		this.msg = msg;
		this.code = code;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(final String msg) {
		this.msg = msg;
	}

	public int getCode() {
		return code;
	}

	public void setCode(final int code) {
		this.code = code;
	}

}

多少天以后的日期

 GetDay(day) {
        var time = new Date(this.Vatime);
        time.setDate(time.getDate() + day); //获取Day天后的日期
        var y = time.getFullYear();
        var m = time.getMonth() + 1; //获取当前月份的日期
        var d = time.getDate();
        return y + "-" + m + "-" + d
      }

生成0-9的随机数

Math.floor(Math.random()*10);

电话号码只显示前后

replaceAll("(\\d{4})\\d{10}(\\d{4})","$1****$2")

冒泡排序

for (int i = 0; i < sort.length - 1; i++) {
for (int j = 0; j < sort.length - i - 1; j++) {
if (sort[j] < sort[j + 1]) {
temp = sort[j];
sort[j] = sort[j + 1];
sort[j + 1] = temp;
}
}
}

启动关闭RabbitMQ

net stop RabbitMQ && net start RabbitMQ

查看进程,线程

netstat -a -n

Eclipse超好用的码云插件,一键拉取项目

http://kesin.oschina.io/update-site/4.5/
tiny4412用 usb 连接计算机显示sec s5pc210 test b/d 解决方法 当我用USB线连接tiny4412的microUSB端口的时候,出现了驱动没有正常安装,显示“sec s5pc210 test b/d” 出现这种问题的原因有: 1、没有安装到正确的USB驱动; 2、SD卡没有插好 我出现问题的原因属于第二种,插入SD卡后,上电后,LCD屏亮了,但没有任何显示   解决方法是:     更换一张SD卡,重新插入开发板卡槽,上电开 阅读详情

相关推荐

ICG cell如何通过Latch结构消除与门clock gating中的glitch?

本文深入解析了ICG Cell如何利用Latch结构解决传统与门时钟门控中的毛刺问题。通过将电平敏感锁存器与门控与门结合,ICG Cell将使能信号的变化严格限制在时钟低电平的安全窗口内采样和锁存,从而在时钟有效沿期间提供稳定的控制信号,从根本上消除了因信号延迟不同步而产生的glitch,确保了门控时钟的纯净与电路功能的可靠性。

weixin_29234423的博客 466

Spring中使用LocalDateTime、LocalDate等参数作为入参并且忽略多余字段

原文:https://blog.youkuaiyun.com/StruggleLT/article/details/82866327 1、ObjectMapper忽略多余字段 ObjectMapper objectMapper= new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPE...

fuck487的博客 7980

win11本地部署 DeepSeek-R1 大模型!免费开源,媲美OpenAI-o1能力,断网也能用

是否安装成功,然后直接运行部署deepseek-r1的命令。,出现下面界面即为安装成功。在cmd窗口中先输入。

记录学习编程的日常 2991

java后台开发入门(springboot快速入门)

带领大家借助当下比较流行的springboot框架快速开发属于自己的java后台。即便你是编程小白,没有任何编程基础也可以学习本课程。知识点1,Java2,springboot3,freemarker4,bootstrap4.35,Javaweb6,微信小程序同时会借助当下最热门的微信小程序来作为我们的前端展示。所以课程中也会教给大家一部分小程序开发的知识。大家只需要跟着老师一步步学习,我们既可以学习到java知识,也可以学习到小程序开发和web开发相关的知识。我们学习过程中会有老师在线实时解答,每节课都会有对应的源码和配套笔记给到大家。

RT-2(robotics-transformer2)论文--阅读笔记

谷歌RT-2机器人论文的阅读笔记。

weixin_61255639的博客 1824

OpenWrt路由开启DDNS+端口转发进行外网访问

OpenWrt路由开启DDNS+端口转发进行外网访问(LuCI界面实现)--开篇一、准备工作二、开机!三、连接--结尾 –开篇 本篇适用于一切装有OpenWrt系统的路由器/软路由,只要你保证有WAN接口和一个光猫,甚至你不需要有LAN接口(当然前提是你能连接路由器的WIFI进后台,不然你只能通过LAN进后台咯)。所有的配置过程都是基于LuCI界面来的,当然大神们一般都通过SSH登陆路由使用命令配置,但我也不会啊,只能给个有GUI界面的教程了。 一、准备工作 一个装有OpenWrt系统的路由器/软路由并

秋之颂的博客 9万+

Java校验手机号格式

package com.shucha.digitalportalbackstage.biz.utils; import org.springframework.stereotype.Component; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author tqf * @Description 手机号格式校验 * @Version 1.0 * @since 2022-03-15 15:28 .

tanqingfu1的博客 1965

海思方案定制hi3531dv200/SS528 DVR方案解析:从硬件选型到编解码实战应用

海思方案,Hi3518EV100,Hi3518CV100,Hi3515CV100,Hi3516CV100,Hi3516ECV100,Hi3516D,Hi3516A,Hi3519,Hi3520D,Hi3521A,Hi3535,Hi3531,Hi3536,Hi3536C,Hi3536D,Hi3518EV200,Hi3518EV201,Hi3520DV200,Hi3516CV200,Hi3516CV300,Hi3516AV200,Hi3520DV300,Hi3519V101,sd3403,hi3519av200

1584

【Java后台】从零开始的Java后台开发(一)

Java后台从零开始

It一zhai男 3052

企业数字化转型解决方案架构设计:一个五维全景视角

本文系统探讨了企业数字化转型的架构设计框架,提出五维协同模型:企业架构作为战略罗盘,业务架构聚焦价值创造,应用架构实现能力载体,数据架构提供智能燃料,技术架构奠定基础支撑。文章深入分析了各架构域的核心要素、设计原则及相互关系,并指出数字化转型需通过渐进路径,结合战略引领、技术赋能和组织变革,构建有机统一的架构体系。该框架为企业应对数字化复杂性提供了系统性方法论,强调从整体视角实现技术与业务的深度融合。

金牌架构师 1254

深度拆解 ‘High-Frequency Trading’ (HFT) 系统:解析如何在 100 纳秒内完成从网卡到 C++ 策略的响应

在100纳秒内完成从网卡到C++策略的响应,这是一项对技术栈每一个层面都进行极限优化的系统工程。它要求我们深入理解计算机体系结构、操作系统、网络协议和C++语言的底层机制。从物理距离的极致缩短,到高性能网卡和内核旁路技术,再到C++代码中每一个字节、每一个CPU周期的精打细算,HFT系统展现了人类对计算速度的永恒追求。这项技术不仅仅应用于金融交易,其背后的低延迟理念和实现方法,如DPDK、无锁编程、硬件加速等,正在逐渐渗透到其他对延迟敏感的领域,例如电信网络、边缘计算和工业自动化。

weixin_41455464的博客 1039

一步步学习java后台(一)(IDEA, Spring, Maven, MyBatis)

后台是网络开发的重中之重,复制逻辑与数据的开发。但是后台开发IDE有多个家族,框架多种多样;Spring系列虽然应用最为广泛,但是依赖多种配置,各种xml的配置项多如牛毛,而网上的教程,多数直接给出配置文件,让学习者直接复制。对纯新手而言,这样做非常容易出现无法解决的报错,导致非常难以入门。 我做这个系列,就是想作为一个纯后台新手,通过记录自己一步步搭建后台程序的过程,既让自己学会操作,也帮助大家在学习过程中少绕弯路。因为我也是一个纯新手,肯定会有各种错误,希望大家不吝指正,多谢大家!! 开发环境选择 操

javase1086的博客 1949

2024 年高教社杯全国大学生数学建模竞赛 E 题 交通流量管控 详细思路+matlab代码+python代码+论文范例

随着城市化进程的加快、机动车的快速普及,以及人们活动范围的不断扩大,城市道。景区周边道路上既有本地居民出行,也有过境车辆,化配置,在保证车辆通行的前提下,使得两条主路上的车流平均速度最大。对五一黄金周期间的数据进行分析,判定寻找停车位的巡游车辆,并估算假。相位通过的每辆车的信息,包括拍摄地点、行驶方向、拍摄时间和车牌号。济发展和百姓幸福感的一个“痛点”,是相关部门的棘手难题之一。纬中路交叉口,根据车流量的差异,可将一天分成若干个时段,估。是小镇中两条主路的情况:纬中路,从环西路到环东路,约。

YOLO 3310

一蓑烟雨任平生_年度总结

文章目录前言一、谈研发二、回顾20201.中牟项目的代码开发2.临邑项目的代码开发3.干休所的辅助工作4.爬虫数据的抓取5.Python方面的探索三、展望20211、将学习的 springsecurity整合到我们自己搭建的ssh框架,2、利用搭建的ssh框架,开发一套oa系统平台。3、做好xx、xκ家政网络服务中心的维护工作。4、希望公司能够大量拿下湖北省其他市的家政网络服务中心,继续开发和实施xx省其他市的家政网络服务中心。5、继续学习新技术,努力提高自己的个人能力。为以后能够更好,更顺利的工作奠定基础

Jaeger_Java的博客 1283

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

2021 谁怕?一蓑烟雨任平生

竹杖 芒鞋 轻胜马

黔家仔的博客 3799

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Python_玩转多线程_一蓑烟雨任平生

写的多线程的使用

Jaeger_Java的博客 927

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python各种镜像链接——一蓑烟雨任平生

Python解释器 selenium必备谷歌浏览器插件 pip国内镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 豆瓣http://pypi.douban.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/ 华中科技大学http://pypi.hustunique.com/ 代码: [global]

Jaeger_Java的博客 358

JAVA_KEYTOOL_生成秘钥_一蓑烟雨任平生

项目场景: 项目中需要秘钥加密,Java开发使用jdk生成最方便 问题描述 生成代码如下 在cmd中执行JDK中keytool的命令: # keytool -genkeypair -alias zhangzhang -validity 36500 -keyalg RSA -dname "CN=jwt,OU=jtw,O=jwt,L=zurich,S=zurich, C=CH" -keypass 123456 -keystore zhangzhang.jks -storepass 123456 -------

Jaeger_Java的博客 794

Java_23种设计模式之策略模式——一蓑烟雨任平生

文章目录前言一、什么是策略模式?策略模式结构图:什么情况下使用策略模式?策略模式的特点:工厂模式和策略模式的异同:相同点:不同点:场景模拟:不使用设计模式:使用工厂模式:策略模式:简单工厂+策略模式:总结 前言 这次我们来讲解一下策略模式,策略模式是我们日常开发天天都在用的“模式”,最简单if/else就是策略,而我们用不同的策略(分支)来实现结果的区分。所以策略模式是非常重要的模式,也是理解和应用最为简单的方式(大概)。 这里再次提醒:不要过分拘泥于设计模式的类和形式,只要记住一点:将变与不变抽离的过程

Jaeger_Java的博客 734

SpringBoot Cors跨域__一蓑烟雨任平生

package com.xczh.service.common.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCor

Jaeger_Java的博客 408

Java_搭建MQTT服务器_一蓑烟雨任平生

文章目录前言一、下载二、双击解压三、bin目录创建自己的服务运行后设置账号密码四、总结 前言 一、下载 MQTT官网 二、双击解压 获得解压文件 三、bin目录创建自己的服务 artemis create D:\xxx\xxxxx 运行后设置账号密码 四、 总结 提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。 ...

Jaeger_Java的博客 2337

Python_selenium_自动化_一蓑烟雨任平生

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、selenium是什么?二、使用步骤1.下载自动化谷歌浏览器2.使用selenium下载一张图片总结 前言 自动化爬虫,实现了机器帮人点开网页进行操作,可以解决99%的问题 一、selenium是什么? Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,S

Jaeger_Java的博客 486

Mybatis-Plus >>>QueryWrapper>>> 时间__一蓑烟雨任平生

用MP很久了,每次时间查询总想写SQL,记录一下wrapper使用时间查詢,以后找代码也方便 话不多说,万能Wrapper,上代码 QueryWrapper<DemandPlanHeader> wrapper = new QueryWrapper<>(); if (StringUtil.isNotBlank(demandPlanHeader.getDocNo())) { wrapper.like("DOC_NO", demandPlanHe.

Jaeger_Java的博客 1651

Java_Maven配置集成IDEA_一蓑烟雨任平生

、

Jaeger_Java的博客 302

用XPath一分钟上手爬虫,良心之作__一蓑烟雨任平生

XPath爬取网站信息 之前一直使用BeautifulSoup 爬取各种网站数据 下午研究了下XPath,只能说太牛B 会者不难,难者不会,你会爱上XPath 废话不多说,直接上源码 # encoding=utf-8 import requests from bs4 import BeautifulSoup # 用来解析网页 import uuid import pymysql import time # 导入时间隔 import datetime import threading from lxml

Jaeger_Java的博客 565

pip安装不是包名__一蓑烟雨任平生

cv2 pip install opencv-python

Jaeger_Java的博客 432
上一篇: VUE+Element常用小工具代码总结_南国
下一篇: Mysql&Oracle比较棒棒的一些常用sql_不断总结-ing_南国
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值