java+大数据实战 短链项目

springboot毕设项目家政服务管理平台m7qt4(java+VUE+Mybatis+Maven+Mysql) Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。Springboot + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。2. 前端:vue+css+javascript+jQuery+easyUI+highcharts。2. 使用IDEA/Eclipse/MyEclipse导入项目,修改配置,运行项目;... 阅读详情

一.前言

1.1课程大致包含技术

首先选这套课的目的是 包含了我所学的大部分技术

比如springboot ssm redis kafka flink clickhouse 等

1.2 外界客观原因

就业环境一般 目前来看暂时还没但是有后续潜在的毕业 或者 离职

1.3技术追求

个人的技术追求暂时是在技术总监 技术架构

1.4通用性

项目具备一定的通用性 中大厂基本用得到

二.项目简介 亮点与架构

2.1亮点

2.2技术栈

 2.3各微服务模块概览

2.4各模块对应关键解决方案

2.5流量包业务模型

 三.服务器搭架子

3.1.服务器

我这是天翼云买了三台服务器 四核八G 配置最少要两核8G 因为后续要运行的程序会比较多 比较吃内存 最好centos7.8 64位 以免不兼容

3.2docker环境搭建

运用以下命令搭建好docker环境

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum list docker-ce --showduplicates | sort -r

yum -y install docker-ce-20.10.10-3.el7

docker -v

systemctl start docker

systemctl status docker

docker info

启动使⽤Docker
systemctl start docker     #运⾏Docker守护进程
systemctl stop docker      #停⽌Docker守护进程
systemctl restart docker   #启Docker守护进程

设置开机自启动docker
systemctl enable docker

docker ps查看容器
docker stop 容器id

修改镜像仓库
vim /etc/docker/daemon.json
#改为下⾯内容,然后启docker
{
"debug":true,"experimental":true,
"registry-mirrors":
["https://pb5bklzr.mirror.aliyuncs.com","https://hub -
mirror.c.163.com","https://docker.mirrors.ustc.edu.c n"]
}

注意:不使⽤1.13.1版本,该版本在jenkins使⽤docker命令时会说找不到配置⽂件!

3.3安装mysql8

#⽹络安全组记得开放端⼝ 3306

3.3.1启动mysql容器

docker run \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=你自己的密码 \
    -v /home/data/mysql/data:/var/lib/mysql:rw \
    -v /etc/localtime:/etc/localtime:ro \
    --name xdclass_mysql \
    --restart=always \
    -d mysql:8.0

3.3.2客户端连接报错解决

踩坑:

这里使用客户端连接mysql报错了:caching_sha2_password can't be loaded

解决方式如下

docker exec -it docker容器id bash
mysql -hlocalhost -uroot -p892660rG -P3306
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '892660rG';
FLUSH PRIVILEGES;

3.3.3设置最大连接数

# 连接数配置
show variables like '%max_connections%';
set GLOBAL max_connections=5000;
set GLOBAL mysqlx_max_connections=5000;

3.4安装redis6

#⽹络安全组记得开放端⼝ 6379

docker run -itd --name xdclass-redis -p 6379:6379 -v /mydata/redis/data:/data redis:6.2.4 --requirepass 你的密码

没配置密码进控制台操作的时候会报错

执行auth 你的密码即可

3.5安装nacos2

3.5.1建表

需要把配置持久化 所以要先创建必须的表

创建nacos_config库

建表sql

3.5.2运行容器

记住要先创建上面的库表 不然启动报错

#⽹络安全组记得开放端⼝ 805

docker run -d \
-e NACOS_AUTH_ENABLE=true \
-e MODE=standalone \
-e JVM_XMS=128m \
-e JVM_XMX=512m \
-e JVM_XMN=512m \
-p 805:8848 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=156.224.26.212 \
-e MYSQL_SERVICE_PORT=800 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=892660rG \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&con nectTimeout=10000&socketTimeout=30000&autoReconnec t=true&useSSL=false' \
--restart=always \
--privileged=true \
-v /home/data/nacos/logs:/home/nacos/logs \
--name xdclass_nacos \
nacos/nacos-server:2.0.2

默认账号密码是 nacos nacos 

通过以下url访问nacos控制台首页

ip:805/nacos

3.6 安装RabbitMQ

docker run -d  --name xdclass_rabbit -e \
RABBITMQ_DEFAULT_USER=admin -e \
RABBITMQ_DEFAULT_PASS=你的密码 -p 807:15672 -p 808:5672 rabbitmq:3.8.15-management

访问首页 服务器ip:15672 可以看到 页面如下

​

# ⽹络安全组记得开放端⼝
4369 erlang 发现⼝
5672 client 端通信⼝
15672 管理界⾯ ui 端⼝
25672 server 间内部通信⼝

四.代码搭架子

4.1创建maven project

 name: dcloud-short-link

踩坑:

我使用的 idea2023版本 最开始通过下面Maven Archetype 来new project 不下载jar包,

还一直以为maven配置问题,后面换成New Project 就好了 

 4.2创建 maven module

然后在该maven project下创建以下需要的maven module

dcloud-account        clodud-app        dcloud-common
dcloud-data        dcloud-gateway        dcloud-link        dcloud-shop

4.3配置pom.xml

4.3.1父项目的pom.xml

内容如下链接

https://blog.youkuaiyun.com/JavaCoder_juejue/article/details/131757162

它要进行依赖管理,就是其它的子模块需要的一些依赖直接版本给他确定好

4.3.2 dcloud-common的pom.xml

内容如下链接

https://blog.youkuaiyun.com/JavaCoder_juejue/article/details/131757214

这个是一些通用的依赖

4.4 常用工具类

内容如下链接 

https://blog.youkuaiyun.com/JavaCoder_juejue/article/details/131757258

这个是一些常用的类 比如json 时间 处理 自定义异常捕获等工具类

4.5开发规范

POJO(Plain Ordinary Java Object): 在⼿册中, POJO 专指只
有 setter / getter / toString 的简单类,包括 DO/DTO/BO/VO
等 , 禁⽌命名成 xxxPOJO

 4.6接入短信服务

发送短信我们这里用的测试账号 免费五条 只能发送数字 有效期一个月

手机短信验证码【最新版】-云市场-阿里云

加好templateid与appcode 配置

实现代码

相关配置属性类

package net.xdclass.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@ConfigurationProperties(prefix = "sms")
@Configuration
@Data
public class SmsConfig {

private String templateId;

private String appCode;

}

封装一个发送http请求的bean

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory requestFactory){
        return new RestTemplate(requestFactory);
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory  = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(10000);
        factory.setConnectTimeout(10000);
        return factory;
    }
}

