尚硅谷-尚医通实战经验总结

2023-05-16

整个系统采用b2c的管理模式,分为管理员系统和用户系统(直接商对客)

1 后端整合Swagger进行技术测试

2 后端框架使用ssmp框架

3 logback和 log4j 作为日志实现框架

4 idea开发后端

5 vscode开发前端

6 vue做前端框架

7 ES6标准的JS语言写前端

8 element-ui进行前端组件开发

9 axios数据交互(Ajax)

10 node.js部署前端的后端服务器(内置V8引擎),即前端人员不需要tomcat那一套了

利用node.js就可以部署项目了(javascripti运行环境、模拟服务端效果)

11 使用NPM包管理前端工具,相当于前端的maven

注意:这时的程序无法运行的,因为ES6的模块化无法在Node.js中执行,需要用Babel编辑成ES5后再执行。

12 babel转码器(把es6转成es5)

13 Webpack 是一个前端资源加载/打包工具(Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求,加快页面加载速度 )

 14 vueAdmin-template作为前端管理员系统模板(不是框架)进行二次开发

15 前端开发流程

 

16 使用nginx作为反向代理服务器,提供统一的api接口

后续我们将了Spring Cloud Gateway网关,将替代nginx网关

运行输入cmd命令,打开命令行
切换到nginx.exe所在的目录,命令:cd /d D:\nginx-1.15.8,注意要加 /d
nginx 启动:start nginx
nginx 停止:nginx -s stop
彻底杀死多个线程:taskkill /f /t /im nginx.exe
nginx 退出:nginx -s quit
 

17 设计数据字典

利用EasyExcel实现Excel与数据库的读写操作

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

18 数据缓存(redisson分布式锁)

Spring Cache(spring自带) + Redis 数据库(在linux centos系统下后台运行)缓存数据

19 nginx 控制端口跳转(nginx作为反向代理服务器)

20 docker容器镜像文件(一次镜像,处处运行,相当于一个打包技术   .iso文件)

 借助了阿里云个人版容器镜像服务

21 应用了mongdb数据库存储大量后台数据

22 Nacos(注册中心与服务调用) 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台 实现不同模块间的远程调用,

注册不同模块的ip和端口号(类似的还有Eureka 、zookeeper、Consul)

23 Spring Cloud Gateway  

通过网关限定哪些url需要用户登录,哪些不需要用户登录

API网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:

(1)客户端会多次请求不同的微服务,增加了客户端的复杂性。

(2)存在跨域请求,在一定场景下处理相对复杂。

(3)认证复杂,每个服务都需要独立认证。

(4)难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施。

(5)某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难。

以上这些问题可以借助 API 网关解决。API 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过API 网关这一层。也就是说,API 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由 API 网关来做,这样既提高业务灵活性又不缺安全性

Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filer链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等

24 nuxt做前端用户系统开发(服务端渲染技术NUXT),更好地SEO

服务端渲染技术(SSR),让页面渲染在服务端进行 而不是在客户端进行,从而更快的展示页面

Nuxt.js 是一个基于 Vue.js 的轻量级应用框架,可用来创建服务端渲染 (SSR) 应用,也可充当静态站点引擎生成静态站点应用,具有优雅的代码结构分层和热加载等特性。

25 使用JWT 生成 token

26  OAuth2针对一些特定问题解决方案

1)开放系统间的授权问题

你平常登录网页时,有微信,支付宝授权登录 就是这玩意~

方式一:用户密码复制

方式二:通用的开发者key

方式三:颁发令牌,设置令牌(字符串)有效时间,随时解除令牌-OAuth2方式(JWT也属于一种)

2)单点登录问题

商易通项目设置了医院、用户、数据字典等多个模块,通过OAuth2方式,你只需要在其他某个模块登录,剩余模块直接访问

百度登陆以后。百度网盘,百度文库等都不需要再登录了

 27 微信登录二维码文档

准备工作 | 微信开放文档

28 阿里云OSS云文件存储系统,存储图片文件

29 使用RabbitMQ 极大提高系统的并发性

