- 学习小结记录
歪歪驴
学习网络
一、TLS(TransportLayerSecurity)握手是建立安全通信通道的关键过程,确保客户端与服务器之间的通信加密和身份验证。以下是TLS1.2和TLS1.3的握手流程详解及对比:TLS1.2握手流程目标:协商加密套件、交换密钥、验证身份步骤:1.ClientHello-客户端发送支持的TLS版本、加密套件列表(如`AES256-GCM-SHA384`)、随机数(ClientRandom
- python 源码安装_源码安装python
weixin_39959794
python源码安装
编译安装新版本python一般来说python是linux系统的标配,但是版本一般却很老,而系统上面的很多服务可能与老的python存在依赖关系,我们又不能直接卸载。所以一般,我们可以在一个单独的目录来安装python。python安装有两种方法:1.源码编译2.使用pyenv此处我们使用源码编译安装:1.下载源码:https://www.python.org/ftp/python/此处有各个版本
- armbian 斐讯n1_斐讯N1安装Armbian
weixin_39928017
armbian斐讯n1
最近入手斐讯N1一枚,买的是白色未拆封,到手版本为V2.19_0307_NS,刚好省了降级的麻烦,以下为斐讯N1安装armbian操作过程。开启adb调试模式将N1通过HDMI连接显示器,将鼠标插到N1的USB口上,开机后用鼠标点击系统版本:V2.19_0307_NS区域,多次点击后会出现提示"开启adb调试模式”,即可。从此下载minimal_adb_fastboothttps://tc5.us
- 推荐:React与WebRTC构建的1对1视频聊天应用
潘俭渝Erik
推荐:React与WebRTC构建的1对1视频聊天应用去发现同类优质开源项目:https://gitcode.com/在这个数字化的时代,实时通信技术为我们提供了无限的可能性,而WebRTC(WebReal-TimeCommunication)正是其中的佼佼者。今天,我们向您推荐一个基于React框架实现的简单1对1视频聊天室示例项目,它集成了WebRTC和屏幕共享API,为学习和实践WebRTC
- WebRTC_iOS: 革新的 iOS 实时音视频通信解决方案
潘俭渝Erik
WebRTC_iOS:革新的iOS实时音视频通信解决方案去发现同类优质开源项目:https://gitcode.com/1、项目介绍在当今的移动应用世界中,实时通信能力已经成为许多应用程序的核心竞争力。WebRTC_iOS是一个专为iOS设备设计的开源项目,它利用了Google的WebRTC技术,为您提供了一套完整的音视频通信框架。这个项目的目标是简化开发者在iOS应用中集成高质量、低延迟的音视频
- 关于python的一些面试题
1.技术面试题(1)TCP与UDP的区别是什么?答:在工作机制上TCP采用三次握手四次挥手的机制保障信息传递的稳定性,更适合文件的传输和下载。而UDP采用的是直接传输和直接接受的机制提高信息传递的高效性,更适合点对点的实时交流的环境。(2)DHCP和DNS的作用是什么?答:DHCP相当于网络中的智能管家,他会自动将局域网内的设备进行配置包括但不限于:IP地址、子网掩码、DNS服务器地址。而DNS相
- 服务器搭建python响应https,python实现简单的https服务器
以下提供一个简单的方式快速部署一个https服务器,用于非生产环境的测试使用,如果是正式的生产环境,考虑到性能安全等因素,就不要使用这个了。1、使用pyOpenSSL库:#coding:utf-8fromBaseHTTPServerimportHTTPServer,BaseHTTPRequestHandlerfromSocketServerimportThreadingMixInfromSocke
- 【学术会议投稿】Vue.js组件开发实战:从零构建高效可复用组件
小周不想卷
艾思科蓝学术会议投稿vue.js
【IEEE出版|会后3-4个月EI检索】第三届云计算、大数据应用与软件工程国际学术会议(CBASE2024)_艾思科蓝_学术一站式服务平台更多学术会议请看:https://ais.cn/u/nuyAF3目录引言一、Vue.js组件开发基础二、构建高效可复用组件三、Vue.js组件的高级特性四、Vue.js的优点与缺点Vue.js的优点Vue.js的缺点引言在现代前端开发中,Vue.js凭借其简洁的
- 阿里云新用户特惠活动中哪款云服务器最好最具性价比?
阿里云最新优惠和活动汇总
阿里云2022年的新用户特惠活动是很多新手用户比较关注的活动,而云服务器配置方面最热卖的是2核4G配置,已经出现需要补货的情况了。那么是什么原因让这款配置如此热卖呢,因为这款配置广泛适用于个人网站,企业官网,小程序,APP运行等常见的应用场景,下面小编把这个配置详细解析一下。新人特惠专享图.png活动详情:https://www.aliyun.com/activity/new?userCode=s
- cesium开发常用方法总结(拾取坐标,弹框信息跟随,地图视角切换,水面波浪效果,获取当前相机视角信息,绘制轨迹路线...)
LBY_XK
前端3d
cesium使用方法总结(持续更新)文章目录cesium使用方法总结(持续更新)cesiumNavigation使用(导航控件,比例尺等)资源文件:链接:https://pan.baidu.com/s/1jBDZdDTyaTU1LooO7LgJcA消除锯齿坐标拾取,打印经纬度弹框标记跟随点击的位置地球视角切换水面波浪效果旋转平移缩放模型获取当前视角信息绘制路线动态绘制,就是可以看到路线一点点画出下
- 使用位运算优化 Vue.js 应用:高效状态管理技巧
结城
vuevue.js前端javascript
在Vue.js开发中,位运算(BitwiseOperations)是一种高效的工具,尤其适用于需要管理大量布尔状态或优化性能的场景。位运算通过操作二进制位来实现状态的存储和检查,相比传统的数组或对象操作,内存占用更低,执行速度更快。本篇博客将介绍如何在Vue.js中应用位运算技巧,结合Vue的响应式系统实现高效的状态管理。读vue3响应式源码有感https://github.com/vuejs/c
- 探索图形知识梳理[3.29]
虫zi
【课题名称】人教版数学五年级下册第三单元——探索图形【学习时间】2022年3月29日上午8:30-9:10【学习平台】国家中小学网络云平台(https://ykt.eduyun.cn/)【学习准备】准备笔记本和草稿本,边观看边记录。适时控制播放,按老师指令完成相应的课上练习。【学习任务】(1)进一步认识和理解正方体的特征。(2)通过观察、列表、想象等活动,经历发现正方体涂色和位置的规律的全过程,获
- HAL STM32 I2C方式读取MT6701磁编码器获取角度例程
perseverance52
嵌入式开发笔记stm32MT6701
HALSTM32I2C方式读取MT6701磁编码器获取角度例程相关篇《Arduino通过I2C驱动MT6701磁编码器并读取角度数据》《STM32软件I2C方式读取MT6701磁编码器获取角度例程》使用CH341编程器读取,可以参考《CH341A/BUSB转USART/I2C/SPI介绍》MT6701当前最新文档资料:https://www.magntek.com.cn/upload/MT6701
- JavaWeb 文件上传和下载
dawsonenjoy
一、文件上传步骤前端部分1.提供一个post方法的表单,并设置enctype属性(设置请求内容的MIME类型)为multpart/from-data,代表该表单支持文件上传2.提供一个文件上传框:举例:后端部分将内容通过流读取进来,举例:publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServl
- 138. 复制带随机指针的链表
秃头哥编程
2021-07-22LeetCode每日一题链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/标签:哈希表、链表题目给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由n个全新节点组成,其中每个新节点的值都设为其对应的原
- Apache基础配置
obboda
运维apache
一、Apache安装#安装apache[root@webserver~]#yuminstallhttpd-y#在防火墙中放行web服务[root@webserver~]#firewall-cmd--permanent--add-service=httpsuccess[root@webserver~]#firewall-cmd--permanent--add-service=httpssuccess
- docker部署dm数据库
yy1209357299
运维Linuxdocker容器运维dm
官方文档参考官网地址:https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html下载镜像地址docker部署1、加载镜像dockerload-idm8_20240613_x86_rh6_64_rq_ent_8.1.3.140_pack5.tar使用dockerimages,查看镜像和镜像标签2、创建路径,挂载备用mkd
- Linux指令大全网站
Linux指令大全网站!Linux命令大全(手册):超全!且提供指令查询网址:https://www.linuxcool.com/Linux指令(菜鸟教程):超全!提供清晰的表格查找网址:https://www.runoob.com/linux/linux-command-manual.htmlLinux中文在线手册:这个网站可以检索Linux命令,提供了命令的例子和收藏命令的搜索平台网址:htt
- 盘点一个Python网络爬虫过程中中文乱码的问题
皮皮_f075
大家好,我是皮皮。一、前言前几天在Python白银交流群【空翼】问了一个Python网络爬虫中文乱码的问题,提问截图如下:原始代码如下:importrequestsimportparselurl='https://news.p2peye.com/article-514723-1.html'headers={'Accept-Language':'zh-CN,zh;q=0.9','Accept':'a
- windows docker-01-desktop install windows10 + wls2 启用
老马啸西风
Docker容器学习实战笔记windowsdocker容器ubuntulinuxk8s运维
windows10安装docker版本信息确认需要区分windows是amd64还是arm64powershell中执行:>echo$env:PROCESSOR_ARCHITECTUREAMD64下载官方https://www.docker.com/products/docker-desktop/下载windowsamd64下载好了直接安装。如何验证powershell中dockerversion
- windows wsl2-06-docker hello world
hello-world例子就像其他任何一门语言一样,我们来体验docker的helloworld$dockerrunhello-world但是报错:~$dockerrunhello-worldUnabletofindimage'hello-world:latest'locallydocker:Errorresponsefromdaemon:Get"https://registry-1.docker
- Ubuntu 22.04 安装 Jdk 8和 Tomcat (安装包形式)
jiuqi_玖柒
Ubuntu22.04javaubuntutomcat
一、安装jdk1.81.jdk下载网址,需要登录账户才能下载https://www.oracle.com/java/technologies/downloads/#java82.把安装包上传到服务器上解压根据这个指令直接解压到当前自动生成jdk-8u421文件夹tar-zxvfjdk-8u421-linux-x64.tar.gz3.配置变量vim/etc/profile#在这个配置文件中的最后添加
- 【算法-图论】图的定义与一些常用术语
小蛋编程
C++c++算法
【算法-图论】图的定义图论编辑器1:https://csacademy.com/app/graph_editor/图论编辑器2:https://graphonline.top/ch/1.图是什么图(graph)由节点(node)和边(edge)组成。其中,节点集合记为VVV,边集合记为EEE。每条边连接两个节点,某些图的边可能具有方向性。集合元素的数量用该集合的绝对值来表示。通过对比可以看出,图比
- 【图论】CF——B. Chamber of Secrets (0-1BFS)
KyollBM
图论算法
链接:https://codeforces.com/problemset/problem/173/B题目:思路:初识01BFS什么是01BFS呢?通常的BFS为一步权值为1,而某些题需要的不是走到步数,而是某种操作数,如花费一个操作可以走k步,而不花费只能走1步,通常我们使用双端队列可插队的性质来进行代码的编写,具体的对于不花费,那么就插入到前面,而对于花费则插入到最后本题中操作为“四射”,所以按
- 一文搞懂 Smali 与 Baksmali:Java 层逆向必备技能
CYRUS STUDIO
java开发语言逆向androidsmalibaksmali
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/smali与baksmalismali和baksmali是用于Android平台中DEX文件的汇编器和反汇编器,广泛应用于Android逆向分析与调试。smali和baksmali是一对工具,分别用于:smali:将smali代码(Java汇编语言)编译成DEX文件。baksmali:
- python 抓取小红书
小五咔咔咔
python开发语言
python相关学习资料:https://edu.51cto.com/video/3832.htmlhttps://edu.51cto.com/video/4102.htmlhttps://edu.51cto.com/video/1158.htmlPython抓取小红书数据的科普文章小红书是一个流行的社交电商平台,用户可以分享购物心得、生活点滴等。本文将介绍如何使用Python语言抓取小红书的数据
- https交互原理
黑塞123
Modernc++https网络协议
Https交互时序图:HTTPS通信中结合RSA和AES加密的流程,本质是利用RSA的安全特性交换AES密钥,再用高效的AES加密实际数据传输。HTTPS交互核心流程(TLS/SSL握手)1.建立TCP连接客户端通过TCP三次握手连接服务器的443端口。2.TLS/SSL握手(密钥协商阶段)ClientHello客户端发送支持的功能列表:TLS版本、支持的加密套件(如TLS_RSA_WITH_AE
- Spring Cloud Gateway过滤器精确控制异常返回(实战,控制http返回码和message字段)
程序员欣宸
欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览前文《SpringCloudGateway过滤器精确控制异常返回(分析篇)》咱们阅读源码,了解到SpringCloudGateway是如何处理全局异常信息的,学了那么多理论,不免手痒想实战验证学习效果,今天咱们就来写代码,最终目标是改写下图两个红框中
- 四十行Python代码,带你爬取热门音乐评论,制作评论词云图!
请求页面数据driver.get(‘https://music.163.com/#/song?id=569213220’)#selenium无法直接获取到嵌套页面里面的数据switch_to.frame()切换到嵌套网页driver.switch_to.frame(0)让浏览器加载的时候,等待渲染页面driver.implicitly_wait(10)driver.page_source获取请求页
- 《无声蛙鸣》韩剧全8集【1080p超清韩语中字】免费在线观看完整未删减版百度云/夸克资源网盘免费高清链接下载全集迅雷
优惠攻略官
《无声蛙鸣》是一部由毛完日导演,孙浩英编剧的韩国悬疑惊悚剧,于2024年8月23日在Netflix平台首播。该剧共8集,主演包括金允石、尹启相、高旻示、李姃垠和朴灿烈。无声蛙鸣全集链接:https://pan.quark.cn/s/deddca1bc9d2提示(建议复制后浏览器搜索打开即可,手机用户长按复制打开)保存后下载速度很快资源完全免费,不会收取您任何费用,资源搜集于互联网公开分享资源。剧情
- Algorithm
香水浓
javaAlgorithm
冒泡排序
public static void sort(Integer[] param) {
for (int i = param.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
int current = param[j];
int next = param[j + 1];
- mongoDB 复杂查询表达式
开窍的石头
mongodb
1:count
Pg: db.user.find().count();
统计多少条数据
2:不等于$ne
Pg: db.user.find({_id:{$ne:3}},{name:1,sex:1,_id:0});
查询id不等于3的数据。
3:大于$gt $gte(大于等于)
&n
- Jboss Java heap space异常解决方法, jboss OutOfMemoryError : PermGen space
0624chenhong
jvmjboss
转自
http://blog.csdn.net/zou274/article/details/5552630
解决办法:
window->preferences->java->installed jres->edit jre
把default vm arguments 的参数设为-Xms64m -Xmx512m
----------------
- 文件上传 下载 解析 相对路径
不懂事的小屁孩
文件上传
有点坑吧,弄这么一个简单的东西弄了一天多,身边还有大神指导着,网上各种百度着。
下面总结一下遇到的问题:
文件上传,在页面上传的时候,不要想着去操作绝对路径,浏览器会对客户端的信息进行保护,避免用户信息收到攻击。
在上传图片,或者文件时,使用form表单来操作。
前台通过form表单传输一个流到后台,而不是ajax传递参数到后台,代码如下:
<form action=&
- 怎么实现qq空间批量点赞
换个号韩国红果果
qq
纯粹为了好玩!!
逻辑很简单
1 打开浏览器console;输入以下代码。
先上添加赞的代码
var tools={};
//添加所有赞
function init(){
document.body.scrollTop=10000;
setTimeout(function(){document.body.scrollTop=0;},2000);//加
- 判断是否为中文
灵静志远
中文
方法一:
public class Zhidao {
public static void main(String args[]) {
String s = "sdf灭礌 kjl d{';\fdsjlk是";
int n=0;
for(int i=0; i<s.length(); i++) {
n = (int)s.charAt(i);
if((
- 一个电话面试后总结
a-john
面试
今天,接了一个电话面试,对于还是初学者的我来说,紧张了半天。
面试的问题分了层次,对于一类问题,由简到难。自己觉得回答不好的地方作了一下总结:
在谈到集合类的时候,举几个常用的集合类,想都没想,直接说了list,map。
然后对list和map分别举几个类型:
list方面:ArrayList,LinkedList。在谈到他们的区别时,愣住了
- MSSQL中Escape转义的使用
aijuans
MSSQL
IF OBJECT_ID('tempdb..#ABC') is not null
drop table tempdb..#ABC
create table #ABC
(
PATHNAME NVARCHAR(50)
)
insert into #ABC
SELECT N'/ABCDEFGHI'
UNION ALL SELECT N'/ABCDGAFGASASSDFA'
UNION ALL
- 一个简单的存储过程
asialee
mysql存储过程构造数据批量插入
今天要批量的生成一批测试数据,其中中间有部分数据是变化的,本来想写个程序来生成的,后来想到存储过程就可以搞定,所以随手写了一个,记录在此:
DELIMITER $$
DROP PROCEDURE IF EXISTS inse
- annot convert from HomeFragment_1 to Fragment
百合不是茶
android导包错误
创建了几个类继承Fragment, 需要将创建的类存储在ArrayList<Fragment>中; 出现不能将new 出来的对象放到队列中,原因很简单;
创建类时引入包是:import android.app.Fragment;
创建队列和对象时使用的包是:import android.support.v4.ap
- Weblogic10两种修改端口的方法
bijian1013
weblogic端口号配置管理config.xml
一.进入控制台进行修改 1.进入控制台: http://127.0.0.1:7001/console 2.展开左边树菜单 域结构->环境->服务器-->点击AdminServer(管理) &
- mysql 操作指令
征客丶
mysql
一、连接mysql
进入 mysql 的安装目录;
$ bin/mysql -p [host IP 如果是登录本地的mysql 可以不写 -p 直接 -u] -u [userName] -p
输入密码,回车,接连;
二、权限操作[如果你很了解mysql数据库后,你可以直接去修改系统表,然后用 mysql> flush privileges; 指令让权限生效]
1、赋权
mys
- 【Hive一】Hive入门
bit1129
hive
Hive安装与配置
Hive的运行需要依赖于Hadoop,因此需要首先安装Hadoop2.5.2,并且Hive的启动前需要首先启动Hadoop。
Hive安装和配置的步骤
1. 从如下地址下载Hive0.14.0
http://mirror.bit.edu.cn/apache/hive/
2.解压hive,在系统变
- ajax 三种提交请求的方法
BlueSkator
Ajaxjqery
1、ajax 提交请求
$.ajax({
type:"post",
url : "${ctx}/front/Hotel/getAllHotelByAjax.do",
dataType : "json",
success : function(result) {
try {
for(v
- mongodb开发环境下的搭建入门
braveCS
运维
linux下安装mongodb
1)官网下载mongodb-linux-x86_64-rhel62-3.0.4.gz
2)linux 解压
gzip -d mongodb-linux-x86_64-rhel62-3.0.4.gz;
mv mongodb-linux-x86_64-rhel62-3.0.4 mongodb-linux-x86_64-rhel62-
- 编程之美-最短摘要的生成
bylijinnan
java数据结构算法编程之美
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class ShortestAbstract {
/**
* 编程之美 最短摘要的生成
* 扫描过程始终保持一个[pBegin,pEnd]的range,初始化确保[pBegin,pEnd]的ran
- json数据解析及typeof
chengxuyuancsdn
jstypeofjson解析
// json格式
var people='{"authors": [{"firstName": "AAA","lastName": "BBB"},'
+' {"firstName": "CCC&
- 流程系统设计的层次和目标
comsci
设计模式数据结构sql框架脚本
流程系统设计的层次和目标
 
- RMAN List和report 命令
daizj
oraclelistreportrman
LIST 命令
使用RMAN LIST 命令显示有关资料档案库中记录的备份集、代理副本和映像副本的
信息。使用此命令可列出:
• RMAN 资料档案库中状态不是AVAILABLE 的备份和副本
• 可用的且可以用于还原操作的数据文件备份和副本
• 备份集和副本,其中包含指定数据文件列表或指定表空间的备份
• 包含指定名称或范围的所有归档日志备份的备份集和副本
• 由标记、完成时间、可
- 二叉树:红黑树
dieslrae
二叉树
红黑树是一种自平衡的二叉树,它的查找,插入,删除操作时间复杂度皆为O(logN),不会出现普通二叉搜索树在最差情况时时间复杂度会变为O(N)的问题.
红黑树必须遵循红黑规则,规则如下
1、每个节点不是红就是黑。 2、根总是黑的 &
- C语言homework3,7个小题目的代码
dcj3sjt126com
c
1、打印100以内的所有奇数。
# include <stdio.h>
int main(void)
{
int i;
for (i=1; i<=100; i++)
{
if (i%2 != 0)
printf("%d ", i);
}
return 0;
}
2、从键盘上输入10个整数,
- 自定义按钮, 图片在上, 文字在下, 居中显示
dcj3sjt126com
自定义
#import <UIKit/UIKit.h>
@interface MyButton : UIButton
-(void)setFrame:(CGRect)frame ImageName:(NSString*)imageName Target:(id)target Action:(SEL)action Title:(NSString*)title Font:(CGFloa
- MySQL查询语句练习题,测试足够用了
flyvszhb
sqlmysql
http://blog.sina.com.cn/s/blog_767d65530101861c.html
1.创建student和score表
CREATE TABLE student (
id INT(10) NOT NULL UNIQUE PRIMARY KEY ,
name VARCHAR
- 转:MyBatis Generator 详解
happyqing
mybatis
MyBatis Generator 详解
http://blog.csdn.net/isea533/article/details/42102297
MyBatis Generator详解
http://git.oschina.net/free/Mybatis_Utils/blob/master/MybatisGeneator/MybatisGeneator.
- 让程序员少走弯路的14个忠告
jingjing0907
工作计划学习
无论是谁,在刚进入某个领域之时,有再大的雄心壮志也敌不过眼前的迷茫:不知道应该怎么做,不知道应该做什么。下面是一名软件开发人员所学到的经验,希望能对大家有所帮助
1.不要害怕在工作中学习。
只要有电脑,就可以通过电子阅读器阅读报纸和大多数书籍。如果你只是做好自己的本职工作以及分配的任务,那是学不到很多东西的。如果你盲目地要求更多的工作,也是不可能提升自己的。放
- nginx和NetScaler区别
流浪鱼
nginx
NetScaler是一个完整的包含操作系统和应用交付功能的产品,Nginx并不包含操作系统,在处理连接方面,需要依赖于操作系统,所以在并发连接数方面和防DoS攻击方面,Nginx不具备优势。
2.易用性方面差别也比较大。Nginx对管理员的水平要求比较高,参数比较多,不确定性给运营带来隐患。在NetScaler常见的配置如健康检查,HA等,在Nginx上的配置的实现相对复杂。
3.策略灵活度方
- 第11章 动画效果(下)
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/
- FAQ - SAP BW BO roadmap
blueoxygen
BOBW
http://www.sdn.sap.com/irj/boc/business-objects-for-sap-faq
Besides, I care that how to integrate tightly.
By the way, for BW consultants, please just focus on Query Designer which i
- 关于java堆内存溢出的几种情况
tomcat_oracle
javajvmjdkthread
【情况一】:
java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决: <jvm-arg>-Xms3062m</jvm-arg> <jvm-arg>-Xmx
- Manifest.permission_group权限组
阿尔萨斯
Permission
结构
继承关系
public static final class Manifest.permission_group extends Object
java.lang.Object
android. Manifest.permission_group 常量
ACCOUNTS 直接通过统计管理器访问管理的统计
COST_MONEY可以用来让用户花钱但不需要通过与他们直接牵涉的权限
D