欢迎大家进群,一起探讨学习

微信公众号,每天给大家提供技术干货

博主技术笔记

博主网站地址1

博主网站地址2

博主开源微服架构前后端分离技术博客项目源码地址,欢迎各位star

java对接谷歌翻译

第一种方式

HttpClientUtil

package com.yoostar.translate.v1.util;import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
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 java.io.IOException;
import java.net.Proxy;
import java.net.URI;
import java.util.Map;/*** @author bright*/
public class HttpClientUtil {public static final int SO_TIMEOUT_MS = 8000;public static final int CONNECTION_TIMEOUT_MS = 1000;public static String doGet(String url, Map<String, String> param) {CloseableHttpClient httpclient = HttpClients.createDefault();String resultString = "";CloseableHttpResponse response = null;try {URIBuilder builder = new URIBuilder(url);if (param != null) {for (String key : param.keySet()) {builder.addParameter(key, (String) param.get(key));}}URI uri = builder.build();HttpGet httpGet = new HttpGet(uri);response = httpclient.execute(httpGet);if (response.getStatusLine().getStatusCode() != 200) {} else {resultString = EntityUtils.toString(response.getEntity(), "UTF-8");}} catch (Exception e) {e.printStackTrace();} finally {try {if (response != null) {response.close();}httpclient.close();} catch (IOException e) {e.printStackTrace();}}return resultString;}public static String doGet(String url, Map<String, String> param, Proxy proxy) throws Exception {CloseableHttpClient httpclient = HttpClients.createDefault();String resultString = "";CloseableHttpResponse response = null;try {URIBuilder builder = new URIBuilder(url);if (param != null) {for (String key : param.keySet()) {builder.addParameter(key, (String) param.get(key));}}URI uri = builder.build();HttpGet httpGet = new HttpGet(uri);httpGet.setConfig(buildRequestConfig(proxy));response = httpclient.execute(httpGet);if (response.getStatusLine().getStatusCode() == 200) {resultString = EntityUtils.toString(response.getEntity(), "UTF-8");}} catch (Exception e) {throw e;} finally {try {if (response != null) {response.close();}httpclient.close();} catch (IOException e) {e.printStackTrace();}}return resultString;}public static String doGetWithProxy(String url, Proxy proxy) throws Exception {return doGet(url, null, proxy);}public static String doGet(String url) {return doGet(url, null);}public static RequestConfig buildRequestConfig(Proxy proxy) {String address = proxy.address().toString();String[] addressArr = address.replace("/", "").split(":");String ip = addressArr[0].trim();String host = addressArr[1].trim();if ((proxy != null) && (!(StringUtils.isBlank(ip))) && (!(StringUtils.isBlank(host)))) {HttpHost httpHost = new HttpHost(ip, Integer.parseInt(host));RequestConfig requestConfig = RequestConfig.custom().setProxy(httpHost).setSocketTimeout(SO_TIMEOUT_MS).setConnectTimeout(CONNECTION_TIMEOUT_MS).build();return requestConfig;}RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(SO_TIMEOUT_MS).setConnectTimeout(CONNECTION_TIMEOUT_MS).build();return requestConfig;}
}

RegularUtil

