在数字化转型加速的背景下,客户关系管理(CRM)已从单一的客户信息记录工具,演变为驱动企业销售增长、优化服务体验的核心引擎。PHP作为拥有庞大生态的后端语言,虽在传统Web开发中占据重要地位,但在微服务领域的实践相对滞后。Hyperf框架的出现打破了这一局面——作为PHP生态首个基于Swoole协程的高性能微服务框架,它让PHP开发者能够以更低的学习成本构建高可用、低延迟的分布式系统。接下来本文将聚焦实战,详解如何利用Hyperf框架搭建一套轻量级微服务CRM客户管理系统:从架构设计层面拆解前后端分离与微服务拆分策略,到核心模块实现中展示客户管理的缓存优化与gRPC通信细节,再到Docker容器化部署的完整流程。
源码及演示:c.xsymz.icu
系统架构与技术选型
系统架构设计
本系统采用前后端分离的微服务架构,整体分为API网关层、业务服务层、数据访问层和基础设施层。前端使用Vue.js 3+Element Plus构建单页应用,后端基于Hyperf框架拆分为用户服务、客户管理服务、销售机会服务、合同服务四个独立微服务,通过Nacos实现服务注册与发现,使用gRPC进行服务间通信,MySQL作为主数据库,Redis用于缓存和分布式锁,RabbitMQ处理异步任务。
技术栈清单
层级
技术选型
作用说明
前端
Vue.js 3 + Element Plus + Axios
构建用户界面,处理HTTP请求
API网关
Hyperf API Gateway
路由转发、认证鉴权、限流熔断
微服务框架
Hyperf 3.0
基于Swoole的协程微服务框架
服务注册发现
Nacos 2.1
微服务注册与配置中心
通信协议
gRPC + Protobuf
高性能服务间通信
数据库
MySQL 8.0 + Hyperf ORM
持久化存储客户、订单等业务数据
缓存
Redis 6.2
会话缓存、热点数据缓存
消息队列
RabbitMQ 3.10
异步处理通知、日志记录
部署
Docker + Docker Compose
容器化部署与服务编排
核心模块实现
项目初始化与配置
首先创建Hyperf项目骨架,配置Nacos注册中心和数据库连接:
composer create-project hyperf/hyperf-skeleton crm-system
cd crm-systemconfig/autoload/nacos.php 配置Nacos服务发现:
<?php
return [
'enable' => true,
'host' => '127.0.0.1',
'port' => 8848,
'username' => '',
'password' => '',
'service' => [
'name' => 'crm-customer-service',
'group_name' => 'DEFAULT_GROUP',
'namespace_id' => 'public',
'metadata' => [
'protocol' => 'grpc',
'weight' => 100,
],
],
];config/autoload/database.php 配置MySQL连接:
<?php
return [
'default' => [
'driver' => env('DB_DRIVER', 'mysql'),
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'crm'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'pool' => [
'min_connections' => 1,
'max_connections' => 10,
'connect_timeout' => 10.0,
'wait_timeout' => 3.0,
'heartbeat' => -1,
'max_idle_time' => (float)env('DB_MAX_IDLE_TIME', 60),
],
],
];客户管理服务模块
客户管理是CRM系统的核心,需要实现客户的CRUD、标签管理、跟进记录等功能。
Customer实体类(app/Model/Customer.php):
<?php
declare(strict_types=1);
namespace App\Model;
use Hyperf\DbConnection\Model\Model;
class Customer extends Model
{
protected ?string $table = 'customers';
protected array $fillable = [
'name', 'company', 'phone', 'email', 'address',
'status', 'source', 'remark', 'owner_id'
];
protected array $casts = [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
// 关联跟进记录
public function followUps()
{
return $this->hasMany(FollowUp::class, 'customer_id');
}
// 关联标签
public function tags()
{
return $this->belongsToMany(Tag::class, 'customer_tags', 'customer_id', 'tag_id');
}
}CustomerService服务层(app/Service/CustomerService.php):
<?php
declare(strict_types=1);
namespace App\Service;
use App\Model\Customer;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Redis\Redis;
class CustomerService
{
#[Inject]
protected Redis $redis;
protected string $cachePrefix = 'customer:';
/**
* 创建客户
*/
public function create(array $data): Customer
{
$customer = Customer::create($data);
$this->clearCustomerCache($customer->id);
return $customer;
}
/**
* 获取客户详情(带缓存)
*/
public function getById(int $id): ?Customer
{
$cacheKey = $this->cachePrefix . $id;
$cached = $this->redis->get($cacheKey);
if ($cached !== false) {
return unserialize($cached);
}
$customer = Customer::with(['followUps', 'tags'])->find($id);
if ($customer) {
$this->redis->setex($cacheKey, 3600, serialize($customer));
}
return $customer;
}
/**
* 更新客户信息
*/
public function update(int $id, array $data): bool
{
$result = Customer::where('id', $id)->update($data);
$this->clearCustomerCache($id);
return $result > 0;
}
/**
* 删除客户
*/
public function delete(int $id): bool
{
$result = Customer::destroy($id);
$this->clearCustomerCache($id);
return $result > 0;
}
/**
* 分页查询客户列表
*/
public function paginate(int $page = 1, int $limit = 15, array $filters = []): array
{
$query = Customer::query();
if (!empty($filters['name'])) {
$query->where('name', 'like', "%{$filters['name']}%");
}
if (!empty($filters['status'])) {
$query->where('status', $filters['status']);
}
if (!empty($filters['owner_id'])) {
$query->where('owner_id', $filters['owner_id']);
}
$total = $query->count();
$items = $query->offset(($page - 1) * $limit)
->limit($limit)
->orderByDesc('created_at')
->get();
return [
'total' => $total,
'items' => $items,
'page' => $page,
'limit' => $limit,
];
}
protected function clearCustomerCache(int $id): void
{
$this->redis->del($this->cachePrefix . $id);
}
}CustomerController控制器(app/Controller/CustomerController.php):
<?php
declare(strict_types=1);
namespace App\Controller;
use App\Service\CustomerService;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;
use Hyperf\HttpServer\Annotation\PostMapping;
use Hyperf\HttpServer\Annotation\PutMapping;
use Hyperf\HttpServer\Annotation\DeleteMapping;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Annotation\Middleware;
use App\Middleware\AuthMiddleware;
#[Controller]
#[Middleware(AuthMiddleware::class)]
class CustomerController
{
#[Inject]
protected CustomerService $customerService;
#[GetMapping(path: '/customers')]
public function index(RequestInterface $request)
{
$page = (int)$request->input('page', 1);
$limit = (int)$request->input('limit', 15);
$filters = [
'name' => $request->input('name'),
'status' => $request->input('status'),
'owner_id' => $request->input('owner_id'),
];
return [
'code' => 200,
'message' => 'success',
'data' => $this->customerService->paginate($page, $limit, $filters),
];
}
#[GetMapping(path: '/customers/{id}')]
public function show(int $id)
{
$customer = $this->customerService->getById($id);
if (!$customer) {
return ['code' => 404, 'message' => '客户不存在'];
}
return ['code' => 200, 'message' => 'success', 'data' => $customer];
}
#[PostMapping(path: '/customers')]
public function store(RequestInterface $request)
{
$data = $request->all();
$customer = $this->customerService->create($data);
return ['code' => 201, 'message' => '创建成功', 'data' => $customer];
}
#[PutMapping(path: '/customers/{id}')]
public function update(int $id, RequestInterface $request)
{
$data = $request->all();
$result = $this->customerService->update($id, $data);
return ['code' => $result ? 200 : 500, 'message' => $result ? '更新成功' : '更新失败'];
}
#[DeleteMapping(path: '/customers/{id}')]
public function destroy(int $id)
{
$result = $this->customerService->delete($id);
return ['code' => $result ? 200 : 500, 'message' => $result ? '删除成功' : '删除失败'];
}
}服务间通信(gRPC)
定义客户服务的gRPC proto文件(proto/customer.proto):
syntax = "proto3";
package customer;
option php_namespace = "App\\Grpc\\Customer";
option php_metadata_namespace = "App\\Grpc\\Customer\\Metadata";
service CustomerService {
rpc GetCustomer(GetCustomerRequest) returns (GetCustomerResponse);
rpc CreateCustomer(CreateCustomerRequest) returns (CreateCustomerResponse);
}
message GetCustomerRequest {
int32 id = 1;
}
message GetCustomerResponse {
Customer customer = 1;
}
message CreateCustomerRequest {
string name = 1;
string company = 2;
string phone = 3;
string email = 4;
}
message CreateCustomerResponse {
Customer customer = 1;
}
message Customer {
int32 id = 1;
string name = 2;
string company = 3;
string phone = 4;
string email = 5;
string status = 6;
}部署方案
Dockerfile配置
为每个微服务创建Dockerfile:
FROM hyperf/hyperf:8.1-alpine-v3.16-swoole
WORKDIR /opt/www
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
COPY . .
RUN chown -R www-data:www-data /opt/www/storage
EXPOSE 9501
ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"]
Docker Compose编排
docker-compose.yml 配置所有服务:
version: '3.8'
services:
# Nacos服务注册中心
nacos:
image: nacos/nacos-server:v2.1.0
container_name: crm-nacos
environment:
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=mysql
- MYSQL_SERVICE_DB_NAME=nacos
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=root
ports:
- "8848:8848"
depends_on:
- mysql
# MySQL数据库
mysql:
image: mysql:8.0
container_name: crm-mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=crm
ports:
- "3306:3306"
volumes:
- ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
# Redis缓存
redis:
image: redis:6.2-alpine
container_name: crm-redis
ports:
- "6379:6379"
# RabbitMQ消息队列
rabbitmq:
image: rabbitmq:3.10-management
container_name: crm-rabbitmq
ports:
- "5672:5672"
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=admin
# 客户管理服务
customer-service:
build: ./services/customer-service
container_name: crm-customer-service
ports:
- "9501:9501"
environment:
- APP_NAME=customer-service
- DB_HOST=mysql
- REDIS_HOST=redis
depends_on:
- nacos
- mysql
- redis
# API网关
api-gateway:
build: ./services/api-gateway
container_name: crm-api-gateway
ports:
- "80:80"
environment:
- NACOS_HOST=nacos
depends_on:
- nacos
- customer-service启动与验证
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs -f customer-service
总结
通过本文的实践,我们基于Hyperf框架成功构建了一套轻量级微服务CRM客户管理系统,验证了PHP在高性能微服务领域的可行性。系统的核心价值在于平衡了开发效率与运行性能——Hyperf的协程模型解决了PHP传统阻塞IO的性能瓶颈,Nacos的服务治理能力简化了微服务编排复杂度,而Redis缓存与gRPC通信则为高并发场景提供了技术支撑。在未来我们可引入SkyWalking实现全链路追踪,通过Elasticsearch构建客户行为分析引擎,或接入OAuth2.0强化权限管理。希望本文的技术方案能为PHP开发者打开微服务实践的大门,也为企业数字化转型提供一种轻量且高效的CRM建设思路。
- 赞
- 收藏
- 评论
- 举报
提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新
相关文章
[基于PHP开发CRM源码|CRM客户管理系统源码
前言在当今这个信息化高速发展的时代,客户资源已经成为企业的重要资产,对于客户资源的合理管理,关乎着企业的生存与发展。而客户关系管理系统(CRM)的引入,正是为了改善这一问题,提升企业的市场竞争力。CRM系统,即客户关系管理系统,是一种以客户为中心的信息系统。它旨在通过先进的技术手段和管理理念,全面记录、分析和管理企业在营销、销售、服务过程中与客户互动产生的信息。通过集中管理客户信息、销售机会、交
](https://blog.51cto.com/u_17047384/12199672)php CRM mysql
[CRM客户管理系统源码接入uniapp
CRM客户管理系统源码是一种用于管理和维护客户关系的软件系统,主要用于帮助企业有效地管理客户信息、销售机会和市场活动。该系统源码包含了系统的设计和实现所需的所有代码和相关文件。客户关系管理 (CRM) 解决方案通过组织客户和潜在客户信息,帮助您与他们建立更牢固的关系并更快地发展业务,从而帮助您找到新客户、赢得他们的业务并让他们满意。CRM 系统首先跨多个来源和渠道收集客户的网站、电子
](https://blog.51cto.com/u_16498637/9115517)ci CRM 系统源码
[全伐企业级CRM客户关系管理系统源码(PHP+Java+Uniapp)
CRM(Customer Relationship Management)系统是现代企业管理客户关系、提升销售效率、优化客户服务流程的重要工具。它集成了客户信息管理、销售流程自动化、市场活动追踪、服务支持等多个方面,旨在帮助企业更好地理解客户需求,增强客户忠诚度,从而提升企业竞争力。 系统架构设计 源码:c.xsymz.icu 1. 技术选型](https://blog.51cto.com/u_16951508/11771439) CRM 客户管理系统源码 客户关系管理系统源码
[CRM客户管理系统源码PHP
我们已经知道CRM是“客户关系管理”的缩写。然而,CRM 的定义更进一步:它是对销售、营销、服务和所有接触点的 360 度全方位管理。我们正处于客户时代、数字化转型时代和新技术时代。在这种情况下,这种关系也发生了演变,产生了一个新概念,也称为客户体验。CRM客户管理系统的概念意味着以客户为中心。这是战略,是过程,是工具和技术。 演示:c.xsymz.icu  
](https://blog.51cto.com/u_15828520/5807308)sqlite microsoft 管理系统
[基于Flask的轻量级微服务开发实践
你在开发小型后端服务时,是不是觉得Django太重、配置繁琐,而纯手写接口又缺乏规范?Flask作为轻量级Web框架,正好适配这种场景——核心功能极简,又能通过扩展灵活搭建微服务(如用户认证、API文档、数据库集成)。本文带你从0到1搭建一个完整的Flask微服务,掌握路由设计、中间件、数据库集成、部署上线的核心实践,用最少的代码实现稳定可用的微服务。一、核心认知:Flask微服务的优势与适用场景
](https://blog.51cto.com/u_17353607/14496781)微服务 flask 生产环境
[基于SSM+SpringBoot《CRM客户关系管理系统》实战开发教程(附文档及源码)
客户关系管理(Customer Relationship Management,简称CRM),是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售、营销和服务上的交互,从而提升其管理方式,向客户提供创新式的个性化的客户交互和服务的过程。其最终目标是吸引新客户、保留老客户以及将已有客户转为忠实客户,增加市场。“世上本来没有CRM,大家的生意越来越难做了,才有了CRM” 。CRM系统即客户关系管理系统, 顾名思义就是管理公司与客户之间的关系. 是一种以"客户关系一对一理论"为
](https://blog.51cto.com/xiongmaoit/6128302)spring boot mybatis java CRM 项目构建
[客户关系管理系统CRM源码及文档
客户关系管理系统(CRM)是一种用于管理企业与客户互动的工具,通过整合数据库、业务流程和分析能力,帮助企业提高客户满意度和业务效益。在本文中,我将详细记录“客户关系管理系统CRM源码及文档”的问题解决过程,涵盖背景描述、技术原理、架构解析、源码分析、性能优化和案例分析等多个方面。### 背景描述客户关系管理系统不仅仅是一个简单的数据库,它通过综合的信息管理能力,帮助企业了解客户需求并优化服
](https://blog.51cto.com/u_16213345/14227049)CRM Customer 管理系统
[PHP微服务:搭建Hyperf
文档:Hyperf文档Hyperf框架官方文档https://hyperf.wiki/一:准备环境基于宝塔环境,安装php7.4,Hyperf 2.2 需要PHP版本 >=
](https://blog.51cto.com/jing/6002543)gnu 服务器 php composer redis
[APICloud AVM框架 开发CRM客户管理系统
CRM 客户管理系统,通过信息技术以及互联网技术协调企业与顾客间在销售、营销和服务上的交互,从而提升其管理方式,向客户提供创新式的个性化的客户交互和服务的过程。其最终目标是吸引新客户、保留老客户以及将已有客户转为忠实客户,增加市场。APP 开发采用 APICloud AVM 框架,后台采用 PHP。思维导图功能介绍1. 客户管理:录入客户信息、客户跟进、客户销售记录、直接拨打客户电话、条件筛选查询
](https://blog.51cto.com/u_9338896/5516296)移动开发 安卓 IOS
[轻量级的.Net Core微服务快速开发
前言 Adnc是一个基于.Net Core前后端分离的轻量级微服务(microservices)快速开发框架,同时也可以应用于单体架构系统的开发。框架基于JWT认证授权,包含基础的后台管理功能,代码简洁、易上手、学习成本低、开箱即用。 Adnc对配置、依赖注入、日志、缓存、模型映射、认证/授权、仓储
[CRM客户关系管理系统源码PHP开源软件开发
CRM(客户关系管理),让我们告诉你它比它的名字暗示的要多。在企业中实施CRM的最终目标是为客户建立和提供积极的体验,这样他们就会不断回来,获得公司的商品和服务。通过这种方式,公司创建了一个经常参与的忠诚客户数据库。然而,客户关系管理的定义却一次又一次地发生了变化,主要是在重新定义客户需求的时候。CRM源码下载PHP及演示站:c.xsymz.icu您可以将CRM视为一个集中的平台,在这里您可以管理
[CRM源码-PHP客户关系管理系统开发搭建手册
CRM源码,全称客户关系管理(Customer Relationship Management)源码,是指用于构建或定制客户关系管理系统(CRM系统)的源代码。CRM系统是一个集成化的信息技术解决方案,旨在帮助企业更好地管理其与客户之间的交互和关系。通过CRM系统,企业可以更有效地跟踪客户活动、管理销售线索、优化客户服务、分析客户数据,并做出更加明智的商业决策。源码及演示:m.certerm.t
](https://blog.51cto.com/u_17084236/12328744)CRM Customer 数据
[php的轻量级rpc框架yar
php的轻量级rpc框架yar
](https://blog.51cto.com/vabc1314/1854205)php的轻量级rpc框架yar
[超轻量级PHP框架BroPHP
BroPHP是一个免费开源的轻量级PHP框架(学习型),允许你把基于BroPHP框架开发的应用去开源或发布、销售商业产品。BroPHP框架完全采用面向对象的设计思想,并且是基于MVC的三层设计模式,具有部署和应用及为简单、效率高、速度快,扩展性和可维护性都很好等特点,可以稳定地用于商业及门户的开发。BroPHP框架包括单入口文件、MVC模式、目录组织结构、类自动加载、强大基础类、URL处理、输入处
[Oracle推出轻量级Java微服务框架Helidon
近日,Oracle 推出了一个新的开源框架 Helidon,该项目是一个用于创建基于微服务的应用程序的 Java 库集合。和 Payara Micro、Thorntail(之前的 WildFly Swarm)、OpenLiberty、TomEE 等项目一样,该项目也加入了 MicroProfile 家族。Helidon 最初被命名为 J4C(Java for Cloud),其设计以简单、快速为目标
[基于AdminLTE-admin 开发的优秀的轻量级权限管理框架
概述内容AdminLTE+Spring+Shiro开发的后台基础系统,master版本加入了Shiro支持AdminLTE-admin是以SpringMVC+Shiro+Mybatis为核心开发的精简后台基础系统。包含用户管理,角色管理,部门管理,权限管理,菜单管理,日志管理等常用业务模块。使用AdminLTE作为前端UI框架。第三方Mybatis-plus作为ORM框架。Encache权限缓存。
[crm客户管理系统 JAVA源码 crm管理系统开发
随着社会快速发展,各大企业的业务越来越广,客户关系管理成为一项重要的工作。CRM客户管理系统能够帮助企业以最优的效率管理客户资源,了解公司业务情况,深受企业喜爱。CRM系统开发对于企业的意义1. 传递业务经验,规范业务流程通过CRM软件,可以把企业优秀销售人员管理客户的流程整理出来,通过系统来优化到业务流程中,从而使得每个人员都能够掌握最好的销售流程。2. 提升销售项目管理能力和成单率通过CRM软
](https://blog.51cto.com/u_16099333/9734456)crm客户管理系统 JAVA源码 人工智能 CRM 业务流程 数据分析
[轻量级微服务架构 源码 微服务架构选型
微服务架构的概述应用架构的发展应用是可以独立运行的程序代码,提供相对完善的业务功能. 目前的软件架构有三种架构类型:业务架构应用架构技术架构他们之间的甚是: 业务架构决定应用架构,技术架构支撑着应用架构. 应用架构的发展历程:单体架构: 最古老的单体应用,没有任何应用拆分,整体就是一个war包分布式应用 | SOA架构: 根据业务进行划分服务,不同的业务建立不同的服务,不同的服务之间通过服务接口进
](https://blog.51cto.com/u_12218/6697905)轻量级微服务架构 源码 java 微服务 Cloud 解决方案
[javaee轻量级框架应用实战答案 轻量级javaweb框架
博文太长了, 还是先说下概要:框架"轻量"与否可以从两方面来看待: 1) 框架本身的体量 - 例如小 jar 无依赖的苗条框架; 2) 用户使用框架是否获得各种便利而无阻隔("隔" 的含义参考王国维先生的人间词话)单单"轻量"二字不足以说明框架的特性和使用方式一定要说"轻量", 老码农倾向与第二种 - 用户使用框架是否获得各种便利而无阻隔为了"轻量"而刻意使框架苗条化有时候不足取.tl;dr 以下
](https://blog.51cto.com/u_16213693/7817636)javaee轻量级框架应用实战答案 json java php 码农
[java 轻量级微服务管理系统开源 java最新微服务架构
资料来源:有架构给我的一些资料,以及自己百度和论坛、社区找来的一些资料,权当做一个总结式的简介。。。 目录如下:一、微服务架构介绍二、出现和发展三、传统开发模式和微服务的区别四、微服务的具体特征五、SOA和微服务的区别六、如何具体实践微服务七、常见的微服务设计模式和应用八、微服务的优点和缺点九、思考:意识的转变十、参考资料和推荐阅读 一、微服务架构介绍 &
](https://blog.51cto.com/u_16213672/14023525)java 轻量级微服务管理系统开源 数据库 设计模式 ui 微服务
[java设计模式概述
java设计模式有很多,如果没记错的话,是二十三种。真正高频、能立刻提升代码质量的,其实就 8~10 个。
](https://blog.51cto.com/u_13259/14503206)#java #设计模式 #开发语言 设计模式 AOP
[android 系统给每个进程分配多少内存
由于android系统中应用程序之间不能共享内存。因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些。在android SDK中提供了4种用于跨进程通讯的方式。这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。其中Activity可以跨进程调用其他应用程序的Activity;Content P
](https://blog.51cto.com/u_14230/14503444)Android 进程间通讯 应用程序 android java
[爬虫学习笔记(二十四)—— pyspider框架\_pyspider xpath
如果能看到这里,说明这个流程基本已经了解了。其实就是一个同步的,先publish任务扔进队列,然后启动消费,采集+ 解析+入库。当然,任意一个部分出错+重试,都有funboost 兜底来重试,这个框架简直是绝了。爬虫有相当多的参数功能就可以直接用funboost。就是这里动态创建队列的时候,官方文档给了demo ,动态生成队列 ,以及使用类方法。但是动态生成队列 +使用类方法 就有点麻烦了。根据解析名创建队列。在上述代码中,有一个。这个我们回头再解决~
](https://blog.51cto.com/u_16213719/14503688)#爬虫 #架构 #python ide 自定义
[深度学习工作原理与神经网络
摘要:本文系统介绍了神经网络的基本原理和实现方法。首先阐述了人工神经网络的定义及其对生物神经网络的模拟机制,重点讲解了全连接网络的三层结构(输入层、隐藏层、输出层)。其次详细分析了常用激活函数(Sigmoid、Tanh、ReLU、Softmax)的特性、数学表达式及适用场景。接着探讨了多种参数初始化方法(均匀分布、正态分布、Kaiming、Xavier等)及其实现代码。最后通过PyTorch示例展示了网络搭建流程,并总结了神经网络的优缺点
](https://blog.51cto.com/u_16099237/14504120)#深度学习 #人工智能 初始化 激活函数 权重
[图解python | 文件读写\_51CTO博客
本文系统讲解了 Python 文件读写的基础与工程实践,从文件对象、打开与关闭、上下文管理,到文本与二进制文件读写、文件指针、编码问题及异常处理,辅以丰富代码示例与性能、安全提示。通过日志分析工具的实际项目案例,将理论与实践结合,展示大文件处理、流式读取、随机访问和编码容错的应用方法。文章旨在帮助开发者掌握高效、可靠、可维护的文件操作技巧,提高日常开发与工程实践能力。
](https://blog.51cto.com/u_12897/14504288)#python #文件读写 #文件对象的抽象 #打开与关闭 #上下文管理
Generated by Clearly Reader
暂无评论