发送短信的主要bean

@Component
@Slf4j
public class SmsComponent {

    /**
     * 发送地址
     */
    private static final String URL_TEMPLATE = "https://jmsms.market.alicloudapi.com/sms/send?mobile=%s&templateId=%s&value=%s";

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private SmsConfig smsConfig;


    /**
     * 发送短信验证码
     * @param to
     * @param templateId
     * @param value
     */
    public void send(String to,String templateId,String value){

        String url = String.format(URL_TEMPLATE,to,templateId,value);
        HttpHeaders headers = new HttpHeaders();
        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
        headers.set("Authorization","APPCODE "+smsConfig.getAppCode());
        HttpEntity entity = new HttpEntity<>(headers);
        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
        log.info("url={},body={}",url,response.getBody());
        if(response.getStatusCode().is2xxSuccessful()){
            log.info("发送短信验证码成功");
        }else {
            log.error("发送短信验证码失败:{}",response.getBody());
        }
    }

}

测试发送短信

注入该对象 调用send方法即可

@SpringBootTest(classes = AccountApplication.class)
@RunWith(SpringRunner.class)
@Slf4j
public class SmsTest {

    @Autowired
    SmsComponent smsComponent;

    @Autowired
    SmsConfig smsConfig;

    @Test
    public void smsTest() {
        smsComponent.send("16621177280",smsConfig.getTemplateId(),"888888");
    }

}

4.7池化+异步 进行接口调优

4.7.1异化整合自定义线程池

首先 我们假设这个短信发送接口调用非常频繁 那么为了提升接口的相应速度

可以做异化 也就是加上 @Async注解 (需要在该类或者启动类上加上@EnableAsync才能生效)