package com.yoostar.translate.v1.util;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @description 正则工具类* @author: bright* @create: 2020-09-14 14:47**/
public class RegularUtil {public static String extractByStartAndEnd(String str, String startStr, String endStr) {String regEx = startStr + ".*?" + endStr;String group = findMatchString(str, regEx);String trim = group.replace(startStr, "").replace(endStr, "").trim();return trim(trim);}public static String findMatchString(String str, String regEx) {try {// 编译正则表达式Pattern pattern = Pattern.compile(regEx);// 忽略大小写的写法Matcher matcher = pattern.matcher(str);// 字符串是否与正则表达式相匹配return findFristGroup(matcher);} catch (Exception e) {e.printStackTrace();}return null;}private static String findFristGroup(Matcher matcher) {matcher.find();return matcher.group(0);}/*** 去除字符串中所包含的空格(包括:空格(全角,半角)、制表符、换页符等)** @param s* @return*/public static String removeAllBlank(String s) {String result = "";if (null != s && !"".equals(s)) {result = s.replaceAll("[ *| *| *|//s*]*", "");}return result;}/*** 去除字符串中头部和尾部所包含的空格(包括:空格(全角,半角)、制表符、换页符等)** @param s* @return*/public static String trim(String s) {String result = "";if (null != s && !"".equals(s)) {result = s.replaceAll("^[ *| *| *|//s*]*", "").replaceAll("[ *| *| *|//s*]*$", "");}return result;}
}

Browser

package com.yoostar.translate.v1;import com.yoostar.translate.v1.util.HttpClientUtil;
import lombok.Data;import java.io.Serializable;
import java.net.InetSocketAddress;
import java.net.Proxy;/*** @author bright*/
@Data
public class Browser implements Serializable {public Proxy proxy;public String url;public void setProxy(String ip, Integer port) {this.proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ip, port.intValue()));}public String executeGet()throws Exception {String result;if (this.proxy != null) {result = HttpClientUtil.doGetWithProxy(this.url, this.proxy);} else {result = HttpClientUtil.doGet(this.url);}return result;}
}

GoogleApi

package com.yoostar.translate.v1;import com.alibaba.fastjson.JSONArray;
import com.yoostar.translate.v1.util.RegularUtil;
import org.apache.commons.lang3.StringUtils;import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URLEncoder;/*** @author bright*/
public class GoogleApi {private static final String PATH = "/gettk.js";static ScriptEngine engine = null;private com.yoostar.translate.v1.Browser browser = null;static {ScriptEngineManager maneger = new ScriptEngineManager();engine = maneger.getEngineByName("javascript");FileInputStream fileInputStream = null;Reader scriptReader = null;try {scriptReader = new InputStreamReader(GoogleApi.class.getResourceAsStream(PATH), "utf-8");engine.eval(scriptReader);} catch (Exception e) {e.printStackTrace();} finally {if (fileInputStream != null) {try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}if (scriptReader != null) {try {scriptReader.close();} catch (IOException e) {e.printStackTrace();}}}}public GoogleApi() {this.browser = new com.yoostar.translate.v1.Browser();}public GoogleApi(String ip, Integer port) {this.browser = new com.yoostar.translate.v1.Browser();this.browser.setProxy(ip, port);}public String getTKK() throws Exception {browser.setUrl("https://translate.google.cn/");try {String result = browser.executeGet();if (StringUtils.isNotBlank(result)) {if (result.indexOf("tkk") > -1) {String matchString = RegularUtil.findMatchString(result, "tkk:.*?',");String tkk = matchString.substring(5, matchString.length() - 2);return tkk;}}} catch (Exception e) {throw new RuntimeException("获取 tkk 出错");}return null;}public static String getTK(String word, String tkk) {String result = null;try {if (engine instanceof Invocable) {Invocable invocable = (Invocable) engine;result = (String) invocable.invokeFunction("tk", new Object[]{word, tkk});}} catch (Exception e) {throw new RuntimeException("获取 tk 出错");}return result;}public String translate(String word, String from, String to) throws Exception {if (StringUtils.isBlank(word)) {return null;}String tkk = getTKK();if (StringUtils.isBlank(tkk)) {throw new RuntimeException("无法获取 tkk");}String tk = getTK(word, tkk);try {word = URLEncoder.encode(word, "UTF-8");} catch (Exception e) {e.printStackTrace();}StringBuffer buffer = new StringBuffer("https://translate.google.cn/translate_a/single?client=t");if (StringUtils.isBlank(from)) {from = "auto";}buffer.append("&sl=" + from);buffer.append("&tl=" + to);buffer.append("&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&kc=0");buffer.append("&tk=" + tk);buffer.append("&q=" + word);browser.setUrl(buffer.toString());try {String result = browser.executeGet();JSONArray array = (JSONArray) JSONArray.parse(result);JSONArray rArray = array.getJSONArray(0);StringBuffer rBuffer = new StringBuffer();for (int i = 0; i < rArray.size(); i++) {String r = rArray.getJSONArray(i).getString(0);if (StringUtils.isNotBlank(r)) {rBuffer.append(r);}}return rBuffer.toString();} catch (Exception e) {throw new RuntimeException("结果集解析出错");}}/*** 自动检测源语言** @param word 要翻译的词* @param to   翻译的目标语言, 参考谷歌接口* @return* @throws Exception*/public String translate(String word, String to) throws Exception {return translate(word, null, to);}
}

