PHP 开发实战:基于 Hyperf 框架的轻量级微服务 CRM 客户管理系统及源码及部署

在数字化转型加速的背景下,客户关系管理(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-system

config/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"]

PHP 开发实战:基于 Hyperf 框架的轻量级微服务 CRM 客户管理系统及源码及部署_App

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

PHP 开发实战:基于 Hyperf 框架的轻量级微服务 CRM 客户管理系统及源码及部署_php_02

总结

通过本文的实践,我们基于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对配置、依赖注入、日志、缓存、模型映射、认证/授权、仓储

    ](https://blog.51cto.com/lhxsoft/3182388)分享

  • [CRM客户关系管理系统源码PHP开源软件开发

    CRM(客户关系管理),让我们告诉你它比它的名字暗示的要多。在企业中实施CRM的最终目标是为客户建立和提供积极的体验,这样他们就会不断回来,获得公司的商品和服务。通过这种方式,公司创建了一个经常参与的忠诚客户数据库。然而,客户关系管理的定义却一次又一次地发生了变化,主要是在重新定义客户需求的时候。CRM源码下载PHP及演示站:c.xsymz.icu您可以将CRM视为一个集中的平台,在这里您可以管理

    ](https://blog.51cto.com/u_15617172/5272840)客户服务 数据

  • [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处理、输入处

    ](https://blog.51cto.com/bvbroadview/1067993)PHP框架

  • [Oracle推出轻量级Java微服务框架Helidon

    近日,Oracle 推出了一个新的开源框架 Helidon,该项目是一个用于创建基于微服务的应用程序的 Java 库集合。和 Payara Micro、Thorntail(之前的 WildFly Swarm)、OpenLiberty、TomEE 等项目一样,该项目也加入了 MicroProfile 家族。Helidon 最初被命名为 J4C(Java for Cloud),其设计以简单、快速为目标

    ](https://blog.51cto.com/u_15057858/2689345)java

  • [基于AdminLTE-admin 开发的优秀的轻量级权限管理框架

    概述内容AdminLTE+Spring+Shiro开发的后台基础系统,master版本加入了Shiro支持AdminLTE-admin是以SpringMVC+Shiro+Mybatis为核心开发的精简后台基础系统。包含用户管理,角色管理,部门管理,权限管理,菜单管理,日志管理等常用业务模块。使用AdminLTE作为前端UI框架。第三方Mybatis-plus作为ORM框架。Encache权限缓存。

    ](https://blog.51cto.com/u_15067267/2577706)java

  • [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

暂无评论