该注解的原理是 动态代理整了一个线程池 线程池的 队列容量为默认的 太大 在极端情况下

流量暴涨或者别人恶意压测攻击时 会导致OOM

所以我们进行了自定义线程池,异化整合自定义线程池代码如下

这里主要的就是我们将队列的容量从原本默认的整形最大值改成了10000

@Configuration
public class ThreadPoolTaskConfig {
    @Bean("threadPoolTaskExecutor")
    public ThreadPoolTaskExecutor threadPoolTaskExecutor(){
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setCorePoolSize(8);
        threadPoolTaskExecutor.setMaxPoolSize(32);
        threadPoolTaskExecutor.setKeepAliveSeconds(30);
        threadPoolTaskExecutor.setQueueCapacity(10000);
        threadPoolTaskExecutor.setThreadNamePrefix("juege-thread-");
        threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
        threadPoolTaskExecutor.initialize();

        return threadPoolTaskExecutor;
    }
}

 4.7.2http连接池化

就是修改代码RestTemplateConfig类, 优化原理就是原本的http连接是通过SimpleClientHttpRequestFactory创建(已注释),每来一个请求就新创建一个,这里做到连接的复用 

http连接池化 相关代码

4.8整合redis

主要是初始化 redis相关配置 比如用户名密码 db啥的(默认是0库)

然后是序列化方式 一般key为StringRedisSerializer value为Jackson2JsonRedisSerializer

具体步骤如下

springboot整合redis

4.9图形验证码+使用redis保存

先引入依赖由于父项目pom上做了版本管理 具体可看 4.3.1 子模块只需要不带版本引入即可

<!--验证码kaptcha依赖包-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>kaptcha-spring-boot-starter</artifactId>
</dependency>

然后redis主要保存的是验证码文本,key的生成方式这里使用的

模块名信息:接口名信息:ip+useragent的MD5加密

@RestController
@RequestMapping("/api/v1/account/notify")
@Slf4j
public class NotifyController {


    @Autowired
    private Producer captchaProducer;


    @Autowired
    private NotifyService notifyService;

    @Autowired
    private RedisTemplate redisTemplate;

    private final long CAPTCHA_KEY_TIMEOUT = 1000*10*60;


    /**
     * 生成验证码
     * @param request
     * @param response
     */
    @GetMapping("captcha")
    public void getCaptcha(HttpServletRequest request, HttpServletResponse response){

        String captchaText = captchaProducer.createText();
        log.info("验证码内容:{}",captchaText);

        //存储redis,配置过期时间
        String captchaKey = getCaptchaKey(request);
        redisTemplate.opsForValue().set(captchaKey,captchaText,CAPTCHA_KEY_TIMEOUT,TimeUnit.MILLISECONDS);

        Object o = redisTemplate.opsForValue().get(captchaKey);


        BufferedImage bufferedImage = captchaProducer.createImage(captchaText);

        try {
            ServletOutputStream outputStream = response.getOutputStream();
            ImageIO.write(bufferedImage,"jpg",outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            log.error("获取流出错:{}",e.getMessage());
        }

    }

    private String getCaptchaKey(HttpServletRequest request) {

        String ip = CommonUtil.getIpAddr(request);
        String userAgent = request.getHeader("User-Agent");
        String captchaKey = "account-service:captcha:"+CommonUtil.MD5(ip+userAgent);

        return  captchaKey;
    }


}

4.10短信发送接口实现及防刷

代码如下:实现短信发送 然后防刷:一分钟内只能发一次短信 必须后台做 因为别人可能绕过前端

短信发送接口实现及防刷

4.11登录注册及拦截器相关

登录注册的逻辑这里就不多说了

JWT token相关类

package net.xdclass.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j;
import net.xdclass.model.LoginUser;

import java.util.Date;

/**
 * 小滴课堂,愿景:让技术不再难学
 *
 * @Description
 * @Author 二当家小D
 * @Remark 有问题直接联系我,源码-笔记-技术交流群
 * @Version 1.0
 **/
@Slf4j
public class JWTUtil {


    /**
     * 主题
     */
    private static final String SUBJECT = "xdclass";

    /**
     * 加密密钥
     */
    private static final String SECRET = "xdclass.net168";