消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回。消息中间件负责处理网络通信,如果网络连接不可用,消息被暂存于队列当中,当网络畅通的时候在将消息转发给相应的应用程序或者服务,当然前提是这些服务订阅了该队列。如果在商品服务和订单服务之间使用消息中间件,既可以提高并发量,又降低服务之间的耦合度。

RabbitMQ就是这样一款消息队列。RabbitMQ是一个开源的消息代理的队列服务器,用来通过普通协议在完全不同的应用之间共享数据。

异步处理。把消息放入消息中间件中,等到需要的时候再去处理。

流量削峰。例如秒杀活动,在短时间内访问量急剧增加,使用消息队列,当消息队列满了就拒绝响应,跳转到错误页面,这样就可以使得系统不会因为超负载而崩溃。

30 使用

@EnableScheduling //开启定时任务操作,在线生成Cron表达式

在线Cron表达式生成器

31  缺少高并发,分布式事务,注意系统安全和线程并发

分布式事务

分布式系统(用户吗、医院等有自己的微服务且查询不同的数据库)

会出现机器宕机,网络异常,消息丢失,消息乱序,数据错误,不可靠的TCP,存储数据丢失等异常

1、CAP定理
CAP原则又称CAP定理,指的是在一个分布式系统中
一致性(Consistency).:
在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访
问同一份最新的数据副本)
可用性(Availability)
在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据
更新具备高可用性)
分区容错性(Partition tolerance)
大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition).
分区容错的意思是,区间通信可能失败。比如,一台服务器放在中国,另一台服务
器放在美国,这就是两个区,它们之间可能无法通信。
CAP原则指的是,这三个要素最多只能同时实现两点,不可能三者兼项。

分区容错性一定要有,一致性和可用性二选一

在分布式系统中实现一致性的 raft算法和paxos算法

raft算法(领导与随从:)类似redis哨兵算法(主从复制)-一个客户一个产品经理+n个打工仔

看谁的超时时间更短 election timeout

 但实际中,大型互联网集群应该保证P和A舍弃C,只需要实现(弱一致)最终一致性即可

实际中遵循BASE原则

