环境搭建
dubbo运行插件查看 Soul源码阅读 体验dubbo代理【第三天】
执行流程
GlobalPlugin -> BodyParamPlugin [org.dromara.soul.plugin.alibaba.dubbo.param] -> BodyParamPlugin [org.dromara.soul.plugin.sofa.param] 经过这一层但是是无效的 -> AbstractSoulPlugin-> AlibabaDubboPlugin ->DubboResponsePlugin -> 结束
alibab-dubbo 代码解析
BodyParamPlugin [org.dromara.soul.plugin.alibaba.dubbo.param]
@Override
// dubbo参数解析
public Mono execute(final ServerWebExchange exchange, final SoulPluginChain chain) {
// 请求信息
final ServerHttpRequest request = exchange.getRequest();
// Soul上下文
final SoulContext soulContext = exchange.getAttribute(Constants.CONTEXT);
// 如果是Dubbo的参数进行解析
if (Objects.nonNull(soulContext) && RpcTypeEnum.DUBBO.getName().equals(soulContext.getRpcType())) {
// 获取请求类型
MediaType mediaType = request.getHeaders().getContentType();
// webflux请求
ServerRequest serverRequest = ServerRequest.create(exchange, messageReaders);
// json请求
if (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)) {
return body(exchange, serverRequest, chain);
}
// 表单请求
if (MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(mediaType)) {
return formData(exchange, serverRequest, chain);
}
// 塞入转换后的参数信息
return query(exchange, serverRequest, chain);
}
return chain.execute(exchange);
}
AlibabaDubboPlugin
@Override
// 执行dubbo调用
protected Mono doExecute(final ServerWebExchange exchange, final SoulPluginChain chain, final SelectorData selector, final RuleData rule) {
// 获取之前解析的参数信息
String body = exchange.getAttribute(Constants.DUBBO_PARAMS);
// Soul上下文
SoulContext soulContext = exchange.getAttribute(Constants.CONTEXT);
assert soulContext != null;
// 获取元数据
MetaData metaData = exchange.getAttribute(Constants.META_DATA);
// 元数据有问题,返回错误信息
if (!checkMetaData(metaData)) {
assert metaData != null;
log.error(" path is :{}, meta data have error.... {}", soulContext.getPath(), metaData.toString());
exchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
Object error = SoulResultWrap.error(SoulResultEnum.META_DATA_ERROR.getCode(), SoulResultEnum.META_DATA_ERROR.getMsg(), null);
return WebFluxResultUtils.result(exchange, error);
}
// 参数类型和参数无数据,返回错误信息
if (StringUtils.isNoneBlank(metaData.getParameterTypes()) && StringUtils.isBlank(body)) {
exchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
Object error = SoulResultWrap.error(SoulResultEnum.DUBBO_HAVE_BODY_PARAM.getCode(), SoulResultEnum.DUBBO_HAVE_BODY_PARAM.getMsg(), null);
return WebFluxResultUtils.result(exchange, error);
}
// 执行请求
Object result = alibabaDubboProxyService.genericInvoker(body, metaData);
if (Objects.nonNull(result)) {
exchange.getAttributes().put(Constants.DUBBO_RPC_RESULT, result);
} else {
exchange.getAttributes().put(Constants.DUBBO_RPC_RESULT, Constants.DUBBO_RPC_RESULT_EMPTY);
}
exchange.getAttributes().put(Constants.CLIENT_RESPONSE_RESULT_TYPE, ResultEnum.SUCCESS.getName());
return chain.execute(exchange);
}
AlibabaDubboPlugin使用AlibabaDubboProxyService执行泛化调用
/**
* Generic invoker object.
*
* @param body the body
* @param metaData the meta data
* @return the object
* @throws SoulException the soul exception
*/
// 根据参数信息和元数据信息执行泛化调用
public Object genericInvoker(final String body, final MetaData metaData) throws SoulException {
// 从缓存中获取引用?
ReferenceConfig reference = ApplicationConfigCache.getInstance().get(metaData.getPath());
// 如果缓存中无值,进行初始化
if (Objects.isNull(reference) || StringUtils.isEmpty(reference.getInterface())) {
ApplicationConfigCache.getInstance().invalidate(metaData.getPath());
reference = ApplicationConfigCache.getInstance().initRef(metaData);
}
// 获取泛化调用服务
GenericService genericService = reference.get();
try {
Pair pair;
if (ParamCheckUtils.dubboBodyIsEmpty(body)) {
pair = new ImmutablePair<>(new String[]{}, new Object[]{});
} else {
// 解析值
pair = dubboParamResolveService.buildParameter(body, metaData.getParameterTypes());
}
// 泛化调用
return genericService.$invoke(metaData.getMethodName(), pair.getLeft(), pair.getRight());
} catch (GenericException e) {
log.error("dubbo invoker have exception", e);
throw new SoulException(e.getExceptionMessage());
}
}
DubboResponsePlugin 返回dubbo调用返回的值
/**
* Process the Web request and (optionally) delegate to the next
* {@code WebFilter} through the given {@link SoulPluginChain}.
*
* @param exchange the current server exchange
* @param chain provides a way to delegate to the next filter
* @return {@code Mono} to indicate when request processing is complete
*/
@Override
// 封装返回数据
public Mono execute(final ServerWebExchange exchange, final SoulPluginChain chain) {
return chain.execute(exchange).then(Mono.defer(() -> {
final Object result = exchange.getAttribute(Constants.DUBBO_RPC_RESULT);
try {
if (Objects.isNull(result)) {
Object error = SoulResultWrap.error(SoulResultEnum.SERVICE_RESULT_ERROR.getCode(), SoulResultEnum.SERVICE_RESULT_ERROR.getMsg(), null);
return WebFluxResultUtils.result(exchange, error);
}
Object success = SoulResultWrap.success(SoulResultEnum.SUCCESS.getCode(), SoulResultEnum.SUCCESS.getMsg(), JsonUtils.removeClass(result));
return WebFluxResultUtils.result(exchange, success);
} catch (SoulException e) {
return Mono.empty();
}
}));
}
apache dubbo
pom依赖
org.dromara
soul-spring-boot-starter-plugin-apache-dubbo
${project.version}
org.apache.dubbo
dubbo
2.7.5
org.apache.curator
curator-client
4.0.1
org.apache.curator
curator-framework
4.0.1
org.apache.curator
curator-recipes
4.0.1
调用流程
GlobalPlugin -> BodyParamPlugin[org.dromara.soul.plugin.apache.dubbo.param] -> BodyParamPlugin[org.dromara.soul.plugin.sofa.param] -> AbstractSoulPlugin -> ApacheDubboPlugin -> DubboResponsePlugin
ApacheDubboProxyService 主要泛化调用不同
/**
* Generic invoker object.
*
* @param body the body
* @param metaData the meta data
* @param exchange the exchange
* @return the object
* @throws SoulException the soul exception
*/
// apacheDubbo泛化调用
public Mono genericInvoker(final String body, final MetaData metaData, final ServerWebExchange exchange) throws SoulException {
// issue(https://github.com/dromara/soul/issues/471), add dubbo tag route
// 获取路由信息
String dubboTagRouteFromHttpHeaders = exchange.getRequest().getHeaders().getFirst(Constants.DUBBO_TAG_ROUTE);
if (StringUtils.isNotBlank(dubboTagRouteFromHttpHeaders)) {
RpcContext.getContext().setAttachment(CommonConstants.TAG_KEY, dubboTagRouteFromHttpHeaders);
}
// 引用获取
ReferenceConfig reference = ApplicationConfigCache.getInstance().get(metaData.getPath());
if (Objects.isNull(reference) || StringUtils.isEmpty(reference.getInterface())) {
ApplicationConfigCache.getInstance().invalidate(metaData.getPath());
reference = ApplicationConfigCache.getInstance().initRef(metaData);
}
// 泛化服务
GenericService genericService = reference.get();
Pair pair;
// 参数封装
if (ParamCheckUtils.dubboBodyIsEmpty(body)) {
pair = new ImmutablePair<>(new String[]{}, new Object[]{});
} else {
pair = dubboParamResolveService.buildParameter(body, metaData.getParameterTypes());
}
//异步调用
CompletableFuture future = genericService.$invokeAsync(metaData.getMethodName(), pair.getLeft(), pair.getRight());
// 异步返回调用链
return Mono.fromFuture(future.thenApply(ret -> {
if (Objects.isNull(ret)) {
ret = Constants.DUBBO_RPC_RESULT_EMPTY;
}
exchange.getAttributes().put(Constants.DUBBO_RPC_RESULT, ret);
exchange.getAttributes().put(Constants.CLIENT_RESPONSE_RESULT_TYPE, ResultEnum.SUCCESS.getName());
return ret;
})).onErrorMap(exception -> exception instanceof GenericException ? new SoulException(((GenericException) exception).getExceptionMessage()) : new SoulException(exception));
}
你可能感兴趣的:(Soul源码阅读 alibaba-dubbo&apache-dubbo【第十六天】)
数据结构-链表【chapter1】【c语言版】
躺不平的理查德
数据结构 数据结构 链表 c语言 visual studio 开发语言
目录1链表的优势:2链表的组成:3.一般使用结构体的形式来实现链表:4.单向链表实现(创建,遍历,释放):4.1代码关键点备注:5.查找节点:5.1.按值查找节点5.2.按位置查找节点5.3查找是否存在某个值5.4.查找链表中最后一个节点5.5查找链表中倒数第k个节点6.删除节点6.1删除头节点6.2删除尾节点6.3.删除指定位置的节点6.4.删除指定值的节点6.5.释放整个链表1链表的优势:动态
windows服务器系统巡检脚本,xx系统巡检方案xxx年度xx巡检报告.doc
nell nell
XX系统巡检报告(xxx年度第x季度)系统名称:XX系统巡检日期:编写:编写日期:审核:审核日期:批准:批准日期:目录TOC\o"1-7"\h\z一、概述3二、巡检方案31数据库方面31.1数据库服务器(硬件)基本信息:31.2数据库配置41.3数据库检查内容51.4数据库检查总结62应用服务器方面62.1应用服务器(硬件)基本信息:62.2应用服务器检查内容72.3应用服务器检查总结93XX系统
蓝桥杯——Python初级入门
YAmlei
蓝桥杯——Python 蓝桥杯 python
蓝桥杯中的Python是近段时间才开设的一项比赛,网上大部门只有关于Java和C语言的题解,写这篇博客算是自己的对参与蓝桥杯Python组学习的记录和找到自己不足的方面。目录一、运算符练习二、分支练习一、运算符练习题目1003:[编程入门]密码破译要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"Ch
C语言蓝桥杯1003: [编程入门]密码破译
年*D-清仁
c语言 蓝桥杯 开发语言
要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。变量初
力扣 第1题:两数之和(Java)
曼城铁闸
java 算法
有人相爱,有人开车看海,有人力扣第一题就做不出来……第一题两数之和(万恶之源),劝退了不少小……在这里整理一下这道题的两种Java解法。题目:给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。可以按任意顺序返回答案。进阶:你可以想出一个时间
【洛谷入门赛】B4044 奇迹战神 202410 场
Igallta_813622
题解 c++ c语言 学习 笔记
闲话水桶没有闲话。题意一共有nnn个课程,对于每个课程,给出www和ddd,第xxx周的时候,如果满足(d−1)÷x(d-1)\divx(d−1)÷x的余数是000((d−1)mod x=0(d-1)\modx=0(d−1)modx=0)那这一周的星期www就要上这门课。而且:当前这一天是第一周的星期六。问你,距离这一天最近的课还有多久上课。思路首先,我们要输入。cin>>n;for(inti=
【16届蓝桥杯寒假刷题营】第1期DAY4
qystca
蓝桥杯 算法 数据结构 模拟 c++
6.高高的最大值寻找-蓝桥云课6.高高的最大值寻找问题描述高高想寻找一个最大值x。它满足:x不是2到1000的倍数。x的值大于1000,小于等于n。请你找到满足条件x的最大值,如果不存在则输出0。输入格式第一行输入一个整数n(1001≤n≤10^9),表示n的大小。输出格式输出仅一行,包含一个整数,如果能找到满足条件的x,则输出x的最大值,否则输出0。样例输入100000样例输出99991思路:暴
如何在没有 iTunes 的情况下恢复/恢复出厂设置 iPad? - 6种有效方法
iphone
在日常使用过程中,iPad可能会遇到各种问题,例如系统延迟、应用程序无响应或设备故障。在这种情况下,恢复iPad就显得尤为重要。传统上,我们习惯使用iTunes来完成这个任务,但并不是每个人都愿意或者能够使用iTunes。那么,如果没有iTunes,我们该如何恢复iPad呢?本文将详细介绍几种如何在没有iTunes的情况下恢复iPad的方法.第1部分:我们什么时候应该恢复iPad?通常情况下,如果
Bazel构建cpp项目
okiwilldoit
C++学习 c++
Bazel是一个类似于Make、Maven和Gradle的开源构建和测试工具。它使用人类可读的高级build语言。Bazel支持并针对多个平台构建输出。Bazel支持多个代码库和大量用户的大型代码库。官网:https://bazel.google.cn/about/intro?hl=zh-cnmac安装bazel第1步:在macOS上安装HomeBra安装Homebrew(只需执行一次步骤):/b
Python 魔法学院 - 第24篇:Python 解释器优化 ⭐⭐⭐
星核日记
《Python 魔法学院》 python 开发语言 pycharm windows Python 性能优化
目录引言1.Cython与PyPy1.1Cython1.1.1Cython的优势1.1.2Cython的简单示例1.1.3Cython的适用场景1.2PyPy1.2.1PyPy的优势1.2.2PyPy的简单示例1.2.3PyPy的适用场景1.3Cython与PyPy的对比2.并行计算与分布式计算2.1并行计算2.1.1multiprocessing模块2.1.2concurrent.futures
NSLog输出
Johnny Tong
Swift 开发 iOS 之旅 nslog print
OC中NSLog#ifdefDEBUG#defineNSLog(format,...)printf("\n[%s]%s[第%d行]%s\n",__TIME__,__FUNCTION__,__LINE__,[[NSStringstringWithFormat:format,##__VA_ARGS__]UTF8String]);#else#defineNSLog(format,...)#endifsw
Educoder - Java入门 - 循环结构进阶题目总结
m0_74824054
面试 学习路线 阿里巴巴 java 开发语言
第1关:for循环的进阶使用-嵌套循环(1)循环打印一颗星,循环十次;打印完十颗星之后换行;循环可以嵌套循环,循环的嵌套是指在循环里面写循环。packagestep1;publicclassForPractice1{publicstaticvoidtest(){/start/inti,j;for(i=1;i=i;j--){System.out.print("*");}System.out.prin
新版布谷直播软件源码开发搭建功能更新明细
山东布谷科技官方
直播软件开发 直播源码 直播app源码 直播软件源码
即将步入2025年也就是山东布谷科技专注直播系统开发,直播软件源码出售开发搭建等业务第9年,山东布谷科技不断更新直播软件功能,以适应当前新市场环境下的新要求。山东布谷科技始终秉承初心,做一款符合广大客户需求的直播系统软件。支持广大客户提交更多个性化需求,山东布谷科技将不同客户提供的不同需求汇合到一起,结合市场大环境要求挑选更新计划,根据当前工作安排不定期更新功能。山东布谷鸟网络科技~布谷直播-新增
9、深度学习-自学之路-损失函数、梯度下降、学习率、权重更新的理解
小宇爱
深度学习-自学之路 深度学习 学习 人工智能
由《8、深度学习-自学之路-损失函数和梯度下降程序展示》我们看到我们设计了一个程序,这个程序里面由学习率,有损失函数,有梯度下降,权重更新。一、我们先来讲一下损失函数,e_dn=(p_dn-ture)**2#损失值的计算p_dn:预测值ture:真实值e_dn:损失值我们在第7章说了,我们的预测值和真实值相差越小(也就是损失值越小),说明我们模型训练的越好。这个也是我们进行模型训练的原因。我们使用
LeetCode第22题_括号生成
@蓝莓果粒茶
算法 leetcode 算法 职场和发展 c# unity 数据结构
LeetCode第22题:括号生成题目描述数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。难度中等题目链接https://leetcode.cn/problems/generate-parentheses/示例示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()
ThinkPHP5_基础笔记
Delong-Zhang
PHP PHP ThinkPHP
ThinkPHP5_云知梦_基础第1章TP5.0安装1、TP5.0系列课程2、PHP框架?3、ThinkPHP框架4、检测TP5.0环境5、TP5.0的安装6、配置虚拟主机7、目录结构8、URL地址了解9、了解TP开发模式10、MVC模式11、MVC在TP中如何体现12、MVC的变形第2章TP5.0架构1、TP架构的概述2、URL解析3、入口文件4、应用5、模块(以前台为例)6、控制器7、操作(方
LeetCode第23题_合并K个升序链表
@蓝莓果粒茶
算法 leetcode 链表 windows 算法 c# unity 数据结构
LeetCode第23题:合并K个升序链表题目描述给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。难度困难题目链接https://leetcode.cn/problems/merge-k-sorted-lists/示例示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:
Python的秘密基地--[章节16] Python 网络编程
云端狂人
python Python专辑 python 网络 开发语言
第16章:Python网络编程在现代软件开发中,网络通信是不可或缺的部分。Python提供了强大的网络编程支持,包括socket通信、HTTP请求、WebSocket通信和爬虫技术。本章将介绍如何使用Python进行网络通信,并实现常见的网络编程任务。16.1网络编程基础16.1.1网络通信协议TCP(TransmissionControlProtocol):面向连接的可靠传输协议,适用于HTTP
java对list分页[搭配分页工具类]
想想671
java list windows
packagecn.com.yawei.hotline.jinan.assignment.common.utils;importjava.util.ArrayList;importjava.util.List;publicclassPageUtil{/***要分页的list数据*/privateListmyList;/***请求的页号,默认第1页*/privateintpageNum=1;/***
Day41(补)-【软考】2022年下半年软考软件设计师综合知识真题-计算机硬件基础知识
一个一定要撑住的学习者
# 软件设计师 java 网络 linux
文章目录2022年下半年软考软件设计师综合知识真题第1章计算机系统基础知识(6/38)-计算机硬件基础知识4/4哲学概念及收敛思维:CPU这个集合内部的元素和集合外部的元素的区分,考外部元素哲学概念及收敛思维:RISC设计的了解,集合范围抽取高频指令的范围,越高速的设计就要越简洁,CPU和网络层次都一样,考整个大集合,并非RISC特定集合的特性哲学概念及收敛思维:存储介质和周期刷新输入,考存储器的
练习题(2.10)
累加
算法 c++ 数据结构
问题描述有一个SNS被NN个用户使用,他们的编号从11到NN。在这个SNS中,两个用户可以成为朋友。友谊是双向的;如果用户X是用户Y的朋友,那么用户Y也一定是用户X的朋友。目前,在SNS上有MM对朋友关系,第ii对由用户AiAi和用户BiBi组成。确定可以执行以下操作的最大次数:操作:选择三个用户X、Y和Z,使得X和Y是朋友,Y和Z是朋友,但X和Z不是朋友。让X和Z成为朋友。约束条件2≤N≤2×1
力扣(leetcode)第455题分发饼干(Python)
十八子是李
Python题集 leetcode python 算法 开发语言
455.分发饼干题目链接:455.分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果s[j]>=g[i],我们可以将这个饼干j分配给孩子i,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例1:输入:g=[
动态规划LeetCode-1049.最后一块石头的重量Ⅱ
欧了111
动态规划 动态规划 leetcode 算法 c语言 01背包
有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x=dp[target];那么相撞之后剩下的最小石头重量就是(sum-dp[target])-dp[target]。动规五部曲(dp含义、递推公式、初始化、遍历顺序、打印数组)dp含义:dp[j]表示容量为j的背包,所背的物品价值最大
真正通俗易懂的Langchain入门学习(六)
caridle
智能体 langchain 学习
五、下一步行动:从学习者到创造者的跃迁1.启动你的第一个项目(3天实践计划)行动指南:graphTDA[第1天:选择方向]-->B{{三选一}}B-->C[客服助手]B-->D[论文分析]B-->E[数据助手]C/D/E-->F[第2天:搭建基础]F-->G[第3天:添加特色功能]具体任务:基础版必做:运行课堂示例代码替换为自己的数据(如上传公司产品手册/个人学习笔记)特色功能选装:给客服助手添加
【AI论文】使用大型推理模型进行竞技编程
东临碣石82
人工智能
摘要:我们的研究表明,将强化学习应用于大型语言模型(LLMs)能显著提升复杂编码和推理任务的性能。此外,我们将两个通用推理模型——OpenAI的o1模型和o3模型的一个早期检查点——与一个特定领域的系统o1-ioi进行了比较。o1-ioi采用了为参加2024年国际信息学奥林匹克竞赛(IOI)而手工设计的推理策略。我们使用o1-ioi实时参加了2024年IOI竞赛,并凭借手工制定的测试时策略取得了第
【AI系列】从零开始学习大模型GPT (2)- Build a Large Language Model (From Scratch)
Tasfa
AI人工智能教程 人工智能 学习 gpt
前序文章【AI系列】从零开始学习大模型GPT(1)-BuildaLargeLanguageModel(FromScratch)BuildaLargeLanguageModel背景第1章:理解大型语言模型第2章:处理文本数据第3章:编码Attention机制什么是Attention机制?Attention机制的基本原理数学表示应用总结为什么要使用注意力机制如何实现?简单注意力机制带训练权重的注意力机
海南大学--学习资料--网络应用开发java web(胡祝华)-第3次作业解析(学长整理)
创创大帝(水印很浅-下载的文档)
海南大学--学习资料--PHP HTML java web 前端 java html
海南大学–学习资料–网络应用开发javaweb(胡祝华)-第3次作业解析(学长整理)海南大学–学习资料–网络应用开发javaweb(胡祝华)-第3次作业解析(学长整理)海南大学–学习资料–网络应用开发javaweb(胡祝华)-第3次作业解析(学长整理)表单验证:1.在表单的源码中head部分用script导入了script/regcheckdata.js文件2.当点击提交按钮时,onSubmit=
Java 集合框架:ArrayList 的介绍、使用、原理与源码解析
栗筝i
栗筝i 的 Java 技术栈(付费部分) # Java 基础 - 专栏 栗筝i 的 Java 技术栈 Java 基础 Java 集合 ArrayList Java
大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第013篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同
[数据库]MySql系统架构
一曲长歌,一剑天涯
数据库
参考资料[1]MySQL体系架构简介[2]MySQL整体架构一览目录1.路径2.文件3.配置4.逻辑系统架构4.1应用层4.2MySQL服务层4.3存储引擎层5.SQLSELECT语句执行过程第1步:Connectors:客户端/服务端通信协议第2步:查询缓存第3步:Analyzer分析器第4步:Optimizer优化器:查询优化第5步:查询执行引擎Actuator第6步返回结果给客户端1.路径路
DeepSeek 指导手册从入门到精通
长久的梦
DeepSeek DeepSeek 技术架构解析 DeepSeek 代码重构应用 DeepSeek 提示词模板 DeepSeek 联网搜索技巧 DeepSeek 未来趋势 DeepSeek 开源的意义 DeepSeek 性能优化方法
目录正文第⼀章:准备篇(30分钟上手)❄️1.1三分钟创建你的AI伙伴❄️1.2认识你的AI控制台第⼆章:基础对话篇(像交朋友⼀样学交流)❄️2.1有效提问的五个⻩⾦法则❄️2.2新⼿必学的10个魔法指令第三章:效率⻜跃篇(⽂件处理与复杂任务)❄️3.1五分钟学会⽂档分析❄️3.2让AI帮你写代码第四章:场景实战篇⸺解决真实世界问题❄️4.1学术论⽂全流程辅助(从开题到答辩)❄️阶段⼀:开题攻坚❄
html页面js获取参数值
0624chenhong
html
1.js获取参数值js
function GetQueryString(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = windo
MongoDB 在多线程高并发下的问题
BigCat2013
mongodb DB 高并发 重复数据
最近项目用到 MongoDB , 主要是一些读取数据及改状态位的操作. 因为是结合了最近流行的 Storm进行大数据的分析处理,并将分析结果插入Vertica数据库,所以在多线程高并发的情境下, 会发现 Vertica 数据库中有部分重复的数据. 这到底是什么原因导致的呢?笔者开始也是一筹莫 展,重复去看 MongoDB 的 API , 终于有了新发现 :
com.mongodb.DB 这个类有
c++ 用类模版实现链表(c++语言程序设计第四版示例代码)
CrazyMizzz
数据结构 C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T>
class Node
{
private:
Node<T> * next;
public:
T data;
最近情况
麦田的设计者
感慨 考试 生活
在五月黄梅天的岁月里,一年两次的软考又要开始了。到目前为止,我已经考了多达三次的软考,最后的结果就是通过了初级考试(程序员)。人啊,就是不满足,考了初级就希望考中级,于是,这学期我就报考了中级,明天就要考试。感觉机会不大,期待奇迹发生吧。这个学期忙于练车,写项目,反正最后是一团糟。后天还要考试科目二。这个星期真的是很艰难的一周,希望能快点度过。
linux系统中用pkill踢出在线登录用户
被触发
linux
由于linux服务器允许多用户登录,公司很多人知道密码,工作造成一定的障碍所以需要有时踢出指定的用户
1/#who 查出当前有那些终端登录(用 w 命令更详细)
# who
root pts/0 2010-10-28 09:36 (192
仿QQ聊天第二版
肆无忌惮_
qq
在第一版之上的改进内容:
第一版链接:
http://479001499.iteye.com/admin/blogs/2100893
用map存起来号码对应的聊天窗口对象,解决私聊的时候所有消息发到一个窗口的问题.
增加ViewInfo类,这个是信息预览的窗口,如果是自己的信息,则可以进行编辑.
信息修改后上传至服务器再告诉所有用户,自己的窗口
java读取配置文件
知了ing
1,java读取.properties配置文件
InputStream in;
try {
in = test.class.getClassLoader().getResourceAsStream("config/ipnetOracle.properties");//配置文件的路径
Properties p = new Properties()
__attribute__ 你知多少?
矮蛋蛋
C++ gcc
原文地址:
http://www.cnblogs.com/astwish/p/3460618.html
GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。
__attribute__ 书写特征是:
jsoup使用笔记
alleni123
java 爬虫 JSoup
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.3</version>
</dependency>
2014/08/28
今天遇到这种形式,
JAVA中的集合 Collectio 和Map的简单使用及方法
百合不是茶
list map set
List ,set ,map的使用方法和区别
java容器类类库的用途是保存对象,并将其分为两个概念:
Collection集合:一个独立的序列,这些序列都服从一条或多条规则;List必须按顺序保存元素 ,set不能重复元素;Queue按照排队规则来确定对象产生的顺序(通常与他们被插入的
杀LINUX的JOB进程
bijian1013
linux unix
今天发现数据库一个JOB一直在执行,都执行了好几个小时还在执行,所以想办法给删除掉
系统环境:
ORACLE 10G
Linux操作系统
操作步骤如下:
第一步.查询出来那个job在运行,找个对应的SID字段
select * from dba_jobs_running--找到job对应的sid
&n
Spring AOP详解
bijian1013
java spring AOP
最近项目中遇到了以下几点需求,仔细思考之后,觉得采用AOP来解决。一方面是为了以更加灵活的方式来解决问题,另一方面是借此机会深入学习Spring AOP相关的内容。例如,以下需求不用AOP肯定也能解决,至于是否牵强附会,仁者见仁智者见智。
1.对部分函数的调用进行日志记录,用于观察特定问题在运行过程中的函数调用
[Gson六]Gson类型适配器(TypeAdapter)
bit1129
Adapter
TypeAdapter的使用动机
Gson在序列化和反序列化时,默认情况下,是按照POJO类的字段属性名和JSON串键进行一一映射匹配,然后把JSON串的键对应的值转换成POJO相同字段对应的值,反之亦然,在这个过程中有一个JSON串Key对应的Value和对象之间如何转换(序列化/反序列化)的问题。
以Date为例,在序列化和反序列化时,Gson默认使用java.
【spark八十七】给定Driver Program, 如何判断哪些代码在Driver运行,哪些代码在Worker上执行
bit1129
driver
Driver Program是用户编写的提交给Spark集群执行的application,它包含两部分
作为驱动: Driver与Master、Worker协作完成application进程的启动、DAG划分、计算任务封装、计算任务分发到各个计算节点(Worker)、计算资源的分配等。
计算逻辑本身,当计算任务在Worker执行时,执行计算逻辑完成application的计算任务
nginx 经验总结
ronin47
nginx 总结
深感nginx的强大,只学了皮毛,把学下的记录。
获取Header 信息,一般是以$http_XX(XX是小写)
获取body,通过接口,再展开,根据K取V
获取uri,以$arg_XX
&n
轩辕互动-1.求三个整数中第二大的数2.整型数组的平衡点
bylijinnan
数组
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ExoWeb {
public static void main(String[] args) {
ExoWeb ew=new ExoWeb();
System.out.pri
Netty源码学习-Java-NIO-Reactor
bylijinnan
java 多线程 netty
Netty里面采用了NIO-based Reactor Pattern
了解这个模式对学习Netty非常有帮助
参考以下两篇文章:
http://jeewanthad.blogspot.com/2013/02/reactor-pattern-explained-part-1.html
http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf
AOP通俗理解
cngolon
spring AOP
1.我所知道的aop 初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等。一下子让你不知所措,心想着:怪不得很多人都和 我说aop多难多难。当我看进去以后,我才发现:它就是一些java基础上的朴实无华的应用,包括ioc,包括许许多多这样的名词,都是万变不离其宗而 已。 2.为什么用aop&nb
cursor variable 实例
ctrain
variable
create or replace procedure proc_test01
as
type emp_row is record(
empno emp.empno%type,
ename emp.ename%type,
job emp.job%type,
mgr emp.mgr%type,
hiberdate emp.hiredate%type,
sal emp.sal%t
shell报bash: service: command not found解决方法
daizj
linux shell service jps
今天在执行一个脚本时,本来是想在脚本中启动hdfs和hive等程序,可以在执行到service hive-server start等启动服务的命令时会报错,最终解决方法记录一下:
脚本报错如下:
./olap_quick_intall.sh: line 57: service: command not found
./olap_quick_intall.sh: line 59
40个迹象表明你还是PHP菜鸟
dcj3sjt126com
设计模式 PHP 正则表达式 oop
你是PHP菜鸟,如果你:1. 不会利用如phpDoc 这样的工具来恰当地注释你的代码2. 对优秀的集成开发环境如Zend Studio 或Eclipse PDT 视而不见3. 从未用过任何形式的版本控制系统,如Subclipse4. 不采用某种编码与命名标准 ,以及通用约定,不能在项目开发周期里贯彻落实5. 不使用统一开发方式6. 不转换(或)也不验证某些输入或SQL查询串(译注:参考PHP相关函
Android逐帧动画的实现
dcj3sjt126com
android
一、代码实现:
private ImageView iv;
private AnimationDrawable ad;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout
java远程调用linux的命令或者脚本
eksliang
linux ganymed-ssh2
转载请出自出处:
http://eksliang.iteye.com/blog/2105862
Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar)
使用步骤如下:
1.导包
官网下载:
http://www.ganymed.ethz.ch/ssh2/
ma
adb端口被占用问题
gqdy365
adb
最近重新安装的电脑,配置了新环境,老是出现:
adb server is out of date. killing...
ADB server didn't ACK
* failed to start daemon *
百度了一下,说是端口被占用,我开个eclipse,然后打开cmd,就提示这个,很烦人。
一个比较彻底的解决办法就是修改
ASP.NET使用FileUpload上传文件
hvt
.net C# hovertree asp.net webform
前台代码:
<asp:FileUpload ID="fuKeleyi" runat="server" />
<asp:Button ID="BtnUp" runat="server" onclick="BtnUp_Click" Text="上 传" />
代码之谜(四)- 浮点数(从惊讶到思考)
justjavac
浮点数 精度 代码之谜 IEEE
在『代码之谜』系列的前几篇文章中,很多次出现了浮点数。 浮点数在很多编程语言中被称为简单数据类型,其实,浮点数比起那些复杂数据类型(比如字符串)来说, 一点都不简单。
单单是说明 IEEE浮点数 就可以写一本书了,我将用几篇博文来简单的说说我所理解的浮点数,算是抛砖引玉吧。 一次面试
记得多年前我招聘 Java 程序员时的一次关于浮点数、二分法、编码的面试, 多年以后,他已经称为了一名很出色的
数据结构随记_1
lx.asymmetric
数据结构 笔记
第一章
1.数据结构包括数据的
逻辑结构、数据的物理/存储结构和数据的逻辑关系这三个方面的内容。 2.数据的存储结构可用四种基本的存储方法表示,它们分别是
顺序存储、链式存储 、索引存储 和 散列存储。 3.数据运算最常用的有五种,分别是
查找/检索、排序、插入、删除、修改。 4.算法主要有以下五个特性:
输入、输出、可行性、确定性和有穷性。 5.算法分析的
linux的会话和进程组
网络接口
linux
会话: 一个或多个进程组。起于用户登录,终止于用户退出。此期间所有进程都属于这个会话期。会话首进程:调用setsid创建会话的进程1.规定组长进程不能调用setsid,因为调用setsid后,调用进程会成为新的进程组的组长进程.如何保证? 先调用fork,然后终止父进程,此时由于子进程的进程组ID为父进程的进程组ID,而子进程的ID是重新分配的,所以保证子进程不会是进程组长,从而子进程可以调用se
二维数组 元素的连续求解
1140566087
二维数组 ACM
import java.util.HashMap;
public class Title {
public static void main(String[] args){
f();
}
// 二位数组的应用
//12、二维数组中,哪一行或哪一列的连续存放的0的个数最多,是几个0。注意,是“连续”。
public static void f(){
也谈什么时候Java比C++快
windshome
java C++
刚打开iteye就看到这个标题“Java什么时候比C++快”,觉得很好笑。
你要比,就比同等水平的基础上的相比,笨蛋写得C代码和C++代码,去和高手写的Java代码比效率,有什么意义呢?
我是写密码算法的,深刻知道算法C和C++实现和Java实现之间的效率差,甚至也比对过C代码和汇编代码的效率差,计算机是个死的东西,再怎么优化,Java也就是和C