本篇文章主要分享本人对MVVM,三层架构与ORM框架的一些心得,如果各路大神有其他看法可以在评论区评论,欢迎各位提出指导意见。废话不多说直接上图上代码。
这个软件是以学生信息管理系统为例子,UI 层提供对学生信息的增加,删除,修改,查询功能,对应到底层对数据库实现增删改查的操作.下面我就以三层架构的思维从上往下一一描述。
1.UI 层
这里采用了MVVM 的设计架构,目的是让视图代码和数据模型降低耦合,实现属性,方法的绑定。在控件上我稍微使用了控件模板和样式。
(1)View 代码:
PS:在界面底下构造需要把Viewmodel 的数据绑定到前端中,可以组合引用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using MVVMTest.ViewModel;
using MVVMTest.View;
namespace MVVMTest.View
{
///
/// MainWindow.xaml 的交互逻辑
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = MainViewModel.Instance;
}
}
}
(2)ViewModel 代码(这里跟事件的绑定我使用了Prism 框架,因为不想自己造轮子,其他的框架也是可以的,这块业务我使用了单例去设计)
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using MVVMTest.Model;
using Prism.Commands;
namespace MVVMTest.ViewModel
{
public class MainViewModel
{
static MainViewModel()
{
}
private MainViewModel()
{
IniViewModel();
BusinessLogic.BusinessLogic.Instance.SetRequest(studentModel.GetType());
}
public static MainViewModel Instance { get; } = new MainViewModel(); //这里使用单例去做业务处理
//控件命令列表
// Prism 框架下的事件绑定,可带参和不带参
private DelegateCommand _buttonQueryCommand;
public DelegateCommand buttonQueryCommand =>
_buttonQueryCommand ?? (_buttonQueryCommand = new DelegateCommand(ViewQuery));
private DelegateCommand _buttonInsertCommand;
public DelegateCommand buttonInsertCommand =>
_buttonInsertCommand ?? (_buttonInsertCommand = new DelegateCommand(ViewInsert));
private DelegateCommand _buttonUpdataCommand;
public DelegateCommand buttonUpdataCommand =>
_buttonUpdataCommand ?? (_buttonUpdataCommand = new DelegateCommand(ViewUpdata));
private DelegateCommand _buttonDeleteCommand;
public DelegateCommand buttonDeleteCommand =>
_buttonDeleteCommand ?? (_buttonDeleteCommand = new DelegateCommand(ViewDelete));
private DelegateCommand _selectItemChangedCommand;
public DelegateCommand selectItemChangedCommand =>
_selectItemChangedCommand ?? (_selectItemChangedCommand = new DelegateCommand(GetModelObject));
public StudentModel studentModel { get; set; }
private StudentModel selectStudentModel = new StudentModel();
private void IniViewModel()
{
studentModel = new StudentModel();
}
private void ViewQuery()
{
studentModel.StudentList = BusinessLogic.BusinessLogic.Instance.QueryData();
}
private void ViewInsert()
{
BusinessLogic.BusinessLogic.Instance.InsertData(studentModel);
}
private void ViewUpdata()
{
selectStudentModel.Name = studentModel.Name;
selectStudentModel.Year = studentModel.Year;
selectStudentModel.Address = studentModel.Address;
selectStudentModel.PhoneNumber = studentModel.PhoneNumber;
BusinessLogic.BusinessLogic.Instance.UpdataData(selectStudentModel);
}
private void ViewDelete()
{
BusinessLogic.BusinessLogic.Instance.DeleteData(selectStudentModel);
}
private void GetModelObject(object obj)
{
if(obj!=null)
{
selectStudentModel = obj as StudentModel;
}
}
}
}
Model 层(Model 层主要用来创建数据模型 和 对数据库的映射,我这里使用了SqlSuger Code First 去实现数据库映射,同是界面对数据模型双向绑定 INotifyPropertyChanged 这个接口主要实现通知客户端数据刷新,System自带接口)
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
namespace MVVMTest.Model
{
[SugarTable("StudentData")] //映射表名
public class StudentModel : INotifyPropertyChanged
{
private string _Name { get; set; }
[SugarColumn(IsNullable =true)]
public string Name
{
get { return _Name; }
set
{
_Name = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Name"));
}
}
private int _Id { get; set; }
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)] //主键
public int Id { get { return _Id; } set { _Id = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Id")); } }
private string _Year { get; set; }
[SugarColumn(IsNullable = true)]
public string Year { get { return _Year; } set { _Year = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Year")); } }
private string _Address { get; set; }
[SugarColumn(IsNullable = true)]
public string Address { get { return _Address; } set { _Address = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Address")); } }
private string _PhoneNumber { get; set; }
[SugarColumn(IsNullable = true)]
public string PhoneNumber { get { return _PhoneNumber; } set { _PhoneNumber = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("PhoneNumber")); } }
[SugarColumn(IsIgnore = true)]
public List StudentList { get { return studentData; } set { studentData = value;PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("StudentList")); } }
private List studentData = new List() { };
public event PropertyChangedEventHandler PropertyChanged;
}
}
2.业务逻辑层(这里我也用了单例,并且保证线程安全)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using MVVMTest.DataAccess.DataBase;
using MVVMTest.Common;
using MVVMTest.Model;
using System.Data;
using System.Collections;
using System.Reflection;
namespace MVVMTest.BusinessLogic
{
class BusinessLogic
{
private BusinessLogic()
{
}
private static readonly object obj=new object();
private volatile static BusinessLogic instance = null;
SqlSugerHelper sqlSugerHelper = new SqlSugerHelper();
public static BusinessLogic Instance
{
get
{
if(instance==null)
{
lock(obj)
{
if(instance == null)
instance = new BusinessLogic();
}
}
return instance;
}
}
public void SetRequest(Type dataModel)
{
sqlSugerHelper.IniDB(GlobelEnum.DatabaseType.SqlServer, dataModel);
}
public void InsertData(StudentModel studentModel)
{
sqlSugerHelper.Insert(studentModel);
}
public List QueryData()
{
List dataTable = new List();
dataTable = sqlSugerHelper.Query();
return dataTable;
}
public void DeleteData(StudentModel studentModel)
{
sqlSugerHelper.Delete(studentModel);
}
public void UpdataData(StudentModel studentModel)
{
sqlSugerHelper.Updata(studentModel);
}
private DataTable ListToDt(IEnumerable collection)
{
var props = typeof(T).GetProperties();
var dt = new DataTable();
dt.Columns.AddRange(props.Select(p => new
DataColumn(p.Name, p.PropertyType)).ToArray());
if (collection.Count() > 0)
{
for (int i = 0; i < collection.Count(); i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in props)
{
object obj = pi.GetValue(collection.ElementAt(i), null);
tempList.Add(obj);
}
object[] array = tempList.ToArray();
dt.LoadDataRow(array, true);
}
}
return dt;
}
}
}
3.数据访问层(这里针对不同的数据库我使用了工厂模式去实现,由用户使用的时候再去选择实例哪一个数据库,这里的代码可能处理的不太好,欢迎大家发表不同意见)
(1)数据库基类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using SqlSugar;
namespace MVVMTest.DataAccess.DataBase
{
public abstract class SqlBase
{
public abstract SqlSugarClient IniDb(Type DataModel, string DataBaseName, string ServerName) ;
}
}
(2)数据库子类(SqlSever)(这里设计SqlSuger Code First 的代码)
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MVVMTest.DataAccess.DataBase
{
public class SqlSever : SqlBase
{
public override SqlSugarClient IniDb(Type DataModel, string DataBaseName, string ServerName )
{
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString =string.Format("server={0};database={1};uid=数据库账户;pwd=密码, ServerName, DataBaseName),
DbType = SqlSugar.DbType.SqlServer,//设置数据库类型
IsAutoCloseConnection = true,//自动释放数据务,如果存在事务,在事务结束后释放
InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息
});
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql + "\r\n" +
db.Utilities.SerializeObject(pars.ToString())); //打印数据库日志
Console.WriteLine();
};
//创建数据库 如果该库不存在,则进行创建。(这里创建的是名字为 Student 数据库)
db.DbMaintenance.CreateDatabase();
//初始化数据表,如果没有则创建
db.CodeFirst.InitTables(DataModel);
return db;
}
}
}
(3)数据库子类(Sqlite)
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MVVMTest.DataAccess.DataBase
{
public class Sqlite : SqlBase
{
public override SqlSugarClient IniDb(Type DataModel, string DataBaseName, string ServerName)
{
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = string.Format("server={0};database={1};uid=数据库账户;pwd=密码", ServerName, DataBaseName),
DbType = SqlSugar.DbType.Sqlite,//设置数据库类型
IsAutoCloseConnection = true,//自动释放数据务,如果存在事务,在事务结束后释放
InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息
});
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql + "\r\n" +
db.Utilities.SerializeObject(pars.ToString()));
Console.WriteLine();
};
//创建数据库 如果该库不存在,则进行创建。(这里创建的是名字为 Student 数据库)
db.DbMaintenance.CreateDatabase();
//初始化数据表,如果没有则创建
db.CodeFirst.InitTables(DataModel);
return db;
}
}
}
(4) 数据库工厂
using MVVMTest.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MVVMTest.DataAccess.DataBase
{
public class DataBaseFactory
{
private DataBaseFactory()
{
}
static DataBaseFactory() { }
public static DataBaseFactory Instance { get; } = new DataBaseFactory();
public SqlBase Create(GlobelEnum.DatabaseType databaseType)
{
SqlBase dataBaseFactory = null;
switch(databaseType)
{
case GlobelEnum.DatabaseType.MySql:
break;
case GlobelEnum.DatabaseType.SqlServer:
dataBaseFactory = new SqlSever();
break;
}
return dataBaseFactory;
}
}
}
(5)数据库访问接口
using MVVMTest.Common;
using MVVMTest.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MVVMTest.Model;
using System.Data;
namespace MVVMTest.DataAccess.DataBase
{
public class SqlSugerHelper
{
SqlBase sqlBase;
SqlSugarClient sqlSugarClient;
public void IniDB(GlobelEnum.DatabaseType databaseType, Type dataModel)
{
sqlBase = DataBaseFactory.Instance.Create(databaseType);
sqlSugarClient = sqlBase.IniDb(dataModel, "Student", "服务器名称");
}
public void Insert(StudentModel studentModel)
{
sqlSugarClient.Insertable(studentModel).ExecuteCommand();
//var a = sqlSugarClient.Ado.SqlQuery("select * from StudentData"); // 数据库语句
}
public List Query()
{
List studentModels = new List();
studentModels=sqlSugarClient.Queryable().ToList();
sqlSugarClient.Close();
return studentModels;
}
public void Delete(StudentModel studentModel)
{
sqlSugarClient.Deleteable(studentModel).ExecuteCommand();
}
public void Updata(StudentModel studentModel)
{
sqlSugarClient.Updateable(studentModel).ExecuteCommand();
}
}
}
公共类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MVVMTest.Common
{
public static class GlobelEnum
{
public enum SqlCommand
{
Invalid=-1,
IniDB=0,
Query=1,
Insert=2,
Updata=3,
Delete=4,
}
public enum DatabaseType
{
Invalid=0,
Sqlite=1,
SqlServer=2,
MySql=3,
}
public enum ORMType
{
Invalid = 0,
CodeFirst=1,
DBFirst=2,
ModelFirst=3,
}
}
}
公共类中有一些是不需要的枚举,可以不用完全借鉴
欢迎各位大神指导评论
你可能感兴趣的:(架构,c#,wpf,sqlserver)
内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%
CSSoftTechAI
钉钉 安全 中间件 安全架构
内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%##一、背景与痛点在内外网隔离的企业网络环境中,员工与外部协作伙伴(如钉钉用户)的文件传输面临以下挑战:1.**安全性风险**:内外网直连可能导致病毒传播、数据泄露。2.**操作繁琐**:传统方式需频繁切换网络环境,降低工作效率。3.**审计缺失**:缺乏文件传输的完整日志记录,难以追溯责任。**系统**通过智能中转架构,在保障网
REDMI K80 Ultra将搭载天玑9400+,电池至高7500mAh,百瓦快充不变
佳晓晓
智能手机 vue.js python scikit-learn 华为
最近手机圈又有大动静啦!红米K80Ultra的消息传得沸沸扬扬,据说它将搭载天玑9400+处理器,电池容量至高可达7500mAh,而且百瓦快充还不变!这配置一曝光,可把大家的好奇心都勾起来了,今天咱就好好唠唠这款备受期待的新机。天玑9400+:性能小钢炮,火力再升级先来说说这颗关键的天玑9400+处理器。这可是联发科的得意之作,是天玑9400的升级版,就像是给手机性能来了一次“涡轮增压”。从架构上
React + TypeScript 复杂布局开发实战
i建模
前端开发 前端框架 react
React+TypeScript复杂布局开发实战一、项目架构设计(基于最新技术栈)1.1技术选型与工程创建#使用Vite5.x+React19+TypeScript5.4npxcreate-vite@latestpower-designer-ui--templatereact-tscdpower-designer-ui&&npminstall#添加核心组件库npminstall@ant-desig
GAN(Generative Adversarial Network)—生成对抗网络
算法资料吧!
深度学习 机器学习 人工智能
GAN(GenerativeAdversarialNetwork)代表了深度学习中生成建模的尖端方法,通常利用卷积神经网络等架构。生成建模的目标是自主识别输入数据中的模式,使模型能够生成与原始数据集相似的新示例。本文涵盖了您需要了解的有关GAN、GAN架构、GAN的工作原理以及GAN模型类型等的所有信息。目录什么是生成对抗网络?GAN的类型GAN的架构GAN是如何工作的?生成对抗网络(GAN)的应
爆发的AI智能体(4):智能体构建与开发
caridle
人工智能
1.理解智能体的基本概念在开始构建智能体之前,重要的是要理解智能体的基本概念。智能体可以被看作是一个系统,它能够感知环境,拥有一定的推理能力,并能根据这些信息做出决策和行动。智能体的基本架构通常包括感知模块、推理模块和行动模块。2.确定智能体的目标和功能在构建智能体之前,需要明确其目标和功能。这包括确定智能体需要完成的任务、它将如何与用户或其他系统交互,以及它需要满足的性能标准。例如,一个客服智能
Mac M1芯片通过源码安装Python2.7.x
乌萨奇敲代码
macos python
文章目录MacM1芯片通过源码安装Python2.7.x1.下载源码2.安装依赖3.配置环境4.配置编译选项5.编译6.验证安装MacM1芯片通过源码安装Python2.7.x首先,由于AppleM1芯片使用的是ARM架构,已经不支持Python2.7.x了,所以需要利用Rosetta手动编译Python2.7.x,这里以安装Python2.7.17为例。1.下载源码首先,从Python官方网站下
Golang架构直通车——理解协程和Go调度器
No_Game_No_Life_
Golang架构直通车
文章目录进程、线程与协程Go协程:GoroutinesGo协程调度器Go调度器的设计策略为什么Java坚持多线程而不选择协程?协程和Channel的使用建议进程、线程与协程线程或者进程切换会带来大量的系统开销和上下文切换成本,导致严重的系统开销。在之前的文章中,我们提到过切换进程的开销:切换虚拟地址空间(切换页表、页目录以指向新的地址空间)切换内核栈切换硬件上下文虽然线程切换不需要执行第一步(因为
Electron工作流程(2)——进程间通信
MarinaTsang
electron javascript 前端
概述Electron继承了来自Chromium的多进程架构,网页浏览器的基本架构是单个浏览器进程控制不同标签页进程,以及整个应用程序的生命周期。这样可以避免单个浏览器的无响应不会影响到整个浏览器。Electron应用的大致工作流程是:启动APP——主进程创建window——win加载页面(渲染进程)Electron应用程序的结构非常相似。作为应用开发者,你将控制两种类型的进程:主进程和渲染器进程。
《白帽子讲Web安全》爬虫对抗:技术演进与攻防博弈
予安灵
白帽子讲Web安全 web安全 爬虫 安全 网络安全 网络攻击模型
《白帽子讲Web安全》一书中,作者吴翰清和叶敏以技术深度与实战视角系统剖析了爬虫技术的演进与反爬虫对抗的核心逻辑。本文结合书中内容,从爬虫发展、行业挑战、反爬方案及对抗策略等维度总结核心观点。一、爬虫技术的发展与行业挑战1.爬虫的演进早期爬虫以简单脚本为主,通过模拟HTTP请求抓取公开数据;随着技术进步,现代爬虫已发展为具备分布式架构、动态渲染(如Headless浏览器)、AI辅助解析等能力的复杂
【Mysql进阶】从链式复制到主从复制:5步转换MySQL复制架构,你真的会了吗?
墨瑾轩
MySql入门~精通 mysql 架构 android
关注墨瑾轩,带你探索编程的奥秘!超萌技术攻略,轻松晋级编程高手技术宝库已备好,就等你来挖掘订阅墨瑾轩,智趣学习不孤单即刻启航,编程之旅更有趣从链式复制到主从复制:5步转换MySQL复制架构,你真的会了吗?VS引言❓大家好,今天我们来聊一聊MySQL中的复制架构转换——从链式复制到主从复制。在某些情况下,你可能需要将现有的链式复制架构转换为主从复制架构,以简化管理和提高性能。你是否曾经因为复杂的复制
一文读懂智能体架构:模块化设计如何提升效率与灵活性
功城师
人工智能 大语言模型 自然语言处理 大模型 深度学习 智能体 LLM
随着人工智能技术的快速发展,智能体在企业知识管理、客户服务、业务数据分析等领域的应用愈加广泛。一个优秀的智能体设计不仅要具备高效处理用户需求的能力,还需要灵活适配不同场景的任务需求。本文将通过一个智能体的具体设计流程图,结合实际案例,详细解析其架构设计、功能实现及背后的技术逻辑,帮助大家深入了解智能体的构建过程。一、智能体设计的核心思路在智能体的设计过程中,最关键的是对用户需求的精准理解和快速响应
Flink集群架构
流量留
Apache Flink FLINK java 运维 数据库
在上一章节我们对flink有了一个基本的了解。从它的应用的场景以及它的一些基本的一些核心的一些概念。从本章节开始,我们对flink从它的一个集群的一个架构以及它的一个部署模式着手,去了解flink如何去部署在不同的这样的一个集群的一些资源管理器上面,以及相应的一些原理的一些解析。本节课开始我们了解一下flink的一个集群的一个基本的架构,了解里面核心的一些组件,比如说dropmanager,tas
Apache Pinpoint工具介绍
程序员的世界你不懂
效率工具提升 apache
ApachePinpoint:分布式系统性能分析与链路追踪一、Pinpoint简介ApachePinpoint是一个开源的分布式追踪系统,专为微服务架构设计,支持HTTP、RPC、MQTT等协议的调用链追踪。其核心功能包括:链路可视化:展示服务间调用关系(调用树、耗时分布)性能分析:定位慢请求、异常错误根源依赖分析:统计服务间流量占比自动化监控:集成Prometheus、Grafana实时告警二、
【TOGAF系列】ADF技术第二章架构原理
东临碣石82
架构
第2章:架构原理本章描述了企业架构开发中使用的原则。2.1介绍原则是一般规则和指导方针,旨在持久且很少修改,为组织履行使命的方式提供信息和支持。反过来,原则可能只是一套结构化思想中的一个要素,这些思想共同定义和指导着组织,从价值观到行动和结果。根据组织的不同,原则可以在不同的领域和不同的层次上建立。两个关键领域为架构的开发和利用提供了信息:企业原则为整个企业的决策提供了基础,并告知组织如何着手履行
autosar中bsw架构组成_AUTOSAR 经典平台架构及VFB
weixin_39715290
autosar中bsw架构组成
AUTOSAR经典平台架构及VFBAUTOSAR架构图BSW分层服务层系统服务(SystemServices)内存服务(MemoryServices)通信服务(CommunicationServices)车载通信服务层信息安全(加密服务)服务层ECAL和MCAL复杂驱动(ComplexDeviceDrivers)VFBVFB基本概念VFB有什么优点?软硬分离在虚拟功能总线上测试软件组件方法论结语A
深度求索:解析DeepSeek R1与V3模型的技术差异
walkskyer
AI探索 deepseek deepseek-r1 deepseek-v3
深度求索:解析DeepSeekR1与V3模型的技术差异引言模型定位与核心能力DeepSeekV3应用场景及示例DeepSeekR1应用场景及示例模型架构与训练方法DeepSeekV3的架构特点DeepSeekR1的强化学习策略性能表现与基准测试DeepSeekV3的性能优势领域DeepSeekR1的性能优势领域应用场景与部署成本分析DeepSeekV3的适用场景及部署成本优势DeepSeekR1的
【Python爬虫(80)】当Python爬虫邂逅边缘计算:探索数据采集新境界
奔跑吧邓邓子
Python爬虫 python 爬虫 边缘计算 开发语言
【Python爬虫】专栏简介:本专栏是Python爬虫领域的集大成之作,共100章节。从Python基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发者,都能从中汲取知识,助力掌握爬虫核心技能,开拓技术视野。目录一、引言二、边缘计算:概念与架构剖析2.1边缘计算的概念2.2边缘
【百问百答系列】-全面了解Transformer(未来发展)
什么都想学的阿超
原理概念 # 深度学习 transformer 深度学习 人工智能
【百问百答系列】-全面了解Transformer引言初次接触Transformer时,那些复杂的概念和精妙的架构设计,着实让我困惑不已。但随着一个一个问题的深入探究,从它的基本概念、原理架构,到如何训练、模型优化,再到其广泛的应用领域以及充满潜力的未来发展,我对它的理解也越来越深刻。希望借由这个百问百答系列,把在学习Transformer过程中的思考、疑问与收获分享出来。未来发展97.随着数据量的
荔枝混合云网络实践:技术创新与未来展望
ITPUB-微风
数字化
在数字化转型的浪潮中,荔枝集团作为中国在线音频的领军企业,于2020年1月17日成功登陆纳斯达克交易所,成为行业内的先锋。在云计算领域,荔枝集团通过其运维总监熊振的领导,专注于IaaS建设、SDN和全球化混合云网络架构设计,展现了其在技术创新上的深厚实力。本文将深入探讨混合云的发展趋势、管理中的痛点和挑战,以及荔枝混合云iRock的介绍和实现。一、混合云管理的痛点和挑战随着企业对云计算需求的增长,
Django实现API配合JWT进行用户验证的方法
Mr数据杨
Python Web开发 python js django JWT
在现代Web应用中,API认证是一项至关重要的功能。随着分布式架构和跨平台应用的发展,传统的Session认证方式逐渐难以满足需求。JSONWebToken(JWT)提供了一种无需在服务端存储用户状态的认证方式,适用于无状态的应用程序。本教程将以Django为例,介绍如何通过JWT实现对API的认证控制,包括基本配置与实际应用中的代码示例。文章目录传统的Session和JWT的区别JWT工作原理D
Amazon Aurora深度探索(一)
仲培艺
数据库 Amazon-Aurora
【导语】Amazon的Aurora自从问世,就备受关注,其性能和实现架构是被关注的热点。2017年,Amazon发表了一篇论文,披露其实现的一些技术细节。本文在此背景下,对Aurora系统的实现从整体架构、存储、事务处理三个方面进行深入探讨,并从数据库内核技术实现的角度对Aurora做了一定的推测。2017年,Amazon在SIGMOD上发表了论文《AmazonAurora:DesignConsi
【python】flash-attn安装
x66ccff
python 开发语言
这个命令:确保使用正确的CUDA12.6工具链设置必要的CUDA环境变量包含了常见的GPU架构支持利用你的128核心进行并行编译#清理之前的安装proxychains4pipuninstall-yflash-attn#获取CUDA路径CUDA_PATH=$(dirname$(dirname$(whichnvcc)))#使用proxychains4安装CUDA_HOME=$CUDA_PATH\TOR
Node.js 完全教程:从入门到精通
web15117360223
面试 学习路线 阿里巴巴 node.js
Node.js完全教程:从入门到精通Node.js是一个基于ChromeV8引擎的JavaScript运行环境,允许开发者在服务器端使用JavaScript。它的非阻塞I/O和事件驱动架构使得Node.js非常适合于构建高性能的网络应用。本文将详细介绍Node.js的安装、基本语法、模块系统、异步编程、Express框架、数据库操作等内容,帮助你从入门到精通Node.js。1.Node.js简介N
探索企业级智能对话:ChatGPT + 企业数据 (C) 开源项目推荐
芮川琨Jack
探索企业级智能对话:ChatGPT+企业数据(C#)开源项目推荐azure-search-openai-demo-csharpAsampleappfortheRetrieval-AugmentedGenerationpatternrunninginAzure,usingAzureCognitiveSearchforretrievalandAzureOpenAIlargelanguagemodels
推荐开源项目:Contoso Data Generator
侯深业Dorian
推荐开源项目:ContosoDataGeneratorContoso-Data-GeneratorCustomContosodatabasegeneratorandready-to-useContososampledatabasesforSQLServer项目地址:https://gitcode.com/gh_mirrors/co/Contoso-Data-Generator1、项目介绍Conto
Webpack Module Federation实战:微前端架构
糖糖老师436
前端 webpack 架构
WebpackModuleFederation是Webpack5引入的一个特性,它支持微前端架构,允许不同的Web应用之间共享模块,而不需要运行时的容器或服务器端的构建步骤。项目结构假设有两个独立的React应用:app1和app2,其中app2将通过ModuleFederation作为远程模块被app1消费。app1:主应用app2:作为远程微应用app2配置首先,在app2中配置Webpack
Mamba架构深度解析:基于状态空间模型的线性复杂度序列处理实战指南(附代码+案例
燃灯工作室
Ai 架构
一、技术原理:状态空间模型与线性复杂度数学推导1.传统状态空间模型(SSM)连续系统描述:h′(t)=Ah(t)+Bx(t)y(t)=Ch(t)+Dx(t)\begin{aligned}h'(t)&=Ah(t)+Bx(t)\\y(t)&=Ch(t)+Dx(t)\end{aligned}h′(t)y(t)=Ah(t)+Bx(t)=Ch(t)+Dx(t)离散化后(零阶保持法):hk=Aˉhk−1+Bˉ
深入了解React Fiber:React的新架构
糖糖老师436
react.js 架构 前端
ReactFiber是React16引入的一种全新的协调引擎,旨在解决旧版React在性能和灵活性方面的不足。本文将深入探讨ReactFiber的工作原理、其背后的设计理念,以及它如何提升应用的性能。我们会用通俗易懂的语言,帮助你轻松理解这个复杂的概念,并通过代码示例来进一步解释。1.什么是ReactFiber?ReactFiber是对React核心算法的一次彻底重构。旧版的React使用的是“S
DeepSeek:突破闭源封锁,引领大模型新时代
fanstinmsl
算法 语言模型
近年来,人工智能领域蓬勃发展,大模型作为其中的核心技术,其重要性不言而喻。然而,大模型的训练和部署往往面临着硬件依赖性强、成本高昂、效率低下等挑战。DeepSeek的出现,为解决这些问题提供了全新的思路和方案。DeepSeek的核心优势:1.减少硬件依赖:DeepSeek通过算法优化和架构创新,降低了对高性能硬件的依赖,使得大模型的训练和部署可以在更广泛的硬件平台上进行,极大地降低了应用门槛。**
简单搞定数仓搭建:数仓规范
白枭
大数据开发 数仓 hive
1.数据模型架构规范1.1数据层次的划分ODS:OperationalDataStore,操作数据层,在结构上其与源系统的增量或者全量数据基本保持一致。它相当于DW数据的一个数据准备区,同时又承担着基础数据的记录以及历史变化。其主要作用是把基础数据引入到DMP。CDM:CommonDataModel,公共维度模型层,又细分为DWD和DWS。它的主要作用是完成数据加工与整合,建立一致性的维度,构建可
mysql主从数据同步
林鹤霄
mysql主从数据同步
配置mysql5.5主从服务器(转)
教程开始:一、安装MySQL
说明:在两台MySQL服务器192.168.21.169和192.168.21.168上分别进行如下操作,安装MySQL 5.5.22
二、配置MySQL主服务器(192.168.21.169)mysql -uroot -p &nb
oracle学习笔记
caoyong
oracle
1、ORACLE的安装
a>、ORACLE的版本
8i,9i : i是internet
10g,11g : grid (网格)
12c : cloud (云计算)
b>、10g不支持win7
&
数据库,SQL零基础入门
天子之骄
sql 数据库入门 基本术语
数据库,SQL零基础入门
做网站肯定离不开数据库,本人之前没怎么具体接触SQL,这几天起早贪黑得各种入门,恶补脑洞。一些具体的知识点,可以让小白不再迷茫的术语,拿来与大家分享。
数据库,永久数据的一个或多个大型结构化集合,通常与更新和查询数据的软件相关
pom.xml
一炮送你回车库
pom.xml
1、一级元素dependencies是可以被子项目继承的
2、一级元素dependencyManagement是定义该项目群里jar包版本号的,通常和一级元素properties一起使用,既然有继承,也肯定有一级元素modules来定义子元素
3、父项目里的一级元素<modules>
<module>lcas-admin-war</module>
<
sql查地区省市县
3213213333332132
sql mysql
-- db_yhm_city
SELECT * FROM db_yhm_city WHERE class_parent_id = 1 -- 海南 class_id = 9 港、奥、台 class_id = 33、34、35
SELECT * FROM db_yhm_city WHERE class_parent_id =169
SELECT d1.cla
关于监听器那些让人头疼的事
宝剑锋梅花香
画图板 监听器 鼠标监听器
本人初学JAVA,对于界面开发我只能说有点蛋疼,用JAVA来做界面的话确实需要一定的耐心(不使用插件,就算使用插件的话也没好多少)既然Java提供了界面开发,老师又要求做,只能硬着头皮上啦。但是监听器还真是个难懂的地方,我是上了几次课才略微搞懂了些。
JAVA的遍历MAP
darkranger
map
Java Map遍历方式的选择
1. 阐述
对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率。那么实际情况如何呢?
为了解遍历性能的真实差距,包括在遍历ke
POJ 2312 Battle City 优先多列+bfs
aijuans
搜索
来源:http://poj.org/problem?id=2312
题意:题目背景就是小时候玩的坦克大战,求从起点到终点最少需要多少步。已知S和R是不能走得,E是空的,可以走,B是砖,只有打掉后才可以通过。
思路:很容易看出来这是一道广搜的题目,但是因为走E和走B所需要的时间不一样,因此不能用普通的队列存点。因为对于走B来说,要先打掉砖才能通过,所以我们可以理解为走B需要两步,而走E是指需要1
Hibernate与Jpa的关系,终于弄懂
avords
java Hibernate 数据库 jpa
我知道Jpa是一种规范,而Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实现而不必改动太多代码。
在play中定义Model时,使用的是jpa的annotations,比如javax.persistence.Entity, Table, Column, OneToMany
酸爽的console.log
bee1314
console
在前端的开发中,console.log那是开发必备啊,简直直观。通过写小函数,组合大功能。更容易测试。但是在打版本时,就要删除console.log,打完版本进入开发状态又要添加,真不够爽。重复劳动太多。所以可以做些简单地封装,方便开发和上线。
/**
* log.js hufeng
* The safe wrapper for `console.xxx` functions
*
哈佛教授:穷人和过于忙碌的人有一个共同思维特质
bijian1013
时间管理 励志人生 穷人 过于忙碌
一个跨学科团队今年完成了一项对资源稀缺状况下人的思维方式的研究,结论是:穷人和过于忙碌的人有一个共同思维特质,即注意力被稀缺资源过分占据,引起认知和判断力的全面下降。这项研究是心理学、行为经济学和政策研究学者协作的典范。
这个研究源于穆来纳森对自己拖延症的憎恨。他7岁从印度移民美国,很快就如鱼得水,哈佛毕业
other operate
征客丶
OS osx
一、Mac Finder 设置排序方式,预览栏 在显示-》查看显示选项中
二、有时预览显示时,卡死在那,有可能是一些临时文件夹被删除了,如:/private/tmp[有待验证]
--------------------------------------------------------------------
若有其他凝问或文中有错误,请及时向我指出,
我好及时改正,同时也让我们一
【Scala五】分析Spark源代码总结的Scala语法三
bit1129
scala
1. If语句作为表达式
val properties = if (jobIdToActiveJob.contains(jobId)) {
jobIdToActiveJob(stage.jobId).properties
} else {
// this stage will be assigned to "default" po
ZooKeeper 入门
BlueSkator
中间件 zk
ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题。网上对ZK的应用场景也有不少介绍,本文将结合作者身边的项目例子,系统地对ZK的应用场景进行一个分门归类的介绍。
值得注意的是,ZK并非天生就是为这些应用场景设计的,都是后来众多开发者根据其框架的特性,利
MySQL取得当前时间的函数是什么 格式化日期的函数是什么
BreakingBad
mysql Date
取得当前时间用 now() 就行。
在数据库中格式化时间 用DATE_FORMA T(date, format) .
根据格式串format 格式化日期或日期和时间值date,返回结果串。
可用DATE_FORMAT( ) 来格式化DATE 或DATETIME 值,以便得到所希望的格式。根据format字符串格式化date值:
%S, %s 两位数字形式的秒( 00,01,
读《研磨设计模式》-代码笔记-组合模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.List;
abstract class Component {
public abstract void printStruct(Str
4_JAVA+Oracle面试题(有答案)
chenke
oracle
基础测试题
卷面上不能出现任何的涂写文字,所有的答案要求写在答题纸上,考卷不得带走。
选择题
1、 What will happen when you attempt to compile and run the following code? (3)
public class Static {
static {
int x = 5; // 在static内有效
}
st
新一代工作流系统设计目标
comsci
工作 算法 脚本
用户只需要给工作流系统制定若干个需求,流程系统根据需求,并结合事先输入的组织机构和权限结构,调用若干算法,在流程展示版面上面显示出系统自动生成的流程图,然后由用户根据实际情况对该流程图进行微调,直到满意为止,流程在运行过程中,系统和用户可以根据情况对流程进行实时的调整,包括拓扑结构的调整,权限的调整,内置脚本的调整。。。。。
在这个设计中,最难的地方是系统根据什么来生成流
oracle 行链接与行迁移
daizj
oracle 行迁移
表里的一行对于一个数据块太大的情况有二种(一行在一个数据块里放不下)
第一种情况:
INSERT的时候,INSERT时候行的大小就超一个块的大小。Oracle把这行的数据存储在一连串的数据块里(Oracle Stores the data for the row in a chain of data blocks),这种情况称为行链接(Row Chain),一般不可避免(除非使用更大的数据
[JShop]开源电子商务系统jshop的系统缓存实现
dinguangx
jshop 电子商务
前言
jeeshop中通过SystemManager管理了大量的缓存数据,来提升系统的性能,但这些缓存数据全部都是存放于内存中的,无法满足特定场景的数据更新(如集群环境)。JShop对jeeshop的缓存机制进行了扩展,提供CacheProvider来辅助SystemManager管理这些缓存数据,通过CacheProvider,可以把缓存存放在内存,ehcache,redis,memcache
初三全学年难记忆单词
dcj3sjt126com
english word
several 儿子;若干
shelf 架子
knowledge 知识;学问
librarian 图书管理员
abroad 到国外,在国外
surf 冲浪
wave 浪;波浪
twice 两次;两倍
describe 描写;叙述
especially 特别;尤其
attract 吸引
prize 奖品;奖赏
competition 比赛;竞争
event 大事;事件
O
sphinx实践
dcj3sjt126com
sphinx
安装参考地址:http://briansnelson.com/How_to_install_Sphinx_on_Centos_Server
yum install sphinx
如果失败的话使用下面的方式安装
wget http://sphinxsearch.com/files/sphinx-2.2.9-1.rhel6.x86_64.rpm
yum loca
JPA之JPQL(三)
frank1234
orm jpa JPQL
1 什么是JPQL
JPQL是Java Persistence Query Language的简称,可以看成是JPA中的HQL, JPQL支持各种复杂查询。
2 检索单个对象
@Test
public void querySingleObject1() {
Query query = em.createQuery("sele
Remove Duplicates from Sorted Array II
hcx2013
remove
Follow up for "Remove Duplicates":What if duplicates are allowed at most twice?
For example,Given sorted array nums = [1,1,1,2,2,3],
Your function should return length
Spring4新特性——Groovy Bean定义DSL
jinnianshilongnian
spring 4
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
CentOS安装Mysql5.5
liuxingguome
centos
CentOS下以RPM方式安装MySQL5.5
首先卸载系统自带Mysql:
yum remove mysql mysql-server mysql-libs compat-mysql51
rm -rf /var/lib/mysql
rm /etc/my.cnf
查看是否还有mysql软件:
rpm -qa|grep mysql
去http://dev.mysql.c
第14章 工具函数(下)
onestopweb
函数
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
POJ 1050
SaraWon
二维数组 子矩阵 最大和
POJ ACM第1050题的详细描述,请参照
http://acm.pku.edu.cn/JudgeOnline/problem?id=1050
题目意思:
给定包含有正负整型的二维数组,找出所有子矩阵的和的最大值。
如二维数组
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
中和最大的子矩阵是
9 2
-4 1
-1 8
且最大和是15
[5]设计模式——单例模式
tsface
java 单例 设计模式 虚拟机
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点
安全的单例模式:
/*
* @(#)Singleton.java 2014-8-1
*
* Copyright 2014 XXXX, Inc. All rights reserved.
*/
package com.fiberhome.singleton;
Java8全新打造,英语学习supertool
yangshangchuan
java superword 闭包 java8 函数式编程
superword是一个Java实现的英文单词分析软件,主要研究英语单词音近形似转化规律、前缀后缀规律、词之间的相似性规律等等。Clean code、Fluent style、Java8 feature: Lambdas, Streams and Functional-style Programming。
升学考试、工作求职、充电提高,都少不了英语的身影,英语对我们来说实在太重要