BASE是指
1 基本可用(Basically Available)
基本可用是指分布式系统在出现故障的时候,允许损失部分可用性(例如响应时间、功能上的可用性),允许损失部分可用性。需要注意的是,基本可用绝不等价于系统不可用。
    响应时间上的损失:正常情况下搜索引擎需要在0.5秒之内返回给用户相应的查询结果,但由于出现故障(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了12秒。
    功能上的损失:购物网站在购物高峰(如双十一)时,为了保护系统的稳定性,部分消费者可能会被引导到一个降级页面。
2 软状态(Soft State)
软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据会有多个副本,允许不同副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。
3 最终一致性(Eventual Consistency)
最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

分布式事务常见解决方案

1 2PC模式 又叫XA Transactions,二阶提交方案

阿里巴巴提供了Seata分布式事务解决方案,加注解即可

2 TCC事务补偿性方案(阿里在用) 

 3 最大努力通知型方案

按规律进行通知
不保证数据一定能通知成功,但会提供可查询操作接口进行核对。这种方案主要用在于第三方系统通讯时,比如:调用微信或支付宝支付后的支付结果通知。这种方案也是结合MQ让行实现,例如:通过MQ发送http请求,设置最大通知次数。达到通知次数后即不再通知。

高并发方法论(考虑限流,熔断,降级)

SpringCloud Alibaba-Sentinel

什么是熔断
    A服务调用B服务的某个功能,由于网铬不稳定问题,或者B服务卡机,导致功能时间超长。如果这样子的次数太多。我们就可以直接将B断路了(A不再请求B接口),凡是调用B的直接返回降级数据,不必等待B的超长执行。这样B的故障问题,就不会级联影响到A.
什么是降级
    整个网站处于流量高峰期,服务器压力剧增,根据当前业务情况及流量,对一些服务和页面进行有策略的降级[停止服务,所有的调用直接返回降级数据]。以此缓解服务器资源的的压力,以保证核心业务的正常运行,同时也保持了客户和大部分客户的得到正确的相应。

什么是限流
    对打入服务的请求流量进行控制,使服务能够承担不超过自己能力的流量压

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,
从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

32 feign调用服务注册中心的服务

Feign
Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端

Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。

Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务

Feign支持的注解和用法请参考官方文档:https://github.com/OpenFeign/feign

Feign本身不支持Spring MVC的注解,它有一套自己的注解

OpenFeign
OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。
OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,
并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

33 压力测试 jmeter

压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。
使用压力测试,我们有希望找到很多种用他测试方法更难发现的错误。有两种错误类型是:内存泄漏,并发与同步。

内存泄漏:系统内存不足导致对象创建以后,无法正常释放

并发与同步:系统单线程没问题,并发量一上来,出现线程不安全等诸多问题
有效的压力测试系统将应用以下这些关键条件:重复,并发,量级,随机变化。

性能指标

响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。
HPS(Hits Per Second):每秒点击次数,单位是次/秒。
TPs(Transaction per Second):系统每秒处理交易数,单位是笔/秒。
QPS(Query per Second):系统每秒处理查询次数,单位是次秒。
对于互联网业务中,如果某些业务有且仅有一个请求连接,那么TPS=QPS=HPS,一般情况下用TPS来衡量整个业务流程,用QPs来衡量接口查询次数,用HPs来表示对服务器单击请求。
无论TPS、QPS、HPS,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经验,一般情况下:
金融行业:1000TPS~50000TPS,不包括互联网化的活动
保险行业:100TPs~100000TPS,不包括互联网化的活动
制造行业:10TPS~5000TPS
互联网电子商务:10000TPS~1000000TPS
互联网中型网站:1000TPS~50000TPS
互联网小型网站:500TPS~10000TPS


最大响应时间(Max Response Time)指用户发出请求或者指令到系统做出反应(响应)的最大时间。
最少响应时间(Mininum ResponseTime)指用户发出请求或者指令到系统做出反应(响应)的最少时间。
90%响应时间(90%Response Time)是指所有用户的响应时间进行排序,第90%的响应时间。
从外部看,性能测试主要关注如下三个指标
    吞吐量:每秒钟系统能够处理的请求数、任务数。
    响应时间:服务处理一个请求或一个任务的耗时。
    错误率:一批请求中结果出错的请求所占比例。

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

微服务

微服务是分布式架构的一种,把服务做拆分,拆分时会产生各种问题

根据业务功能模块拆分,每个模块完成一部分业务功能

所以需要注册中心,记录各个模块的ip,方便模块间的调用(nacos:)

nacos负载均衡,设置集群,模块间调用时设置优先调用本地的模块服务,实现负载均衡

还需要配置中心,去管理各个模块的配置(SpringCloudConfig)

还需要服务网关组件 去调度用户要去访问哪一个模块(springcloudgateway)(请求路由,负载均衡)

在网关中可以配置过滤器

服务远程调用 Feign协议 (声明式http客户端)
GitHub - OpenFeign/feign: Feign makes writing java http clients easier

分布式缓存数据库 做数据缓存 解决系统的高并发问题(redis集群)

分布式搜索 做数据的快速检索

异步通信消息队列组件 微服务分布,导致每个请求的链路很长,性能下降,采用消息队列缩短链路,解决系统的高并发问题(rabbitmq 流量削峰

分布式日志服务 做日志记录

系统监控链路追踪和保护(sentinel)

持续集成 最后还需要做自动化部署,Jenkins对微服务进行自动化编译,然后就可以docker打包镜像,再基于kubernetes或者rancher技术进行自动化部署。

 

 

 

安全框架 Shiro

访问权限
一般表示你能做什么样的操作,或者能够访问那些资源。例如:给张三赋予“店铺主管"角色,“店铺主管”具有“查询员工”、“添加员工”、“修改员工”和“删除员工"权限。此时张三能够进入系统,则可可以进行这些操作
数据权限
一般表示某些数据你是否属于你,或者属于你可以操作范围。例如:张三是"店铺主管"角色,他可可以看他手下客服人员所有的服务的买家订单信息,他的手下只能看自己负责的订单信息

什么是认证
身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核效对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。例如:密码登录,手机短信验证、三方授权等

什么是授权
授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后,系统会为其分配对应的权限,当访问资源时,会校验其是否有访问此资源的权限。
这里首先理解4个对象。
用户对象user:当前操作的用户、程序。
资源对象resource:当前被访问的对象
角色对象role:一组"权限操作许可权"的集合。
权限对象permission:权限操作许可权

 

 快速搜索技术elasticsearch(ES)

eg:gitee开源仓库搜索;淘宝商品搜索

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

C++ 设计模式:拦截器模式

#include<iostream>
#include<string>
#include<list>
 
using namespace std;
 
//创建过滤器抽象接口类Filter
class Filter
{
public:
	Filter() {};
	virtual ~Filter() {};
	virtual void execute(string request)=0;
};
 
//创建过滤器实体类AuthenticationFilter
class AuthenticationFilter :public Filter
{
public:
	AuthenticationFilter() {};
	~AuthenticationFilter() {};
	void execute(string request);
};
 
void AuthenticationFilter::execute(string request)
{
	cout << "AuthenticationFilter request: " << request << endl;
}
 
//创建过滤器实体类DebugFilter
class DebugFilter :public Filter
{
public:
	DebugFilter() {};
	~DebugFilter() {};
	void execute(string request);
};
 
void DebugFilter::execute(string request)
{
	cout << "DebugFilter request: " << request << endl;
}
 
//创建请求处理程序Target类
class Target
{
public:
	Target() {};
	~Target() {};
	void execute(string request);
};
 
void Target::execute(string request)
{
	cout << "Target request: " << request << endl;
}
 
//创建过滤器链,将多个过滤器实体对象连接起来,实现更强大的过滤功能
class FilterChain
{
public:
	FilterChain() {};
	~FilterChain();
	void addFilter(Filter *filter);
	void execute(string request);
	void setTarget(Target *target);
 
private:
	list<Filter*> filterList;
	Target *target;
};
 
FilterChain::~FilterChain()
{
	list<Filter*>::iterator it;
	for (it = this->filterList.begin(); it != this->filterList.end(); ++it)
	{
		delete (*it);
		(*it) = NULL;
	}
	delete this->target;
	this->target = NULL;
}
void FilterChain::addFilter(Filter *filter)
{
	this->filterList.push_back(filter);
}
void FilterChain::execute(string request)
{
	list<Filter*>::iterator it;
	for (it = this->filterList.begin(); it != this->filterList.end(); ++it)
	{
		(*it)->execute(request);
	}
	this->target->execute(request);
}
void FilterChain::setTarget(Target *target)
{
	this->target = target;
}
 
//创建过滤器管理类FilterManager,主要是管理过滤器链,负责增删改查过滤器链
class FilterManager
{
public:
	FilterManager(Target *target);
	~FilterManager();
	void setFilter(Filter *filter);
	void filterRequest(string request);
 
private:
	FilterChain *filterchain;
};
 
FilterManager::FilterManager(Target *target)
{
	this->filterchain = new FilterChain();
	this->filterchain->setTarget(target);
}
FilterManager::~FilterManager()
{
	delete this->filterchain;
	this->filterchain = NULL;
}
void FilterManager::setFilter(Filter *filter)
{
	this->filterchain->addFilter(filter);
}
void FilterManager::filterRequest(string request)
{
	this->filterchain->execute(request);
}
 
//创建客户端Client
class Client
{
public:
	Client() {};
	~Client() {};
	void setFilterManager(FilterManager *filterManager);
	void sendRequest(string request);
 
private:
	FilterManager *filtermanager;
};
 
void Client::setFilterManager(FilterManager *filterManager)
{
	this->filtermanager = filterManager;
}
void Client::sendRequest(string request)
{
	this->filtermanager->filterRequest(request);
}
 
 
int main()
{
	FilterManager *filtermanager = new FilterManager(new Target());
	filtermanager->setFilter(new AuthenticationFilter());
	filtermanager->setFilter(new DebugFilter());
 
	Client *client = new Client();
	client->setFilterManager(filtermanager);
	client->sendRequest("Home");
 
	delete filtermanager;
	filtermanager = NULL;
 
	delete client;
	client = NULL;
 
	system("pause");
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尚硅谷-尚医通实战经验总结 的相关文章

  • 使用IDEA创建Servlet项目

    使用 IDEA创建Servlet项目 原料 xff1a IDEA 2016 xff0c Tomcat8 0 步骤如下 xff1a 1 创建项目 File gt New gt Project gt Java Enterprise 如下图所示
  • px4基本知识

    1 PX4自驾仪 PX4是与平台无关的自动驾驶仪软件 xff08 或称为固件 xff09 xff0c 可以驱动无人机或无人车 它可以被烧写在某些硬件 xff08 如Pixhawk v2 xff09 xff0c 并与地面控制站在一起组成一个完
  • React尚硅谷115-126(setState、Hooks、Fragment、context、组件优化、renderprops、错误边界、组件通信方式总结)

    115 项目打包运行 npm install serve g serve build 116 setState setState是同步的 xff0c 但是引起页面更新动作是异步的 xff08 状态的更新是异步的 xff09 相当于this
  • 程序员跨越式成长指南

    我的 GitChat 达人课 程序员跨越式成长指南 xff0c 更新了三篇文章 xff0c 现在完成的内容如下 xff1a 导读 xff1a 开发路上的两次关键跨越 第01课 xff1a 如何做到选择大于努力 第02课 xff1a 开发者的
  • 树莓派一些传感器的使用

    树莓派一些传感器的使用 Part 1 树莓派GPIO编号方式和引脚说明 参考 xff1a 树莓派开发系列教程9 树莓派GPIO控制 1 功能物理引脚 从左到右 xff0c 从上到下 xff0c 左边基数 xff0c 右边偶数 xff0c 1
  • centos 安装Git-cola

    首先安装Git sudo yum y install git 找到 git all noarch 安装这个 sudo yum install git all noarch 61 61 61 61 61 61 61 61 61 61 61 6
  • C++继承总结

    继承的概念 继承机制是面向对象程序设计使代码可以复用的重要手段 xff0c 它允许程序员在保持原有类特性的基础之上进行其他扩展 xff0c 增加功能 xff0c 这样产生的新类 xff0c 称之为派生类 继承呈现了面向对象程序设计的层次结构
  • 读完《大数据时代》的一点儿心得

    工作一段时间之后 xff0c 总喜欢读读书 xff0c 这是多年养成下来的一个习惯 读书使人避恶 xff0c 读书使人向善 xff0c 读书使人聪慧 xff0c 读书使人高尚 xff0c 我们都是聪明人 xff0c 对吧 xff1f 哈哈哈
  • 产品管理精华:第十一,数据的思维方式

    xfeff xfeff 数量庞大 增长迅猛 种类多样的数据已经成为企业在大数据时代发展不得不面临的现实境况 这是挑战 xff0c 也是机遇 基于客户需求 xff0c 提供领先 全面 有效的解决方案 xff0c 帮助企业获取商业洞察力 xff
  • 产品管理精华:第十四,产品炼成?

    xfeff 最近一段时间在准备信息系统项目管理师 的考试 xff0c 在备考复习过程中 xff0c 通过系统学习和理解项目管理相关知识 xff0c 发现项目和产品管理联系很密切 项目过程是伴随着产品过程而生 我们先来了解一下项目的定义 xf
  • glib简单记录包括字符串,主循环,回调函数和xml解析

    一 将最近用到的glib字符串功能整理了下直接用程序记录比较好看懂 define MAX LEN 100 gchar demo char msg gchar pcfgfile 61 NULL para 61 NULL va list arg
  • 产品管理精华:第十六,品味

    美感是第一道关卡 xff0c 丑陋的数学在世界上无法生存 G H 哈代 xff0c 一个数学家的道歉 品味 xff0c 如今很少听到这个词了 xff0c 可能被一些新的 xff0c 流行的叫法替代了 很长一段时间 xff0c 谈论品味这玩意
  • 《产品管理精华》目录

    产品管理精华 目录 本文是这个目录 xff0c 可以快速找到你需要的内容 xff1a 产品管理精华 xff1a 第一 xff0c 谁是优秀的产品经理 xff1f 产品管理精华 xff1a 第二 xff0c 工具 xff0c 适合自己的最好
  • 电商分销的社交化运营实践

    最近一段时间专注于研究社交化的电商分销运营体系 xff0c 如何最大化利用碎片化社会资源来整合营销渠道 目前最有代表性的电商分销就是全民分销概念 xff0c 它的最大特点在于通过社交网络 xff08 大部分是通过微信商城开店 43 三级返佣
  • 《产品管理精华》序

    今日事 xff0c 今日毕 xff01 xff0c 说起来容易 xff0c 做起来难 知道为什么要去做一件事 xff0c 这样做了哪些人都受到实惠 xff0c 领悟生活的趣味 xff0c 自己是否也得到了快乐和满足 xff0c 每一份付出都
  • 个人简介

    经验丰富的产品设计师 xff0c 专门从事与产品设计相关的研究 趋势分析 理念探索和产品研发 专注于政策脉搏和市场趋势的研究 xff0c 成功研发多个互联网相关领域产品 xff0c 对移动互联网产品架构 运营管理有较为深入的管控能力 欢迎大
  • 产品管理精华:第一,谁是优秀的产品经理?

    34 人因为梦想而伟大 34 英格丽 褒曼 每个人的心中都有一个梦想 xff0c 梦想是美好的 xff0c 但是实现梦想的道路是曲折的 xff0c 无数人在实现梦想的道路上遭遇了无数曲折 xff0c 尽管如此 xff0c 他们依旧大步向前
  • 产品管理精华:第三,需求调研,从用户出发

    因为需要 xff0c 让我更加完美 佚名 产品经理都会遇到 客户 用户 这两个概念念 xff0c 它们谁更重要也一直争论不休 用户 近乎苛刻的需求可以不断产品体验和质量 xff0c 同时产品投入市场之后都会遇到变现这个问题 xff0c 总需
  • 第1章 概述--PADS的历史版本

    1986年 xff1a PADS PCB xff0c DOS操作系统 1989年 xff1a PADS Logic xff0c DOS操作系统 1990年 xff1a PADS 2000 xff0c DOS操作系统 1993年 xff1a
  • docker安装图形化界面

    分享第一份Java基础 中级 高级面试集合 Java基础 xff08 对象 43 线程 43 字符 43 接口 43 变量 43 异常 43 方法 xff09 Java中级开发 xff08 底层 43 Spring相关 43 Redis 4

随机推荐

  • 嵌入式软件开发岗面试题

    1 单片机IO口开漏输出和推挽输出有什么区别 xff1f 答 xff1a 开漏输出 xff1a 开漏输出只能输出低电平 xff0c 如果要输出高电平必须通过上拉电阻才能实现 就类似于三极管的集电极输出 推挽输出 xff1a 推挽输出既可以输
  • pytorch 查看模型结构 网络参数

    用法比较简单 xff0c 不过容易忘 xff0c 记录一下 假设已定义好模型 xff0c 名为model 查看模型结构 xff1a gt gt gt print model 查看网络参数 xff1a for name parameters
  • 【Linux网络编程】select函数实现TCP并发服务器

    I O多路复用 应用程序中同时处理 多路 输入输出流 xff0c 若采用 阻塞模式 xff0c 将得不到预期的目的 xff1b 若采用 非阻塞模式 xff0c 对多个输入进行轮询 xff0c 但又太浪费 CPU 时间 xff1b 若设置 多
  • 【校招】面试_华为_通用软件工程师_二面

    1 面试信息 面试形式 xff1a 视频面试 面试时间 xff1a 2020 03 25 11 30 00 AM 面试时长 xff1a 40分钟 面试职位 xff1a 软件技术开发部 通用软件工程师 xff08 无线网络产品线 通用软件开发
  • 你必须会的启发式搜索算法--A*算法

    一 算法原理 A 算法 xff0c 就是解决在一个平面 grid地图中寻找起点到终点的最短路径问题的算法 xff0c 类似于Dijkstra算法和BFS算法一样 xff0c 属于广度优先搜索 实际上它还是一个启发式搜索算法 xff0c 什么
  • C/C++/LINUX 资源网站

    C C 43 43 LINUX 资源网站 本博客记录学习 开发中常用的网站 http www cplusplus com c 43 43 官网 xff0c 包含c 43 43 介绍以及一些简单的使用样例 目前主要用来查询 STL 的使用 h
  • 焊接单片机最小系统板,驱动lcd1602

    今天分享一些我制作单片机最小系统板的过程以及遇到的问题和解决办法 本人萌新一枚 xff0c 写文章就是我们大家互相学习交流 之前学习的是郭天祥的tx 1c单片机 xff0c 书中的例程都写的差不多了 xff0c 就想着自己焊接一个最小系统板
  • [ROS]极简开发环境建立流程(新手适用)

    ROS开发环境的建立 一 前言二 操作系统环境1 Ubuntu2 VMWare 可选 三 ROS运行环境1 ROS2 ROS周边设置3 ROS开发包及帮助获取方式 四 ROS开发环境1 建立工作空间 workspace2 Original开
  • 伽马函数与贝塔函数的定义

    伽马函数 称以下函数 61 0
  • Linux kernel development

    这几天一直在读经典的linux入门书 Linux kernel development 第三版即LKD xff0c 这是我第一次读英文版的技术书 xff0c 颇有些高兴 之所以读 xff0c 一是因为学过操作系统的理论知识 xff0c 想看
  • Windows + Ubuntu20.04双系统详细安装教程

    Windows 43 Ubuntu20 04双系统安装 1 制作启动盘1 1 从ubuntu官网下载ubuntu ISO文件1 2 下载启动Rufus1 3 将ISO文件写入启动盘1 3 1 设备 xff08 Device xff09 1
  • 程序员的成长之路

    1 初识编程 清楚的记得2008年上大学 xff0c 当时学的第一门编程语言是汇编语言 xff0c 第一堂课上 xff0c 老师就说这个学科的挂科率是最高的 xff0c 大家做好心理准备 xff0c 后来证明 xff0c 这并不是下马威 x
  • 关于协方差矩阵的理解

    转载自 关于协方差矩阵的理解
  • ubuntu下vscode配置C++环境-clang

    之前一直采用gcc xff0c 说不上多好用 xff0c 一直在凑活 xff0c 一次偶然的机会听说了clangd xff0c 就尝试了clang作为前端 xff0c 还挺好用 xff0c 这里分享给大家 xff08 踩了很多坑bushi
  • PID控制系统阶跃响应图-参数整定过程,matlab代码真实可用

    PID控制系统阶跃响应图 参数整定过程 xff0c matlab代码真实可用 点个赞呗 clear all clc close all PID span class token operator 61 span span class tok
  • c语言 查找指定字符

    本题要求编写程序 xff0c 从给定字符串中查找某指定的字符 输入格式 xff1a 输入的第一行是一个待查找的字符 第二行是一个以回车结束的非空字符串 xff08 不超过80个字符 xff09 输出格式 xff1a 如果找到 xff0c 在
  • 解决 UP Squared* Grove 物联网开发套件和 Arduino Create* 的连接问题

    如果您发现采用默认方法无法连接 UP Squared 主板和 Arduino Create xff0c 可以尝试另外一种方法 xff1a 使用串行终端连接主板 请执行以下步骤 开始前须知 确保主板已连接至电源和以太网 xff0c 如下所示
  • 解决 UP Squared* Grove 物联网开发套件和 Arduino Create* 的连接问题

    如果您发现采用默认方法无法连接 UP Squared 主板和 Arduino Create xff0c 可以尝试另外一种方法 xff1a 使用串行终端连接主板 请执行以下步骤 开始前须知 确保主板已连接至电源和以太网 xff0c 如下所示
  • PX4无人机offboard开发之旅

    目录 xff08 随进度更ing xff09 无人机OFFBOARD开发仿真步骤思路 真机PX4固件刷新连接pre arm策略修改 相机 图片慢慢补 xff0c 进度慢慢更 无人机OFFBOARD开发 使用无人机进行风力发电机叶片自动巡检任
  • 尚硅谷-尚医通实战经验总结

    整个系统采用b2c的管理模式 xff0c 分为管理员系统和用户系统 xff08 直接商对客 xff09 1 后端整合Swagger进行技术测试 2 后端框架使用ssmp框架 3 logback和 log4j 作为日志实现框架 4 idea开