    /**
     * 令牌前缀
     */
    private static final String TOKNE_PREFIX = "dcloud-link";


    /**
     * token过期时间,7天
     */
    private static final long EXPIRED = 1000 * 60 * 60 * 24 * 7;


    /**
     * 生成token
     *
     * @param loginUser
     * @return
     */
    public static String geneJsonWebTokne(LoginUser loginUser) {

        if (loginUser == null) {
            throw new NullPointerException("对象为空");
        }

        String token = Jwts.builder().setSubject(SUBJECT)
                //配置payload
                .claim("head_img", loginUser.getHeadImg())
                .claim("account_no", loginUser.getAccountNo())
                .claim("username", loginUser.getUsername())
                .claim("mail", loginUser.getMail())
                .claim("phone", loginUser.getPhone())
                .claim("auth", loginUser.getAuth())
                .setIssuedAt(new Date())
                .setExpiration(new Date(CommonUtil.getCurrentTimestamp() + EXPIRED))
                .signWith(SignatureAlgorithm.HS256, SECRET).compact();

        token = TOKNE_PREFIX + token;
        return token;
    }


    /**
     * 解密jwt
     * @param token
     * @return
     */
    public static Claims checkJWT(String token) {

        try {
            final Claims claims = Jwts.parser().setSigningKey(SECRET)
                    .parseClaimsJws(token.replace(TOKNE_PREFIX, "")).getBody();
            return claims;
        } catch (Exception e) {

            log.error("jwt 解密失败");
            return null;
        }

    }


}

登录拦截器相关类 包含把 从header或者param中的token中 解析出 用户信息然后放到  threadLocal 方便后续 这个线程中需要的获取

package net.xdclass.interceptor;

import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j;
import net.xdclass.enums.BizCodeEnum;
import net.xdclass.model.LoginUser;
import net.xdclass.util.CommonUtil;
import net.xdclass.util.JWTUtil;
import net.xdclass.util.JsonData;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 小滴课堂,愿景:让技术不再难学
 *
 * @Description
 * @Author 二当家小D
 * @Remark 有问题直接联系我,源码-笔记-技术交流群
 * @Version 1.0
 **/

@Slf4j
public class LoginInterceptor implements HandlerInterceptor {

    public static ThreadLocal<LoginUser> threadLocal = new ThreadLocal<>();


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (HttpMethod.OPTIONS.toString().equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpStatus.NO_CONTENT.value());
            return true;
        }

        String accessToken = request.getHeader("token");
        if (StringUtils.isBlank(accessToken)) {
            accessToken = request.getParameter("token");
        }

        if (StringUtils.isNotBlank(accessToken)) {
            Claims claims = JWTUtil.checkJWT(accessToken);
            if (claims == null) {
                //未登录
                CommonUtil.sendJsonMessage(response, JsonData.buildResult(BizCodeEnum.ACCOUNT_UNLOGIN));
                return false;
            }

            Long accountNo = Long.parseLong(claims.get("account_no").toString());
            String headImg = (String) claims.get("head_img");
            String username = (String) claims.get("username");
            String mail = (String) claims.get("mail");
            String phone = (String) claims.get("phone");
            String auth = (String) claims.get("auth");

            LoginUser loginUser = LoginUser.builder()
                    .accountNo(accountNo)
                    .auth(auth)
                    .phone(phone)
                    .headImg(headImg)
                    .mail(mail)
                    .username(username)
                    .build();

            //request.setAttribute("loginUser",loginUser);/
            //通过threadlocal
            threadLocal.set(loginUser);
            return true;
        }

        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

        threadLocal.remove();
    }
}

以及对某些请求路径的放行 或禁止访问

package net.xdclass.config;

import net.xdclass.interceptor.LoginInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/api/account/*/**", "/api/traffic/*/**")
                .excludePathPatterns("/api/account/*/register","/api/account/*/upload","/api/account/*/login",
                        "/api/notify/v1/captcha","/api/notify/*/send_code");

        WebMvcConfigurer.super.addInterceptors(registry);
    }
}

4.12整合shardingJDBC实现分表

短链平台当流量大了之后数据也多了 需要做分表

shardingJDBC分表 速通