gettk.js 请把这个文件放resources目录下

var b = function (a, b) {for (var d = 0; d < b.length - 2; d += 3) {var c = b.charAt(d + 2),c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c),c = "+" == b.charAt(d + 1) ? a >>> c : a << c;a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c}return a
}var tk =  function (a,TKK) {for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) {var c = a.charCodeAt(f);128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128)}a = h;for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6");a = b(a, "+-3^+b+-f");a ^= Number(e[1]) || 0;0 > a && (a = (a & 2147483647) + 2147483648);a %= 1E6;return a.toString() + "." + (a ^ h)
}

第二种方式比较简单很多 (推荐)

GoogleApi

package com.yoostar.translate.v2;import com.alibaba.fastjson.JSONArray;
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 java.io.IOException;
import java.nio.charset.Charset;
import java.util.*;/*** Description:** @author: bright* @date:Created in 2020/11/5 9:04*/
public class GoogleApi {/*** 地址*/private static final String PATH = "https://translate.googleapis.com/translate_a/single";private static final String CLIENT = "gtx";/*** "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)* AppleWebKit/537.36 (KHTML, like Gecko)* Chrome/60.0.3112.113 Safari/537.36";*/private static final String USER_AGENT = "Mozilla/5.0";private static final Map<String, String> LANGUAGE_MAP = new HashMap();private static GoogleApi GOOGLEAPI = null;/*** 获取单例** @return*/public static GoogleApi getInstance() {if (null == GOOGLEAPI) {GOOGLEAPI = new GoogleApi();GOOGLEAPI.init();}return GOOGLEAPI;}/*** 初始化语言类*/private void init() {LANGUAGE_MAP.put("auto", "Automatic");LANGUAGE_MAP.put("af", "Afrikaans");LANGUAGE_MAP.put("sq", "Albanian");LANGUAGE_MAP.put("am", "Amharic");LANGUAGE_MAP.put("ar", "Arabic");LANGUAGE_MAP.put("hy", "Armenian");LANGUAGE_MAP.put("az", "Azerbaijani");LANGUAGE_MAP.put("eu", "Basque");LANGUAGE_MAP.put("be", "Belarusian");LANGUAGE_MAP.put("bn", "Bengali");LANGUAGE_MAP.put("bs", "Bosnian");LANGUAGE_MAP.put("bg", "Bulgarian");LANGUAGE_MAP.put("ca", "Catalan");LANGUAGE_MAP.put("ceb", "Cebuano");LANGUAGE_MAP.put("ny", "Chichewa");LANGUAGE_MAP.put("zh_cn", "Chinese Simplified");LANGUAGE_MAP.put("zh_tw", "Chinese Traditional");LANGUAGE_MAP.put("co", "Corsican");LANGUAGE_MAP.put("hr", "Croatian");LANGUAGE_MAP.put("cs", "Czech");LANGUAGE_MAP.put("da", "Danish");LANGUAGE_MAP.put("nl", "Dutch");LANGUAGE_MAP.put("en", "English");LANGUAGE_MAP.put("eo", "Esperanto");LANGUAGE_MAP.put("et", "Estonian");LANGUAGE_MAP.put("tl", "Filipino");LANGUAGE_MAP.put("fi", "Finnish");LANGUAGE_MAP.put("fr", "French");LANGUAGE_MAP.put("fy", "Frisian");LANGUAGE_MAP.put("gl", "Galician");LANGUAGE_MAP.put("ka", "Georgian");LANGUAGE_MAP.put("de", "German");LANGUAGE_MAP.put("el", "Greek");LANGUAGE_MAP.put("gu", "Gujarati");LANGUAGE_MAP.put("ht", "Haitian Creole");LANGUAGE_MAP.put("ha", "Hausa");LANGUAGE_MAP.put("haw", "Hawaiian");LANGUAGE_MAP.put("iw", "Hebrew");LANGUAGE_MAP.put("hi", "Hindi");LANGUAGE_MAP.put("hmn", "Hmong");LANGUAGE_MAP.put("hu", "Hungarian");LANGUAGE_MAP.put("is", "Icelandic");LANGUAGE_MAP.put("ig", "Igbo");LANGUAGE_MAP.put("id", "Indonesian");LANGUAGE_MAP.put("ga", "Irish");LANGUAGE_MAP.put("it", "Italian");LANGUAGE_MAP.put("ja", "Japanese");LANGUAGE_MAP.put("jw", "Javanese");LANGUAGE_MAP.put("kn", "Kannada");LANGUAGE_MAP.put("kk", "Kazakh");LANGUAGE_MAP.put("km", "Khmer");LANGUAGE_MAP.put("ko", "Korean");LANGUAGE_MAP.put("ku", "Kurdish (Kurmanji)");LANGUAGE_MAP.put("ky", "Kyrgyz");LANGUAGE_MAP.put("lo", "Lao");LANGUAGE_MAP.put("la", "Latin");LANGUAGE_MAP.put("lv", "Latvian");LANGUAGE_MAP.put("lt", "Lithuanian");LANGUAGE_MAP.put("lb", "Luxembourgish");LANGUAGE_MAP.put("mk", "Macedonian");LANGUAGE_MAP.put("mg", "Malagasy");LANGUAGE_MAP.put("ms", "Malay");LANGUAGE_MAP.put("ml", "Malayalam");LANGUAGE_MAP.put("mt", "Maltese");LANGUAGE_MAP.put("mi", "Maori");LANGUAGE_MAP.put("mr", "Marathi");LANGUAGE_MAP.put("mn", "Mongolian");LANGUAGE_MAP.put("my", "Myanmar (Burmese)");LANGUAGE_MAP.put("ne", "Nepali");LANGUAGE_MAP.put("no", "Norwegian");LANGUAGE_MAP.put("ps", "Pashto");LANGUAGE_MAP.put("fa", "Persian");LANGUAGE_MAP.put("pl", "Polish");LANGUAGE_MAP.put("pt", "Portuguese");LANGUAGE_MAP.put("ma", "Punjabi");LANGUAGE_MAP.put("ro", "Romanian");LANGUAGE_MAP.put("ru", "Russian");LANGUAGE_MAP.put("sm", "Samoan");LANGUAGE_MAP.put("gd", "Scots Gaelic");LANGUAGE_MAP.put("sr", "Serbian");LANGUAGE_MAP.put("st", "Sesotho");LANGUAGE_MAP.put("sn", "Shona");LANGUAGE_MAP.put("sd", "Sindhi");LANGUAGE_MAP.put("si", "Sinhala");LANGUAGE_MAP.put("sk", "Slovak");LANGUAGE_MAP.put("sl", "Slovenian");LANGUAGE_MAP.put("so", "Somali");LANGUAGE_MAP.put("es", "Spanish");LANGUAGE_MAP.put("su", "Sundanese");LANGUAGE_MAP.put("sw", "Swahili");LANGUAGE_MAP.put("sv", "Swedish");LANGUAGE_MAP.put("tg", "Tajik");LANGUAGE_MAP.put("ta", "Tamil");LANGUAGE_MAP.put("te", "Telugu");LANGUAGE_MAP.put("th", "Thai");LANGUAGE_MAP.put("tr", "Turkish");LANGUAGE_MAP.put("uk", "Ukrainian");LANGUAGE_MAP.put("ur", "Urdu");LANGUAGE_MAP.put("uz", "Uzbek");LANGUAGE_MAP.put("vi", "Vietnamese");LANGUAGE_MAP.put("cy", "Welsh");LANGUAGE_MAP.put("xh", "Xhosa");LANGUAGE_MAP.put("yi", "Yiddish");LANGUAGE_MAP.put("yo", "Yoruba");LANGUAGE_MAP.put("zu", "Zulu");}/*** 判断语言是否支持** @param language* @return*/public boolean isSupport(String language) {if (null == LANGUAGE_MAP.get(language)) {return false;}return true;}/*** 获取 语言代码 ISO 639-1 code** @param desiredLang 语言* @return 如果返回null则标示不支持*/public String getCode(String desiredLang) {if (null != LANGUAGE_MAP.get(desiredLang)) {return desiredLang;}String tmp = desiredLang.toLowerCase();for (Map.Entry<String, String> enter : LANGUAGE_MAP.entrySet()) {if (enter.getValue().equals(tmp)) {return enter.getKey();}}return null;}/*** 翻译文本** @param text       文本内容* @param sourceLang 文本所属语言。如果不知道,可以使用auto* @param targetLang 目标语言。必须是明确的有效的目标语言* @return* @throws Exception*/public String translateText(String text, String sourceLang, String targetLang) throws Exception {String retStr = "";if (!(isSupport(sourceLang) || isSupport(targetLang))) {throw new Exception("不支持的语言类型");}List<NameValuePair> nvp = new ArrayList();nvp.add(new BasicNameValuePair("client", CLIENT));nvp.add(new BasicNameValuePair("sl", sourceLang));nvp.add(new BasicNameValuePair("tl", targetLang));nvp.add(new BasicNameValuePair("dt", "t"));nvp.add(new BasicNameValuePair("q", text));// String finalPath=PATH// +"?client="+CLIENT+"&sl="+sourceLang+"&tl="+targetLang+"&dt=t&q="+ text ;String resp = postHttp(PATH, nvp);if (null == resp) {throw new Exception("网络异常");}// System.out.println( "==>返回内容:" + resp);JSONArray jsonObject = JSONArray.parseArray(resp);for (Iterator<Object> it = jsonObject.getJSONArray(0).iterator(); it.hasNext(); ) {JSONArray a = (JSONArray) it.next();retStr += a.getString(0);}return retStr;}/*** @param url 请求地址* @param nvp 参数列表* @return*/private String postHttp(String url, List<NameValuePair> nvp) {String responseStr = null;CloseableHttpClient httpclient = HttpClients.createDefault();HttpPost httpPost = new HttpPost(url);// 重要!!必须设置 http 头,否则返回为乱码httpPost.setHeader("User-Agent", USER_AGENT);CloseableHttpResponse response2 = null;try {// 重要!! 指定编码,对中文进行编码httpPost.setEntity(new UrlEncodedFormEntity(nvp, Charset.forName("UTF-8")));try {response2 = httpclient.execute(httpPost);} catch (IOException e) {e.printStackTrace();}HttpEntity entity2 = response2.getEntity();responseStr = EntityUtils.toString(entity2);EntityUtils.consume(entity2);} catch (IOException e) {e.printStackTrace();} finally {if (null != response2) {try {response2.close();} catch (IOException e) {e.printStackTrace();}}if (null != httpclient) {try {httpclient.close();} catch (IOException e) {e.printStackTrace();}}}return responseStr;}
}

测试

GoogleApi.getInstance().translateText("hello I am liu", "en", "en")

java整合谷歌翻译相关推荐

