百度,有道,谷歌翻译API
API翻译
百度,有道,谷歌API翻译(只针对中英相互翻译),其他语言翻译需要对应from,to的code
百度翻译
package fills.tools.translate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import com.alibaba.fastjson.JSON; public class BaiduTranslateTools { public static void main(String[] args) throws Exception{ String en = doBdTranslate("测试一下", "zh", "en"); String zh = doBdTranslate("test", "en", "zh"); System.out.println(en); System.out.println(zh); } private static CloseableHttpClient httpClient = HttpClients.createDefault(); /** * 封装百度翻译请求参数 * @param query * @param from zh * @param to en * @return String * @throws Exception */ public static String doBdTranslate(String query,String from,String to)throws Exception{ String url = "https://fanyi.baidu.com/v2transapi"; Map<String,String> params = new HashMap<String,String>(); params.put("from",from); params.put("to",to); params.put("transtype","translang"); params.put("simple_means_flag","3"); params.put("sign",runByJs(query,"sig",getBdJs())); params.put("token","75f7eb4170c6dba7a1d84c76611205c3"); params.put("domain","common"); params.put("query",query); return bdGetResult(bdTranslate(url, params)); } /** * 封装百度翻译接口 模拟浏览器请求 * @param url * @param map * @return String * @throws Exception */ private static String bdTranslate(String url,Map<String,String> map) throws Exception{ try { HttpPost request = new HttpPost(url); request.setEntity(new UrlEncodedFormEntity(map2list(map), "UTF-8")); request.setHeader("Cookie","BIDUPSID=518EFD25B0E401331F59B9BDC8388898; BAIDUID=DA7060B673236FB3427E0D66755262B9:FG=1; PSTM=1636594736; __yjs_duid=1_57b3cd04392832a6fbd32d39e48784831636600728790; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BDUSS=phdjFZaTJRZ3lPeW1OaHg0WXFyMFgtNWZ6QXNkczh3cEd-Sn5INjg3dG9nc0poRVFBQUFBJCQAAAAAAAAAAAEAAACHLc4ceXNmd3p6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGj1mmFo9ZpheW; H_PS_PSSID=34446_35104_31254_35049_34584_34518_35245_34578_26350_35146; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1637568947; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1637569056; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; delPer=0; PSINO=2; BDRCVFR[Fc9oatPmwxn]=mk3SLVN4HKm; BA_HECTOR=8hag058g0gag8g218f1gpp7gb0r"); request.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"); request.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); request.setHeader("Host","fanyi.baidu.com"); request.setHeader("Origin","https://fanyi.baidu.com"); request.setHeader("Referer","https://fanyi.baidu.com/?aldtype=16047"); request.setHeader("X-Requested-With","XMLHttpRequest"); CloseableHttpResponse response = httpClient.execute(request); HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity, "UTF-8"); EntityUtils.consume(entity); response.getEntity().getContent().close(); response.close(); return result; } catch (Exception e) { throw e; } } /** * 处理百度翻译结果 * @param json * @return */ @SuppressWarnings({ "unchecked", "rawtypes" }) private static String bdGetResult(String json){ Map<String ,Object> result = JSON.parseObject(json, Map.class); Map res = (Map)result.get("trans_result"); List<Map> r = (List<Map>)res.get("data"); if(!r.isEmpty()){ return (r.get(0).get("dst")+"").replace(",", ""); } return null; } /** * * @param param 一个入参 * @param method 方法 * @param jsCode js 代码 * @return String */ public static String runByJs(String param,String method,String jsCode){ String res = null; try { ScriptEngine bdToken = new ScriptEngineManager().getEngineByName("js"); bdToken.eval(jsCode); Invocable inv2 = (Invocable) bdToken; res =(String)inv2.invokeFunction(method,param); } catch (Exception e) { res = null; } return res; } /** * 百度js 签名算法 * @return String */ private static String getBdJs(){ StringBuffer bd = new StringBuffer(); bd.append("var i = '320305.131321201'; "); bd.append("function n(r, o) { "); bd.append(" for (var t = 0; t < o.length - 2; t += 3) { "); bd.append(" var a = o.charAt(t + 2); "); bd.append(" a = a >= 'a' ? a.charCodeAt(0) - 87 : Number(a), "); bd.append(" a = '+' === o.charAt(t + 1) ? r >>> a: r << a, "); bd.append(" r = '+' === o.charAt(t) ? r + a & 4294967295 : r ^ a "); bd.append(" } "); bd.append(" return r "); bd.append("} "); bd.append("var sig = function e(r) { "); bd.append(" var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g); "); bd.append(" if (null === o) { "); bd.append(" var t = r.length; "); bd.append(" t > 30 && (r = '' + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr( - 10, 10)) "); bd.append(" } else { "); bd.append(" for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++)'' !== e[C] && f.push.apply(f, a(e[C].split(''))), "); bd.append(" C !== h - 1 && f.push(o[C]); "); bd.append(" var g = f.length; "); bd.append(" g > 30 && (r = f.slice(0, 10).join('') + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join('') + f.slice( - 10).join('')) "); bd.append(" } "); bd.append(" var u = void 0, "); bd.append(" l = '' + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107); "); bd.append(" u = null !== i ? i: (i = window[l] || '') || ''; "); bd.append(" for (var d = u.split('.'), m = Number(d[0]) || 0, s = Number(d[1]) || 0, S = [], c = 0, v = 0; v < r.length; v++) { "); bd.append(" var A = r.charCodeAt(v); "); bd.append(" 128 > A ? S[c++] = A: (2048 > A ? S[c++] = A >> 6 | 192 : (55296 === (64512 & A) && v + 1 < r.length && 56320 === (64512 & r.charCodeAt(v + 1)) ? (A = 65536 + ((1023 & A) << 10) + (1023 & r.charCodeAt(++v)), S[c++] = A >> 18 | 240, S[c++] = A >> 12 & 63 | 128) : S[c++] = A >> 12 | 224, S[c++] = A >> 6 & 63 | 128), S[c++] = 63 & A | 128) "); bd.append(" } "); bd.append(" for (var p = m, "); bd.append(" F = '' + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + ('' + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54)), D = '' + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(51) + ('' + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(98)) + ('' + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(102)), b = 0; b < S.length; b++) p += S[b], "); bd.append(" p = n(p, F); "); bd.append(" return p = n(p, D), "); bd.append(" p ^= s, "); bd.append(" 0 > p && (p = (2147483647 & p) + 2147483648), "); bd.append(" p %= 1e6, "); bd.append(" p.toString() + '.' + (p ^ m) "); bd.append("} "); return bd.toString(); } /** * 转换请求参数 * @param paramsMap * @return */ private static List<? extends NameValuePair> map2list(Map<String, String> paramsMap) { List<NameValuePair> listParams = new ArrayList<NameValuePair>(); Set<String> keys = paramsMap.keySet(); for (String key : keys) { listParams.add(new BasicNameValuePair(key, paramsMap.get(key))); } return listParams; } } |
运行结果
有道翻译
package fills.tools.translate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import com.alibaba.fastjson.JSON; import fills.tools.md5.MD5Util; import fills.tools.util.EncodingCheck; public class YoudaoTranslateTools { public static void main(String[] args) throws Exception{ String en = doYdTranslate("测试一下", "zh", "en"); String zh = doYdTranslate("test", "en", "zh"); System.out.println(en); System.out.println(zh); } private static CloseableHttpClient httpClient = HttpClients.createDefault(); /** * 封装有道翻译请求参数 * @param query * @param from zh * @param to en * @return String * @throws Exception */ public static String doYdTranslate(String query,String from,String to) throws Exception{ String newQuery = EncodingCheck.gbkToUtf8(query); String url = "https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"; Long time = System.currentTimeMillis(); String slat = time+""+ (long) (Math.random() * 10 + 1); //签名算法 String sign = MD5Util.md5("fanyideskweb" + newQuery + slat + "Y2FYu%TNSbMCxc3t2u^XT"); Map<String,String> params = new HashMap<String,String>(); params = new HashMap<String,String>(); params.put("i", newQuery); //params.put("from", "AUTO"); //params.put("to", "AUTO"); params.put("from", from); params.put("to", to); params.put("smartresult", "dict"); params.put("client", "fanyideskweb"); params.put("salt", slat); params.put("sign", sign); params.put("doctype", "json"); params.put("bv","e2a78ed30c66e16a857c5b6486a1d326"); params.put("lts",""+time); params.put("version", "2.1"); params.put("keyfrom", "fanyi.web"); params.put("action", "FY_BY_CLICKBUTTION"); return ydGetResult(YoudaoTranslateTools.ydTranslate(url, params)); } /** * 封装有道翻译接口 * @param url * @param map * @return * @throws Exception */ private static String ydTranslate(String url,Map<String,String> map) throws Exception{ try { HttpPost request = new HttpPost(url); request.setEntity(new UrlEncodedFormEntity(map2list(map), "UTF-8")); request.setHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); request.setHeader("Cookie","OUTFOX_SEARCH_USER_ID_NCOO=2112457812.6057248; OUTFOX_SEARCH_USER_ID=\"1568208620@10.105.137.204\"; YOUDAO_MOBILE_ACCESS_TYPE=1; JSESSIONID=aaaj85MpKF2HUbfaqhs1x; ___rl__test__cookies=1637913084476"); request.setHeader("Host","fanyi.youdao.com"); request.setHeader("Origin","https://fanyi.youdao.com"); request.setHeader("Referer","https://fanyi.youdao.com"); request.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"); request.setHeader("X-Requested-With","XMLHttpRequest"); CloseableHttpResponse response = httpClient.execute(request); HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity, "UTF-8"); EntityUtils.consume(entity); response.getEntity().getContent().close(); response.close(); return result; } catch (Exception e) { throw e; } } /** * 处理有道翻译结果 * @param json * @return */ @SuppressWarnings({ "unchecked", "rawtypes" }) private static String ydGetResult(String json){ Map<String ,Object> result = JSON.parseObject(json, Map.class); List<List<Map>> res = (List<List<Map>>)result.get("translateResult"); if(!res.isEmpty()){ return res.get(0).get(0).get("tgt")+""; } return null; } /** * 转换请求参数 * @param paramsMap * @return */ private static List<? extends NameValuePair> map2list(Map<String, String> paramsMap) { List<NameValuePair> listParams = new ArrayList<NameValuePair>(); Set<String> keys = paramsMap.keySet(); for (String key : keys) { listParams.add(new BasicNameValuePair(key, paramsMap.get(key))); } return listParams; }
} |
运行结果
谷歌翻译
谷歌翻译需要开启国外代理,网络不通
package fills.tools.translate; import java.util.List; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import com.alibaba.fastjson.JSON; public class GoogleTranslateTools { public static void main(String[] args) throws Exception{ String en = doGoogleTranslate("测试一下", "zh", "en"); String zh = doGoogleTranslate("test", "en", "zh"); System.out.println(en); System.out.println(zh); } private static CloseableHttpClient httpClient = HttpClients.createDefault(); /** * 封装Goole参数信息 * @param query * @param from zh-CN * @param to en * @return String * @throws Exception */ public static String doGoogleTranslate(String query,String from,String to)throws Exception{ String url = "https://translate.google.com.hk/translate_a/single?"; String urlParam ="client=t&sl="+from+"&tl="+to+"&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&source=btn&ssel=0&tsel=0&kc=0&tk="+getGgJs(query,getGg())+"&q="+query; return ggGetResult(googleTranslate(url+urlParam)); } /** * 封装Goole翻译请求 * @param url * @return String * @throws Exception */ private static String googleTranslate(String url) throws Exception{ try { URIBuilder uri = new URIBuilder(url); HttpGet request = new HttpGet(uri.toString()); request.setHeader("Cookie","NID=511=UKCb40FREknEZtX19ubTXHKnTj2fqh8YZePtu2eWf-ZXdPN_Rs35XiJGF_yjbW2oaSAz4XBJVYOc_2xYAYyQiD3IEoHBJqghUeumnQJdvjn95jqU71b00BtMl2mHwoNiMLYDZgCDBtqU2A5Ql6O3oVMhvGyPrY3CbSsp4kdhzmE; _ga=GA1.3.409789010.1640080107; _gid=GA1.3.27316764.1640080107"); request.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"); request.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); request.setHeader("Origin","https://translate.google.com.hk"); request.setHeader("Referer","https://translate.google.com.hk/"); request.setHeader("X-Requested-With","XMLHttpRequest"); CloseableHttpResponse response = httpClient.execute(request); HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity, "UTF-8"); EntityUtils.consume(entity); response.getEntity().getContent().close(); response.close(); return result; } catch (Exception e) { throw e; } } /** * 处理谷歌翻译结果 * @param json * @return */ @SuppressWarnings({"rawtypes", "unused" }) private static String ggGetResult(String json){ List result = JSON.parseObject(json, List.class); if(!result.isEmpty()){ return ((List)((List)result.get(0)).get(0)).get(0)+""; } return null; } /** * 加载js获取签名信息 * @param query * @param js * @return */ private static String getGgJs(String query,String js){ String res = null; try { ScriptEngine bdToken = new ScriptEngineManager().getEngineByName("js"); bdToken.eval(js); Invocable inv2 = (Invocable) bdToken; res =(String)inv2.invokeFunction("sig",query); } catch (Exception e) { res = null; } return res; }
/** * google 签名 JS * @return String */ private static String getGg(){ StringBuffer gg = new StringBuffer(); gg.append("var sig = function sig(a) { "); gg.append(" var k = ''; "); gg.append(" var b = 406644; "); gg.append(" var b1 = 3293161072; "); gg.append(" "); gg.append(" var jd = '.'; "); gg.append(" var sb = '+-a^+6'; "); gg.append(" var Zb = '+-3^+b+-f'; "); gg.append(" "); gg.append(" for (var e = [], f = 0, g = 0; g < a.length; g++) { "); gg.append(" var m = a.charCodeAt(g); "); gg.append(" 128 > m ? e[f++] = m: (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023), e[f++] = m >> 18 | 240, e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224, e[f++] = m >> 6 & 63 | 128), e[f++] = m & 63 | 128) "); gg.append(" } "); gg.append(" a = b; "); gg.append(" for (f = 0; f < e.length; f++) a += e[f], "); gg.append(" a = RL(a, sb); "); gg.append(" a = RL(a, Zb); "); gg.append(" a ^= b1 || 0; "); gg.append(" 0 > a && (a = (a & 2147483647) + 2147483648); "); gg.append(" a %= 1E6; "); gg.append(" return a.toString() + jd + (a ^ b) "); gg.append("}; "); gg.append(" "); gg.append("function RL(a, b) { "); gg.append(" var t = 'a'; "); gg.append(" var Yb = '+'; "); gg.append(" for (var c = 0; c < b.length - 2; c += 3) { "); gg.append(" var d = b.charAt(c + 2), "); gg.append(" d = d >= t ? d.charCodeAt(0) - 87 : Number(d), "); gg.append(" d = b.charAt(c + 1) == Yb ? a >>> d: a << d; "); gg.append(" a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d "); gg.append(" } "); gg.append(" return a "); gg.append("} "); return gg.toString(); } } |
运行结果
相关文章:

百度,有道,谷歌翻译API
API翻译 百度,有道,谷歌API翻译(只针对中英相互翻译),其他语言翻译需要对应from,to的code 百度翻译 package fills.tools.translate; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis…...
java-双亲委派机制
Java虚拟机(JVM)中的类加载器(Class Loader)负责将类(.class文件)加载到JVM中,以便Java程序能够使用这些类。在JVM中,类加载器被组织成一种层次结构关系,这种层次结构关系…...

【C++】set的使用
🔥个人主页: Forcible Bug Maker 🔥专栏: STL || C 目录 🌈前言🌈关于set🔥容量函数emptysize 🔥Modifiersinserteraseclear 🔥Operationsfindcountlower_bound和upper_…...
React 18【实用教程】(2024最新版)
搭建开发环境 含配置,react-developer-tools 和 Redux DevTools 下载安装 https://blog.csdn.net/weixin_41192489/article/details/138523829 JSX 语法 https://blog.csdn.net/weixin_41192489/article/details/138649165 组件 父子组件传值、兄弟组件传值、越层组…...
Perl语言入门学习指南
Perl语言(Practical Extraction and Report Language)是一种强大的脚本语言,以其灵活性和强大的文本处理能力而闻名。Perl广泛应用于系统管理、Web开发、网络编程和数据处理等领域。本文将带您入门Perl语言,介绍其基本语法、常用功…...
《Java8函数式编程》学习笔记汇总
前言 见证了java8的多层排序,为此想系统学习下java8的用法。 目录 简介Lambda表达式流高级集合类和收集器数据并行化测试、调试和重构设计和架构的原则使用Lambda表达式编写并发程序下一步改怎么办 后记...
C语言之封装,继承,多态
本文参考: c语言面向对象之封装c面向对象之继承Linux源码分析之多态 一、封装 封装的本质就是将数据和方法集中到一个对象中,c或者java使用的是class来实现。c语言中可以使用struct来实现同样的功能。比如下面的程序: struct student {int…...

GO内存分配详解
文章目录 GO内存分配详解一. 物理内存(Physical Memory)和虚拟内存(Virtual Memory)二. 内存分配器三. TCMalloc线程内存(thread memory)页堆(page heap)四. Go内存分配器mspanmcachemcentralmheap五. 对象分配流程六. Go虚拟内存ArenaGO内存分配详解 这篇文章中我将抽丝剥茧,…...

每日Attention学习12——Exterior Contextual-Relation Module
模块出处 [ISBI 22] [link] [code] Duplex Contextual Relation Network for Polyp Segmentation 模块名称 Exterior Contextual-Relation Module (ECRM) 模块作用 内存型特征增强模块 模块结构 模块思想 原文表述:在临床环境中,不同样本之间存在息肉…...

为什么现在电销公司这么难?
现在电销公司普遍底薪就4000,员工要干的工作: 1、自己办卡、现在大部分人对隐私方面比较在意,一般电销公司还都需要自己身份证实名办卡,打几天又封号,有的人甚至被移动拉黑 2、天天打电话,遇见的什么人都…...
每天一个数据分析题(四百四十二)- 标签与指标
数据分析师在工作中常常会涉及两个概念:标签、指标,下面关于标签与指标的描述正确的是()? A. 指标通常可以量化,但是标签一般是不可量化的 B. 标签是用来定义、评价和描述特定事物的一种标准或方式 C. 指…...
[论文笔记] pai-megatron-patch Qwen2-72B/7B/1.5B 长文本探路
[论文笔记] Pai-megatron-patch cpu-offload 改到 Qwen2-CSDN博客 Pai-Megatron-Patch (mcore代码) 长文本限制: 开SP之后,72B能开到16K,7B能开到32K。 但是72B开16K,或者7B开32K时,如果训练时训练样本中有长文本的话,则还是会OOM。 code: 相对于原repo加了一些代…...

【SpringCloud】微服务远程调用OpenFeign
工作原理流程图 上代码 common中添加依赖: <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency><groupId>org.spri…...

MySQL零散拾遗(四)
聚合函数 聚合函数作用于一组数据,并对一组数据返回一个值。 常见的聚合函数:SUM()、MAX()、MIN()、AVG()、COUNT() 对COUNT()聚合函数的更深一层理解 COUNT函数的作用:计算指定字段在查询结果中出现的个数(不包含NULL值&#…...

大语言模型-检索测评指标
1. MRR (Mean Reciprocal Rank)平均倒数排名: 衡量检索结果排序质量的指标。 计算方式: 对于每个查询,计算被正确检索的文档的最高排名的倒数的平均值,再对所有查询的平均值取均值。 意义: 衡量…...
Zookeeper集群中节点之间数据是如何同步的
1.首先集群启动时,会先进行领导者选举,确定哪个节点是Leader,哪些节点是Follower和Observer 2.然后Leader会和其他节点进行数据同步,采用发送快照和发送Diff日志的方式 3.集群在工作过程中,所有的写请求都会交给Lead…...

HTTPServer改进思路2(mudou库核心思想融入)
mudou网络库思想理解 Reactor与多线程 服务器构建过程中,不仅仅使用一个Reactor,而是使用多个Reactor,每个Reactor执行自己专属的任务,从而提高响应效率。 首先Reactor是一种事件驱动处理模式,其主要通过IO多路复用…...
Kubernetes Secret 详解
Kubernetes Secret 是一种用于存储和管理敏感信息的对象,如密码、OAuth 令牌和 SSH 密钥等。使用 Secret 可以避免将机密数据直接放在 Pod 规约或容器镜像中,从而增加了应用程序的安全性。 Secret 的类型 Kubernetes 支持多种类型的 Secret,包括: Opaque:默认的…...

docker笔记4-部署
docker笔记4-部署 一、部署nginx二、部署Tomcat三、部署ESKibana3.1 部署ES3.2 部署kibana 一、部署nginx docker search nginx #搜索nginx的最新版本docker pull nginx #这里可以指定nginx版本,如果不指定,那么就拉取最新版本latestdocker run -d --na…...

有监督学习基础
基本概念 给定输入有为(x,y),其中x表示学习特征,y表示输出,m表示输入总数,有监督学习旨在根据输入建立能够预测可能输出的模型,大致可以分为回归和分类两种,代表可能输出是无限的或…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...