基于Spark的电商推荐系统 ECommerceRecommendSystem 基于spark的商品推荐系统 项目体系架构设计 1.1 项目系统架构 项目以推荐系统建设领域知名的经过修改过的中文亚马逊电商数据集作为依托,以某电商网站真实业务数据架构为基础,构建了符合教学体系的一体化的电商推荐系统,包含了离线推荐与实时推荐体系,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐。提供了从前端应用、后台服务、算法设计实现、... 阅读详情

相关推荐

大数据日志分析Hadoop项目实战

教程目录0x00 教程内容0x01 大数据日志分析系统简介1. 需求2. 背景及架构0x02 UserAgentParser1. UserAgentParser的介绍2. user-agent信息0x03 实战准备1. 下载UserAgentParser小工具2. 安装对应的jar包到本地Maven仓库0x03 项目实战1. 构建项目2. 引入依赖3. 编写测试代码4. 编写实战代码0x03 ...

邵奈一的博客 7738

【大数据】9大实战项目解决你所有烦恼(写论文、找工作)

大数据9大实战项目,解决你写论文、找工作的难题。项目资料包:项目工具、安装包、配置文件、工程源码、数据集、PPT、操作文档。

大数据研习社 1万+

大数据电商项目实战

#多易大数据电商项目实战 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式

wangyafei666的博客 2971

大数据学习必备 | 推荐几个牛X 的 github 项目,助你事半功倍

花了5个小时,为你整理出了这几个牛X 的 github大数据项目

大数据梦想家 1万+

创建一个Maven的Java项目:大数据实战

通过使用Maven创建Java项目,并结合大数据处理工具和框架,我们可以构建可靠高效的大数据处理系统,为企业决策和业务运营提供有力支持。为了应对庞大的数据量和复杂的数据处理需求,我们需要构建可靠高效的大数据处理系统。它使用Hadoop提供的MapReduce框架,将输入的文本文件中的每个单词进行计数,并输出每个单词出现的次数。通过以上步骤,我们成功创建了一个Maven的Java项目,并编写了简单的大数据处理代码。pom.xml是Maven项目的核心配置文件,我们可以在其中定义项目的依赖和构建配置。

PixelInk的博客 270

Java大数据处理项目实战:代码与文档解析

本文还有配套的精品资源,点击获取 简介:本项目“java代码-大数据1班47吴依琦”旨在为学习大数据处理的Java编程者提供代码示例和文档指导。项目包括 main.java 源代码文件和 README.txt 说明文档,涉及Java在大数据处理中的应用,如并发容器使用、I/O流操作、分布式计算框架Hadoop与Spark的应用,以及数据序列化、Y...

weixin_42356162的博客 2124

Java中的长链和短链技术详解

Java中的长连接和短连接技术详解。一文搞懂长短连接!

CodeSuc 的技术博客 1799

Java电商大数据项目-推荐系统(java和scala语言)

Java电商大数据项目-推荐系统(java和scala语言) Bump spark.version from 2.1.0 to 2.4.7 in /MySparkProject dependencies #6 by dependabot bot was merged 4 minutes ago Bump junit from 3.8.1 to 4.13.1 in /MyStormProject dependencies #5 by dependabot bot was merged 4 minutes ago Bump junit from 3.8.1 to 4.13.1 in /MyMapReduceProject dependencies #4 by dependabot bot was merged 3 minutes ago Bump storm-kafka from 1.1.0 to 1.2.3 in /MyStormProject dependencies #3 by dependabot bot was merged 3 minutes ago Bump mys

大数据GitHub项目-学习必备

大数据GitHub项目-学习必备

ytp552200ytp的博客 2421

光流法实战:如何用OpenCV的Farneback算法实现图像对齐(附调参技巧)

本文详细介绍了如何使用OpenCV的Farneback稠密光流算法实现图像对齐,包括核心原理、参数调优和工程实现。通过实战代码和参数优化策略,帮助开发者解决动态场景中的图像对齐问题,提升多帧融合和视频处理的效果。

weixin_29266007的博客 290

django drf 框架知识点(一)——serializer序列化器_用法全解

【django drf】序列化器:别名设置,全部参数序列化,自定义字段,只读只写,部分更新

qq_59344127的博客 1338

大数据项目实战