  1. Java 破解谷歌翻译api,可以实现程序自动化翻译文章

    1  原理:查看谷歌翻译网站,输入需要翻译的文字,选择语言得到翻译后的文字,发送异步请求参数返回结果.java使用httpclient发送请求,实现使用代码翻译文章的功能. 2  下载代码后,测试入口 ...

  2. java调用谷歌翻译接口_Java 调用 google 翻译

    1.Java代码 public class Translator { public String translate(String langFrom, String langTo, String wo ...

  3. java使用谷歌api翻译读写Excel

    因为公司做的系统是全球都会使用到,所以我们每个版本可能都会更新一些新的多语言. 有的语言是有专业的人员翻译好过来的,但是还有的语言需要自己这边来进行翻译. 所以下面写了一个读写Excel翻译供大家参考 ...

  4. JAVA API1.8中文版 谷歌翻译 最准确最全的翻译版本!蓝奏下载

    JAVA API1.8中文版 谷歌翻译 最准确最全的翻译版本! 蓝奏云链接: https://wwa.lanzous.com/iqjdMni9ycb 辛苦点赞,谢谢

  5. 为支持两个语言版本,我基于谷歌翻译API写了一款自动翻译的 webpack 插件

    大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  6. spring boot 整合 谷歌guava的EventBus 实现单机版的消息发布订阅

    spring boot 整合 谷歌guava的EventBus 实现单机版的消息发布订阅 大型分布式系统,直接用mq解耦,那么单机系统怎么办,可以考虑用EventBus 用EventBus的好处也是异 ...

  7. 谷歌翻译 onebox 升级

    谷歌翻译 onebox 升级 谷歌翻译 onebox 升级 2007年2月26日 下午 10:49:00 发表者:Google(谷歌)中国产品部 节前,Google(谷歌)网页搜索翻译 onebox ...

  8. 谷歌翻译接口使用(android为例)

    对于android来说,很多翻译接口要收费的.但是翻译还是有很多网页版的,因此爬虫便成为一种方式.谷歌翻译中国版不需要翻墙,谷歌翻译中有一个接口可以得到翻译后的json. 例子: https://tr ...

  9. Mozilla 正在火狐中集成谷歌翻译;内存产能增长减缓,基本告别降价

    (点击上方蓝字,快速关注我们) 转自:IThome.开源中国.solidot.cnBeta.腾讯科技等 0.翻译功能不好用,Mozilla 正在 Firefox 中集成谷歌翻译 你是否知道 Firef ...

最新文章

  1. vim的简单介绍与使用
  2. mysql 函数返回表格_mysql 数据分析如何实现日报、周报、月报和年报?
  3. java串口通信DataRecive_串口通信之DataReceive事件触发时机
  4. 【Google Play】正式版上架流程 ( 创建版本 | 设置国家地区 | 发布正式版 )
  5. 一些界面库比较以及如何选择界面库
  6. u-boot移植重要问题说明
  7. java 学习笔记2022.1.26
  8. 手动实现SPring中的AOP(2)
  9. 输出等边三角形php,php打印三角星星方法实列
  10. 长沙.NET社区之光
  11. (转)CocoaPods:管理Objective-c 程序中各种第三方开源库关联
  12. leetcode —— 面试题36. 二叉搜索树与双向链表
  13. Excel Cookbook by Eric
  14. 运营商iptv服务器,电信运营商IPTV业务发展趋势浅析
  15. 北斗卫星导航系统基础篇之(二)
  16. 【微信】微信授权获取openid
  17. pytorch 提取权重_获取Pytorch中间某一层权重或者特征
  18. 【BP靶场portswigger-服务端6】信息泄露漏洞-5个实验(全)
  19. spark web ui中的skipped的含义
  20. 人力资源管理案例-左右为难的经理

热门文章

  1. Oracle 体系结构(26)—— 查询用户权限
  2. 编译安装python3.6
  3. EDIUS中怎么实现卡拉OK字幕的制作
  4. ubuntu box_将您的Ubuntu Box转换成卡拉OK机
  5. 久等了!Docker容器常用命令
  6. 推荐系统_(一)算法详解
  7. 双数组Trie的一种实现
  8. Codeforces 891E. Lust 生成函数
  9. 用java实现课程表_Java实现 LeetCode 207 课程表
  10. KafkaConsumer源码翻译(中英对照)