Chromium 使用安全 DNS功能源码分析c++
一、选项页安全dns选项如下图:
二、那么如何自定义安全dns功能呢?
1、先看前端部分代码调用
shared.rollup.jsclass PrivacyPageBrowserProxyImpl {.................................................................getSecureDnsResolverList() {return sendWithPromise("getSecureDnsResolverList") //获取dns列表}getSecureDnsSetting() {return sendWithPromise("getSecureDnsSetting") }isValidConfig(entry) {return sendWithPromise("isValidConfig", entry) //检测dns是否正确}probeConfig(entry) {return sendWithPromise("probeConfig", entry)}static getInstance() {return instance$g || (instance$g = new PrivacyPageBrowserProxyImpl)}static setInstance(obj) {instance$g = obj}
}
2、看c++代码对应的注册函数
chrome\browser\ui\webui\settings\settings_secure_dns_handler.cc
void SecureDnsHandler::RegisterMessages() {web_ui()->RegisterMessageCallback("getSecureDnsResolverList",base::BindRepeating(&SecureDnsHandler::HandleGetSecureDnsResolverList,base::Unretained(this)));web_ui()->RegisterMessageCallback("getSecureDnsSetting",base::BindRepeating(&SecureDnsHandler::HandleGetSecureDnsSetting,base::Unretained(this)));web_ui()->RegisterMessageCallback("isValidConfig",base::BindRepeating(&SecureDnsHandler::HandleIsValidConfig,base::Unretained(this)));web_ui()->RegisterMessageCallback("probeConfig", base::BindRepeating(&SecureDnsHandler::HandleProbeConfig,base::Unretained(this)));web_ui()->RegisterMessageCallback("recordUserDropdownInteraction",base::BindRepeating(&SecureDnsHandler::HandleRecordUserDropdownInteraction,base::Unretained(this)));
}1、先看 前端"getSecureDnsResolverList "dns列表对应c+++获取函数
base::Value::List SecureDnsHandler::GetSecureDnsResolverList() {base::Value::List resolvers;// Add a custom option to the front of the listbase::Value::Dict custom;custom.Set("name", l10n_util::GetStringUTF8(IDS_SETTINGS_CUSTOM));custom.Set("value", std::string()); // Empty value means custom.custom.Set("policy", std::string());resolvers.Append(std::move(custom));//providers_ 是dns数据列表来源,定义参考下面介绍for (const auto* entry : providers_) {net::DnsOverHttpsConfig doh_config({entry->doh_server_config});base::Value::Dict dict;dict.Set("name", entry->ui_name);dict.Set("value", doh_config.ToString());dict.Set("policy", entry->privacy_policy);resolvers.Append(std::move(dict));}// Randomize the order of the resolvers, but keep custom in first place.base::RandomShuffle(std::next(resolvers.begin()), resolvers.end());return resolvers;
}2、重点看providers_函数 ,其赋值和定义看代码:chrome\browser\ui\webui\settings\settings_secure_dns_handler.hstatic net::DohProviderEntry::List GetFilteredProviders();net::DohProviderEntry::List providers_ = GetFilteredProviders();std::unique_ptr<chrome_browser_net::DnsProbeRunner> runner_;chrome_browser_net::DnsProbeRunner::NetworkContextGetternetwork_context_getter_ =base::BindRepeating(&SecureDnsHandler::GetNetworkContext,base::Unretained(this));// static
net::DohProviderEntry::List SecureDnsHandler::GetFilteredProviders() {return secure_dns::ProvidersForCountry(secure_dns::SelectEnabledProviders(net::DohProviderEntry::GetList()),country_codes::GetCurrentCountryID());
}providers_ 通过GetFilteredProviders()获取列表3、最后看列表定义net::DohProviderEntry::GetList()
net\dns\public\doh_provider_entry.cc
const DohProviderEntry::List& DohProviderEntry::GetList() {// See /net/docs/adding_doh_providers.md for instructions on modifying this// DoH provider list.//// The provider names in these entries should be kept in sync with the// DohProviderId histogram suffix list in// tools/metrics/histograms/metadata/histogram_suffixes_list.xml.static const base::NoDestructor<DohProviderEntry::List> providers{{new DohProviderEntry("AlekBergNl",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderAlekBergNl, base::FEATURE_ENABLED_BY_DEFAULT),DohProviderIdForHistogram::kAlekBergNl,/*ip_strs=*/{}, /*dns_over_tls_hostnames=*/{},"https://dnsnl.alekberg.net/dns-query{?dns}",/*ui_name=*/"alekberg.net (NL)",/*privacy_policy=*/"https://alekberg.net/privacy",/*display_globally=*/false,/*display_countries=*/{"NL"}, LoggingLevel::kNormal),new DohProviderEntry("CleanBrowsingAdult",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderCleanBrowsingAdult, base::FEATURE_ENABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"185.228.168.10", "185.228.169.11", "2a0d:2a00:1::1","2a0d:2a00:2::1"},/*dns_over_tls_hostnames=*/{"adult-filter-dns.cleanbrowsing.org"},"https://doh.cleanbrowsing.org/doh/adult-filter{?dns}",/*ui_name=*/"", /*privacy_policy=*/"",/*display_globally=*/false, /*display_countries=*/{},LoggingLevel::kNormal),new DohProviderEntry("CleanBrowsingFamily",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderCleanBrowsingFamily, base::FEATURE_ENABLED_BY_DEFAULT),DohProviderIdForHistogram::kCleanBrowsingFamily,{"185.228.168.168", "185.228.169.168","2a0d:2a00:1::", "2a0d:2a00:2::"},/*dns_over_tls_hostnames=*/{"family-filter-dns.cleanbrowsing.org"},"https://doh.cleanbrowsing.org/doh/family-filter{?dns}",/*ui_name=*/"CleanBrowsing (Family Filter)",/*privacy_policy=*/"https://cleanbrowsing.org/privacy",/*display_globally=*/true, /*display_countries=*/{},LoggingLevel::kNormal),new DohProviderEntry("CleanBrowsingSecure",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderCleanBrowsingSecure, base::FEATURE_ENABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"185.228.168.9", "185.228.169.9", "2a0d:2a00:1::2","2a0d:2a00:2::2"},/*dns_over_tls_hostnames=*/{"security-filter-dns.cleanbrowsing.org"},"https://doh.cleanbrowsing.org/doh/security-filter{?dns}",/*ui_name=*/"", /*privacy_policy=*/"", /*display_globally=*/false,/*display_countries=*/{}, LoggingLevel::kNormal),new DohProviderEntry("Cloudflare",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderCloudflare, base::FEATURE_ENABLED_BY_DEFAULT),DohProviderIdForHistogram::kCloudflare,{"1.1.1.1", "1.0.0.1", "2606:4700:4700::1111","2606:4700:4700::1001"},/*dns_over_tls_hostnames=*/{"one.one.one.one", "1dot1dot1dot1.cloudflare-dns.com"},"https://chrome.cloudflare-dns.com/dns-query",/*ui_name=*/"Cloudflare (1.1.1.1)","https://developers.cloudflare.com/1.1.1.1/privacy/"/*privacy_policy=*/"public-dns-resolver/",/*display_globally=*/true, /*display_countries=*/{},LoggingLevel::kExtra),new DohProviderEntry("Comcast",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderComcast, base::FEATURE_ENABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"75.75.75.75", "75.75.76.76", "2001:558:feed::1","2001:558:feed::2"},/*dns_over_tls_hostnames=*/{"dot.xfinity.com"},"https://doh.xfinity.com/dns-query{?dns}", /*ui_name=*/"",/*privacy_policy*/ "", /*display_globally=*/false,/*display_countries=*/{}, LoggingLevel::kExtra),new DohProviderEntry("Cox",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderCox, base::FEATURE_DISABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"68.105.28.11", "68.105.28.12", "2001:578:3f::30"},/*dns_over_tls_hostnames=*/{"dot.cox.net"},"https://doh.cox.net/dns-query",/*ui_name=*/"", /*privacy_policy=*/"",/*display_globally=*/false, /*display_countries=*/{},LoggingLevel::kNormal),new DohProviderEntry("Cznic",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderCznic, base::FEATURE_ENABLED_BY_DEFAULT),DohProviderIdForHistogram::kCznic,{"185.43.135.1", "193.17.47.1", "2001:148f:fffe::1","2001:148f:ffff::1"},/*dns_over_tls_hostnames=*/{"odvr.nic.cz"}, "https://odvr.nic.cz/doh",/*ui_name=*/"CZ.NIC ODVR",/*privacy_policy=*/"https://www.nic.cz/odvr/",/*display_globally=*/false, /*display_countries=*/{"CZ"},LoggingLevel::kNormal),new DohProviderEntry("Dnssb",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderDnssb, base::FEATURE_ENABLED_BY_DEFAULT),DohProviderIdForHistogram::kDnsSb,{"185.222.222.222", "45.11.45.11", "2a09::", "2a11::"},/*dns_over_tls_hostnames=*/{"dns.sb"},"https://doh.dns.sb/dns-query{?dns}", /*ui_name=*/"DNS.SB",/*privacy_policy=*/"https://dns.sb/privacy/",/*display_globally=*/false, /*display_countries=*/{"EE", "DE"},LoggingLevel::kNormal),new DohProviderEntry("Google",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderGoogle, base::FEATURE_ENABLED_BY_DEFAULT),DohProviderIdForHistogram::kGoogle,{"8.8.8.8", "8.8.4.4", "2001:4860:4860::8888","2001:4860:4860::8844"},/*dns_over_tls_hostnames=*/{"dns.google", "dns.google.com", "8888.google"},"https://dns.google/dns-query{?dns}",/*ui_name=*/"Google (Public DNS)","https://developers.google.com/speed/public-dns/"/*privacy_policy=*/"privacy",/*display_globally=*/true, /*display_countries=*/{},LoggingLevel::kExtra),new DohProviderEntry("GoogleDns64",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderGoogleDns64, base::FEATURE_ENABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"2001:4860:4860::64", "2001:4860:4860::6464"},/*dns_over_tls_hostnames=*/{"dns64.dns.google"},"https://dns64.dns.google/dns-query{?dns}",/*ui_name=*/"", /*privacy_policy=*/"",/*display_globally=*/false,/*display_countries=*/{}, LoggingLevel::kNormal),new DohProviderEntry("Iij",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderIij, base::FEATURE_ENABLED_BY_DEFAULT),DohProviderIdForHistogram::kIij, /*ip_strs=*/{},/*dns_over_tls_hostnames=*/{}, "https://public.dns.iij.jp/dns-query",/*ui_name=*/"IIJ (Public DNS)",/*privacy_policy=*/"https://public.dns.iij.jp/",/*display_globally=*/false, /*display_countries=*/{"JP"},LoggingLevel::kNormal),new DohProviderEntry("NextDns",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderNextDns, base::FEATURE_ENABLED_BY_DEFAULT),DohProviderIdForHistogram::kNextDns, /*ip_strs=*/{},/*dns_over_tls_hostnames=*/{}, "https://chromium.dns.nextdns.io",/*ui_name=*/"NextDNS",/*privacy_policy=*/"https://nextdns.io/privacy",/*display_globally=*/false, /*display_countries=*/{"US"},LoggingLevel::kNormal),new DohProviderEntry("OpenDNS",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderOpenDNS, base::FEATURE_ENABLED_BY_DEFAULT),DohProviderIdForHistogram::kOpenDns,{"208.67.222.222", "208.67.220.220", "2620:119:35::35","2620:119:53::53"},/*dns_over_tls_hostnames=*/{},"https://doh.opendns.com/dns-query{?dns}", /*ui_name=*/"OpenDNS","https://www.cisco.com/c/en/us/about/legal/"/*privacy_policy=*/"privacy-full.html",/*display_globally=*/true, /*display_countries=*/{},LoggingLevel::kNormal),new DohProviderEntry("OpenDNSFamily",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderOpenDNSFamily, base::FEATURE_ENABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"208.67.222.123", "208.67.220.123", "2620:119:35::123","2620:119:53::123"},/*dns_over_tls_hostnames=*/{},"https://doh.familyshield.opendns.com/dns-query{?dns}",/*ui_name=*/"", /*privacy_policy=*/"", /*display_globally=*/false,/*display_countries=*/{}, LoggingLevel::kNormal),new DohProviderEntry("Quad9Cdn",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderQuad9Cdn, base::FEATURE_ENABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"9.9.9.11", "149.112.112.11", "2620:fe::11", "2620:fe::fe:11"},/*dns_over_tls_hostnames=*/{"dns11.quad9.net"},"https://dns11.quad9.net/dns-query", /*ui_name=*/"",/*privacy_policy=*/"", /*display_globally=*/false,/*display_countries=*/{}, LoggingLevel::kNormal),new DohProviderEntry("Quad9Insecure",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderQuad9Insecure, base::FEATURE_ENABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"9.9.9.10", "149.112.112.10", "2620:fe::10", "2620:fe::fe:10"},/*dns_over_tls_hostnames=*/{"dns10.quad9.net"},"https://dns10.quad9.net/dns-query", /*ui_name=*/"",/*privacy_policy=*/"", /*display_globally=*/false,/*display_countries=*/{}, LoggingLevel::kNormal),new DohProviderEntry("Quad9Secure",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderQuad9Secure, base::FEATURE_DISABLED_BY_DEFAULT),DohProviderIdForHistogram::kQuad9Secure,{"9.9.9.9", "149.112.112.112", "2620:fe::fe", "2620:fe::9"},/*dns_over_tls_hostnames=*/{"dns.quad9.net", "dns9.quad9.net"},"https://dns.quad9.net/dns-query", /*ui_name=*/"Quad9 (9.9.9.9)",/*privacy_policy=*/"https://www.quad9.net/home/privacy/",/*display_globally=*/true, /*display_countries=*/{},LoggingLevel::kExtra),new DohProviderEntry("Quickline",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderQuickline, base::FEATURE_ENABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"212.60.61.246", "212.60.63.246", "2001:1a88:10:ffff::1","2001:1a88:10:ffff::2"},/*dns_over_tls_hostnames=*/{"dot.quickline.ch"},"https://doh.quickline.ch/dns-query{?dns}",/*ui_name=*/"", /*privacy_policy=*/"",/*display_globally=*/false,/*display_countries=*/{}, LoggingLevel::kNormal),new DohProviderEntry("Spectrum1",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderSpectrum1, base::FEATURE_ENABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"209.18.47.61", "209.18.47.62", "2001:1998:0f00:0001::1","2001:1998:0f00:0002::1"},/*dns_over_tls_hostnames=*/{},"https://doh-01.spectrum.com/dns-query{?dns}",/*ui_name=*/"", /*privacy_policy=*/"",/*display_globally=*/false,/*display_countries=*/{}, LoggingLevel::kNormal),new DohProviderEntry("Spectrum2",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderSpectrum2, base::FEATURE_ENABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"209.18.47.61", "209.18.47.62", "2001:1998:0f00:0001::1","2001:1998:0f00:0002::1"},/*dns_over_tls_hostnames=*/{},"https://doh-02.spectrum.com/dns-query{?dns}",/*ui_name=*/"", /*privacy_policy=*/"",/*display_globally=*/false,/*display_countries=*/{}, LoggingLevel::kNormal),new DohProviderEntry("Switch",MAKE_BASE_FEATURE_WITH_STATIC_STORAGE(DohProviderSwitch, base::FEATURE_DISABLED_BY_DEFAULT),/*provider_id_for_histogram=*/absl::nullopt,{"130.59.31.251", "130.59.31.248", "2001:620:0:ff::2","2001:620:0:ff::3"},/*dns_over_tls_hostnames=*/{"dns.switch.ch"},"https://dns.switch.ch/dns-query", /*ui_name=*/"",/*privacy_policy=*/"", /*display_globally=*/false,/*display_countries=*/{}, LoggingLevel::kNormal),}};return *providers;
}
三、至此数据来源分析完毕,如果想要用自己的dns只需要在
net\dns\public\doh_provider_entry.cc
const DohProviderEntry::List& DohProviderEntry::GetList() 函数里面按照此格式追加即可。
不同版本内核的浏览器有所差异。
相关文章:
Chromium 使用安全 DNS功能源码分析c++
一、选项页安全dns选项如下图: 二、那么如何自定义安全dns功能呢? 1、先看前端部分代码调用 shared.rollup.jsclass PrivacyPageBrowserProxyImpl {.................................................................getSecureDnsResolverList() {re…...
10.1 刷题
C语言 C...
车辆重识别(2021ICML改进的去噪扩散概率模型)论文阅读2024/9/29
所谓改进的去噪扩散概率模型主要改进在哪些方面: ①对数似然值的改进 通过对噪声的那个方差和T进行调参,来实现改进。 ②学习 这个参数也就是后验概率的方差。通过数据分析,发现在T非常大的情况下对样本质量几乎没有影响,也就是说…...
828华为云征文|针对Flexus X实例云服务器的CPU和内存性能测评
目录 一、Flexus X实例云服务器简介 1.1 产品摘要 1.2 产品优势 1.3 本次测评服务器规格 二、CPU性能测试 2.1 操作说明 2.2 操作步骤 2.2 结果分析 三、测试内存负载 3.1 操作说明 3.2 操作步骤 3.3 结果分析 四、测试终评 一、Flexus X实例云服务器简介 1.1 产品…...
Python知识点:如何使用Google Cloud IoT与Python进行边缘计算
开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! 如何使用Google Cloud IoT与Python进行边缘计算 边缘计算作为一种新兴的计算模式…...
力扣 最小覆盖子串
最小覆盖子串 https://leetcode.cn/problems/minimum-window-substring/ 题目描述 题目分析f 覆盖子串:首先根据题意,要求目标字符串的元素必须都在子串中出现过,这表明可以是乱序出现。所以在解决问题是我们需要对子串和目标字符串做匹配&a…...
python的内存管理机制
python的内存管理机制主要分为三个部分:引用计数、垃圾回收和内存池机制。 引用计数机制: python通过维护每个对象的引用计数来跟踪内存中的对象。当对象被创建时就会有一个引用计数,当对象不再被使用时,引用计数为0,…...
阿布量化:基于 Python 的量化交易框架
阿布量化(AbuQuant) 是一个开源的量化交易框架,专为金融领域的研究者和交易者设计。它基于 Python 语言开发,提供了一整套从数据获取、策略开发、回测分析到交易执行的解决方案。阿布量化不仅能够帮助用户快速实现量化策略的设计与…...
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28目录前言1. Cognitive phantoms in LLMs through the lens of latent variables摘要研究背景问题与挑战创新点算法模型实验效果…...
【tower-boot 系列】开源RocketMQ和阿里云rockerMq 4.x和5.x集成 (一)
RocketMQ 简单介绍 阿里云rockerMq 4.x和5.x集成 一、云平台创建实例 参考文档: 阿里云api 阿里云 创建实例 二、skd集成思路 公司用的RocketMQ一般是自建开源apache的RocketMQ和上阿里云的RocketMQ,目前阿里云支持4.x和5.x版本 项目集成思路&…...
Pikachu-Cross-Site Scripting-反射型xss(post)
查看源代码 ,这是需要先登录,然后再去做xss攻击 使用admin ,123456 登陆; 登陆后,输入的message 内容直接返回 输入 <script>alert(1)</script> 得到xss攻击结果...
Vue3 工具函数(总结)
目录 前言 1.isRef 2.isReactive 3.isReadonly 4.isProxy 5.toRef 6.toRefs 7.unref 8.shallowRef 9.shallowReactive 10.triggerRef 11.customRef 12.markRaw 13.toRaw 14.readonly 15.watchEffect 前言 在 Vue 3 中,除了核心的响应式 API&#x…...
(undone) MIT6.824 Lab1
参考:http://nil.csail.mit.edu/6.824/2021/labs/lab-mr.html task1: 熟悉讲义,尤其是搞明白如何运行测试程序(完成) ------------------------------------------------ start 先看 Introduction 我们的目标:构建一个MapReduce系统。 细节&…...
SpringMVC——REST
路径请求方式请求行为 查询:GET 新增:POST 修改:PUT 删除:DELETE 有重复的东西怎么办...
【牛客网刷题记录】【java】二叉树
(1)二叉树的前中后遍历 最基本的树的遍历,不会可以重开了 public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * param root TreeNode类 * return int整型一维…...
一文讲透大语言模型构建流程
最近已有不少大厂都在秋招宣讲了,也有一些在 Offer 发放阶段。 节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…...
VR视频怎样进行加密和一机一码的使用?--加密(一)
在视频加密领域,我们常见接触的就是在普通设备上使用的加密视频,如电脑、手机、平板等。Vr的发展和兴起给人们带来最真实的体验感受,不仅在游戏行业应用较广,在一些影院或者元宇宙文旅、展厅等视频场景也备受青睐。 随着VR视频场景…...
Ubuntu启动后第一次需要很久才能启动GTK应用问题
Ubuntu启动后第一次需要很久才能启动GTK应用问题 自从升级了 Ubuntu 之后,设备重启,发现打开 Terminal 、Nautilus 以及其他的GTK 应用都很慢,需要至少一分钟的时间启动。 刚开始也是拿着 journalctl 的异常日志去寻找答案,但是没…...
栏目二:Echart绘制动态折线图+柱状图
栏目二:Echart绘制动态折线图柱状图 配置了一个ECharts图表,该图表集成了数据区域缩放、双Y轴显示及多种图表类型(折线图、柱状图、象形柱图)。图表通过X轴数据展示,支持平滑折线展示比率数据并自动添加百分比标识&…...
Gromacs——使用过程中暴露问题分析及学习
gromacs——突变残基蛋白电场MD和基本分析从入门到发SCIENCE:基于Gromacs的蛋白小分子动态模拟全过程解析水溶性蛋白模拟全过程:从准备蛋白结构文件(top、itp、gro文件生成)到模拟数据分析GromacsGROMACS 教程:蛋白配体…...
Webpack模式-Resolve-本地服务器
目录 ResolveMode配置搭本地服务器区分环境配置 Resolve 前面学习时使用了各种各样的模块依赖,这些模块可能来自于自己编写的代码,也可能来自第三方库,在 Webpack 中,resolve 是用于解析模块依赖的配置项,它决定了 We…...
【LLM论文日更】| 通过指令调整进行零样本稠密检索的无监督文本表示学习
论文:https://arxiv.org/pdf/2409.16497代码:暂未开源机构:Amazon AGI、宾夕法尼亚州立大学领域:Dense Retrieval发表:Accepted at DCAI24 workshopCIKM2024 研究背景 研究问题:这篇文章要解决的问题是如…...
02.01、移除重复节点
02.01、[简单] 移除重复节点 1、题目描述 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 2、解题思路 为了实现这一目标,我们可以使用一个哈希表(或集合)来记录已经遇到的节点值,逐步遍历链表并删…...
旅游推荐|旅游推荐系统|基于Springboot+VUE的旅游推荐系统设计与实现(源码+数据库+文档)
旅游推荐系统 目录 基于java的旅游推荐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师…...
github项目--crawl4ai
github项目--crawl4ai 输出html输出markdown格式输出结构化数据与BeautifulSoup的对比 crawl4ai github上这个项目,没记错的话,昨天涨了3000多的star,今天又新增2000star。一款抓取和解析工具,简单写个demo感受下 这里我们使用cra…...
仅有N卡独显的情况下安装ubuntu是遇到的黑屏,加载卡顿等问题
Ubuntu安装的两个阶段都要进行一定的设置来临时禁用掉独显或者ubuntu的通用显卡驱动。 U盘启动阶段 U盘启动阶段要对U盘启动项进行设置,通过BIOS设置第一boot为USB hard disk后可以进到U盘引导项,第一项为 “try or install ubuntu”,倒计时10s后自动进入。 这个时候不要…...
Vite:为什么选 Vite
一、现实问题 在浏览器支持 ES 模块之前,JavaScript 并没有提供原生机制让开发者以模块化的方式进行开发。这也正是我们对 “打包” 这个概念熟悉的原因:使用工具抓取、处理并将我们的源码模块串联成可以在浏览器中运行的文件。 时过境迁,我…...
个人项目简单https服务配置
1.SSL简介 SSL证书是一种数字证书,由受信任的证书颁发机构(CA)颁发,用于在互联网通信中建立加密链接。SSL代表“安全套接层”,是用于在互联网上创建加密链接的协议。SSL证书的主要目的是确保数据传输的安全性和隐私性…...
Rust 函数
Rust 函数 Rust 是一种系统编程语言,以其安全性、并发性和性能而闻名。函数是 Rust 编程语言中的基本构建块,用于封装可重用的代码块。本文将深入探讨 Rust 中的函数,包括其定义、特性、参数、返回值以及高级概念。 函数定义 在 Rust 中&a…...
微信小程序中的 `<block>` 元素:高效渲染与结构清晰的利器
微信小程序中的 <block> 元素:高效渲染与结构清晰的利器 在微信小程序的开发中,<block> 元素扮演着举足轻重的角色。尽管它不会在页面中渲染任何可见的节点,但作为一个逻辑上的容器,<block> 在条件渲染和循环渲…...
oa系统主要干什么的/郑州网站推广优化
读书会北京:最新第3期05.20下午周爱民 ,张帆于北大举办 (加入读书会交流群,请直接看文末)读书会发动初衷 年后初七在去南昌走亲的火车上,看到了张栋博士发的一条微博,说他假期内读了一两百篇论文…...
申请个人网站和企业官网有什么不同/免费的推文制作网站
在我们研究C#编程语言的基本构建块之前,让我们看一下最基本的C#程序结构,以便我们在接下来的章节中将其作为参考。 创建Hello World计划 AC#程序包括以下部分 - 命名空间声明A classClass methods类属性A Main meth…...
网站 建设ppt模板/关键词搜索排名工具
最近的工作我在做一个有关于消息发送和接受封装工作。大概流程是这样的,消息中间件是采用rabbitmq,为了保证消息的绝对无丢失,我们需要在发送和接受前对消息进行DB落地。在发送前我会先进行DB的插入,单表插入,所以在性…...
建设网站商城需要多少费用吗/新品上市怎么做宣传推广
一、在vue.config.js中添加配置 vueCli项目默认是不编译node_modules下的组件的,导致条件编译等功能失效,导致组件异常。 需要我们在vue.config.js文件中,添加dcloudio/uni-ui包的编译"transpileDependencies:[dcloudio/uni-ui]"…...
微信公众平台开发代理/seo实战
集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素。集合user:1:follow包含着"it"、"music"、"his"、"sports"四个元素。Redis除…...
产品发布会详细流程/德州seo优化
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。声卡用手机唱歌的方法:1、将手机重启。2、使用标配中带有一个开关的音频线连接直播手机和声卡,靠近开关的那头连接手机的耳机孔。3、将音频线的另一端连接在声…...