带大家走一下大数据项目的整个实战流程,让读者了解大数据项目是如何运行的。对大数据有一个总体的概念。 一、搭建大数据集群环境 1.搭建大数据实验环境 (1)Linux系统虚拟机的安装与克隆 (2)配置虚拟机网络与SSH服务 (3)搭建Hadoop集群 (4)安装MySql数据库 (5)安装 Hive (6) 安装 Sqoop (7) 其他组件的安装 以上内容不再详细讲解,参考相关内容。 二、数据爬取 1.数据爬取技术 数据爬取可以采用Java爬取,也可以采用python进行爬取。python在数据爬取方面代码

一介书生 7197

python基于语音识别的智能垃圾分类系统

大家好我是蓝天,混迹在java圈的辛苦码农。今天要和大家聊的是一款《python基于语音识别的智能垃圾分类系统》毕业设计项目。项目源码以及部署相关请联系蓝天,文末附上联系信息。🎈作者:蓝天🎈🎈个人简介:精通 Java、Python、C#、C、C++ 等编程语言,同时对微信小程序、Php 和 Android 等技术也能熟练掌握,可为大家提供全面的技术支持与交流。我拥有丰富的成品 Java、Python、C# 毕业设计项目经验,能够为学生提供各类个性化的开题框架及实际运作方案。🎈。

Chujun123528的博客 660

SZT-bigdata完整部署教程:从零搭建大数据集群

SZT-bigdata是深圳地铁大数据客流分析系统,本文将为您提供从零开始搭建SZT-bigdata大数据集群的完整部署教程,帮助您快速掌握部署要点和关键步骤。 ## 一、环境准备与集群规划 在开始部署SZT-bigdata大数据集群之前,需要做好环境准备和集群规划工作。确保服务器满足硬件和软件要求,合理规划集群节点数量和角色分配。 ### 1.1 硬件与软件要求 硬件方面,建议每台服务器

gitblog_00229的博客 1225

Python+AI能源管理实战:从电力负荷预测到智能调度的全流程开发

本系统展示了Python在能源管理领域的强大能力,通过AI技术实现了从预测到优化的智能决策闭环。随着碳中和目标的推进,智能能源系统将成为新型电力系统的核心大脑。📌 专业建议:系统部署需考虑网络安全防护,关键控制指令应设置多重验证机制!关注我的优快云账号获取能源系统安全最佳实践~下期预告:我们将探索Python在智慧医疗中的应用,开发基于多模态数据的智能诊断辅助系统。想提前获取代码?评论区留言"智慧医疗"获取GitHub源码链接!

资深全栈架构师,乐于在 优快云 分享技术见解,与大家携手共进,共攀技术巅峰! 623

联想X3650M5服务器双模式切换实战:UEFI与Legacy BIOS如何选择?

本文深入探讨了联想X3650 M5服务器在UEFI与Legacy BIOS启动模式间的选择策略。文章从技术原理、决策矩阵、实战切换步骤及后期验证等方面,为企业IT管理员提供了基于操作系统兼容性、存储架构、安全合规与运维习惯的完整决策框架,帮助其在数据中心硬件生命周期管理中做出明智选择。

weixin_29207533的博客 281

BigData 开源项目教程

BigData 开源项目教程 1. 项目介绍 BigData 是一个开源项目,旨在提供一个高效的数据处理和分析框架。该项目由 Haifeng Liu 开发,主要用于处理大规模数据集,支持多种数据处理任务,包括数据清洗、数据转换、数据分析和数据可视化。BigData 项目的目标是简化大数据处理流程,提高数据处理效率,并为开发者提供一个易于使用的工具。 2. 项目快速启动 环境准备 在开始之前,请确保...

gitblog_00380的博客 1133

[Windows] 发票识别工具。支持xml、pdf、ofd文件。

发票识别是财务自动化中的关键环节,支持多种格式(XML、PDF、OFD)的识别工具能显著提升工作效率。以下介绍基于Windows平台开发此类工具的技术方案。发票识别是财务自动化中的关键环节,支持多种格式(XML、PDF、OFD)的识别工具能显著提升工作效率。以下介绍基于Windows平台开发此类工具的技术方案。

pZC_dqux的博客 666

BigData-Notes:全面解析大数据技术栈入门指南

BigData-Notes:全面解析大数据技术栈入门指南 本文全面解析了大数据技术生态体系,涵盖了从数据采集、存储、处理到应用的全生命周期技术栈。详细介绍了Hadoop生态系统三大核心组件(HDFS、MapReduce、YARN)的架构原理和协同工作机制,深入对比分析了主流流处理框架(Flink、Spark Streaming、Storm)与批处理框架的技术特性、性能差异和适用场景。最后提供了系统...

gitblog_00043的博客 1010

EMC测试案例分析——晶振对辐射发射的影响

本文分析了某产品350MHz辐射发射超标问题,发现源头是50MHz晶振的7次谐波通过连接器泄漏。主要原因是:1)防水非导电垫圈形成屏蔽缝隙;2)晶振下方地平面不完整且信号线穿过;3)晶振离接口过近。改进措施包括:完善晶振下方地平面、增大晶振与接口距离、使用导电密封圈等。最终辐射降低10dB以上达标。文章总结了晶振EMC设计要点:保持地平面完整、远离接口、外壳接地、合理布局滤波电路等,并强调防水与屏蔽的协调统一。

u012526819的博客 668

详细介绍用MATLAB实现基于A*算法的路径规划(附完整的代码,代码逐行进行解释)(一)--------A*算法简介和环境的创建

   本系列文章主要介绍基于A*算法的路径规划的实现,并使用MATLAB进行仿真演示。    一、 A*算法简介       A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。      公式表示为: f(n)=g(n)+h(n),其中, f(n) 是从初始状态经由状态n到目标状态的代价估计,g(n) 是在状态空间中从初始状态到状态n的实际代价,h(n) 是从状态n到目标状态的最佳路径的估计代价。

慕羽★的博客 7万+

2020年Github上最牛的Java进阶教程及Java实战项目都在这里了!

写在前面 大家都知道 Github 是一个程序员福地,这里有各种厉害的开源框架、软件或者教程。这些东西对于我们学习和进步有着莫大的进步,所以我有了这个将 Github 上非常棒的 Java 开源项目整理下来的想法。觉得不错的话,欢迎小伙伴们去star一波。 很多小伙伴都不知道学习什么开源项目,这篇文章定能为你解决疑惑。 不论你想要看 Java 教程方向的开源项目、Java实战项目、SpringBoot教程还是说想要看微服务、分布式相关的开源项目,你都可以在上面找到需要的资源! 项目的整个目录如下,可

JavaBUGa的博客 5213

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

问我大数据怎么入门,我总结了亲身体验的学习路线推荐给她【推荐收藏】

前两天有学妹私信我说,她已经上完大一,大数据专业的,只学过大数据导论,问我大数据该如何入门?我不禁感慨普通高校擅长培养算法人才,但在工程人才的培养上存在很多的问题。

Maynor的博客 5681

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

探秘GitCode上的《BigData》项目:一站式大数据解决方案

探秘GitCode上的《BigData》项目:一站式大数据解决方案 去发现同类优质开源项目:https://gitcode.com/ 在当今数据驱动的时代,大数据处理与分析已经成为企业决策和创新的关键。而上的开源项目提供了一套全面的大数据处理工具集,旨在简化大数据工作流,让开发者更高效地挖掘数据价值。 项目简介 \nnhy/BigData是一个由Java编写的、基于Hadoop和Spark的集成框...

gitblog_00058的博客 474

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

构建智能地铁大脑:深圳SZT-bigdata大数据实战全解析

🚇 在智慧城市建设浪潮中,深圳地铁大数据客流分析系统SZT-bigdata作为城市交通智能化的典范项目,为地铁运营提供了全方位的数据支撑。这个开源大数据项目通过实时客流分析、智能调度优化和可视化决策支持,为城市轨道交通管理带来了革命性变革。 ## 🔍 项目核心价值与功能特色 **深圳地铁大数据系统**致力于解决城市轨道交通运营中的关键问题:如何精准掌握客流规律、优化运力配置、提升乘客体验。

gitblog_00194的博客 1302
上一篇: nacos服务所需的表
下一篇: 短链父工程 pom.xml 内容
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我才是真的封不觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值