新书推荐 |《TCP/IP详解 卷2:实现》-程序员宅基地

新书推荐

《TCP/IP详解 卷2:实现》

长按二维码
了解及购买

网络专家、著名技术作家W. Richard Stevens的传世之作;内容详尽且极具权威;被誉为TCP/IP领域的不朽名著。

编辑推荐

1. 重点关注TCP/IP协议的实现问题。

2. 书中介绍了一个实际的TCP/IP实现,并给出了这一实现的完整源代码,书中约有500个图例,15000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。

3. 几乎每章都提供精选的习题,并在附录中提供了部分习题的答案。

内容简介

本书是三卷本套书《TCP/IP详解》的第2卷,完整而详细地介绍了TCP/IP是如何实现的。书中给出了约500个图例、15 000行实际操作的C代码,采用案例教学的方法帮助读者掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别,还介绍了4.4BSD-Lite版的新特点,如多播、长肥管道支持等。读者阅读本书时,应当具备卷1中阐述的关于TCP/IP的基础知识。

本书适用于希望理解TCP/IP实现细节的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。

作者简介

加里•R. 赖特(Gary R. Wright)研究TCP/IP多年。他是Connix公司的董事长,Connix公司的总部在康涅狄格州,主要提供Internet接入和咨询服务。

W. 理查德 史蒂文斯(W. Richard Stevens)(1951—1999)是国际知名的Unix和网络专家,备受赞誉的技术作家。生前著有《TCP/IP 详解》(三卷本)、《UNIX网络编程》(两卷本)以及《UNIX环境高级编程》,均为不朽的经典著作。

目录

出版者的话

译者序

前言

第1章   概述 1

1.1   引言 1

1.2   源代码表示 1

1.2.1   将拥塞窗口设置为1 1

1.2.2   印刷约定 2

1.3   历史 2

1.4   应用编程接口 3

1.5   程序示例 4

1.6   系统调用和库函数 6

1.7   网络实现概述 6

1.8   描述符 7

1.9   mbuf与输出处理 11

1.9.1   包含插口地址结构的mbuf 11

1.9.2   包含数据的mbuf 12

1.9.3   添加IP和UDP首部 13

1.9.4   IP输出 14

1.9.5   以太网输出 14

1.9.6   UDP输出小结 14

1.10   输入处理 15

1.10.1   以太网输入 15

1.10.2   IP输入 15

1.10.3   UDP输入 16

1.10.4   进程输入 17

1.11   网络实现概述(续) 17

1.12   中断级别与并发 18

1.13   源代码组织 20

1.14   测试网络 21

1.15   小结 22

第2章   mbuf:存储器缓存 24

2.1   引言 24

2.2   代码介绍 27

2.2.1   全局变量 27

2.2.2   统计 28

2.2.3   内核统计 28

2.3   mbuf的定义 29

2.4   mbuf结构 29

2.5   简单的mbuf宏和函数 31

2.5.1   m_get函数 32

2.5.2   MGET宏 32

2.5.3   m_retry函数 33

2.5.4   mbuf锁 34

2.6   m_devget和m_pullup函数 34

2.6.1   m_devget函数 34

2.6.2   mtod和dtom宏 36

2.6.3   m_pullup函数和连续的协议首部 36

2.6.4   m_pullup和IP的分片与重组 37

2.6.5   TCP重组避免调用m_pullup 39

2.6.6   m_pullup使用总结 40

2.7   mbuf宏和函数的小结 40

2.8   Net/3联网数据结构小结 42

2.9   m_copy和簇引用计数 43

2.10   其他选择 47

2.11   小结 47

第3章   接口层 49

3.1   引言 49

3.2   代码介绍 49

3.2.1   全局变量 49

3.2.2   SNMP变量 50

3.3   ifnet结构 51

3.4   ifaddr结构 57

3.5   sockaddr结构 58

3.6   ifnet与ifaddr的专用化 59

3.7   网络初始化概述 60

3.8   以太网初始化 61

3.9   SLIP初始化 64

3.10   环回初始化 65

3.11   if_attach函数 66

3.12   ifinit函数 72

3.13   小结 73

第4章   接口:以太网 74

4.1   引言 74

4.2   代码介绍 75

4.2.1   全局变量 75

4.2.2   统计量 75

4.2.3   SNMP变量 76

4.3   以太网接口 77

4.3.1   leintr函数 79

4.3.2   leread函数 79

4.3.3   ether_input函数 81

4.3.4   ether_output函数 84

4.3.5   lestart函数 87

4.4   ioctl系统调用 89

4.4.1   ifioctl函数 90

4.4.2   ifconf函数 91

4.4.3   举例 94

4.4.4   通用接口ioctl命令 95

4.4.5   if_down和if_up函数 96

4.4.6   以太网、SLIP和环回 97

4.5   小结 98

第5章   接口:SLIP和环回 100

5.1   引言 100

5.2   代码介绍 100

5.2.1   全局变量 100

5.2.2   统计量 101

5.3   SLIP接口 101

5.3.1   SLIP线路规程:SLIPDISC 101

5.3.2   SLIP初始化:slopen和slinit 103

5.3.3   SLIP输入处理:slinput 105

5.3.4   SLIP输出处理:sloutput 109

5.3.5   slstart函数 111

5.3.6   SLIP分组丢失 116

5.3.7   SLIP性能考虑 117

5.3.8   slclose函数 117

5.3.9   sltioctl函数 118

5.4   环回接口 119

5.5   小结 121

第6章   IP编址 123

6.1   引言 123

6.1.1   IP地址 123

6.1.2   IP地址的印刷规定 123

6.1.3   主机和路由器 124

6.2   代码介绍 125

6.3   接口和地址小结 125

6.4   sockaddr_in结构 126

6.5   in_ifaddr结构 127

6.6   地址指派 128

6.6.1   ifioctl函数 130

6.6.2   in_control函数 130

6.6.3   前提条件:SIOCSIFADDR、SIOCSIFNETMASK和SIOCSIFDSTADDR 132

6.6.4   地址指派:SIOCSIFADDR 133

6.6.5   in_ifinit函数 133

6.6.6   网络掩码指派:SIOCSIFNETMASK 136

6.6.7   目的地址指派:SIOCSIFDSTADDR 137

6.6.8   获取接口信息 137

6.6.9   每个接口多个IP地址 138

6.6.10   附加IP地址:SIOCAIFADDR 139

6.6.11   删除IP地址:SIOCDIFADDR 140

6.7   接口ioctl处理 141

6.7.1   leioctl函数 141

6.7.2   slioctl函数 142

6.7.3   loioctl函数 143

6.8   Internet实用函数 144

6.9   ifnet实用函数 144

6.10   小结 145

第7章   域和协议 146

7.1   引言 146

7.2   代码介绍 146

7.2.1   全局变量 147

7.2.2   统计量 147

7.3   domain结构 147

7.4   protosw结构 148

7.5   IP 的domain和protosw结构 150

7.6   pffindproto和pffindtype函数 155

7.7   pfctlinput函数 157

7.8   IP初始化 157

7.8.1   Internet传输分用 157

7.8.2   ip_init函数 158

7.9   sysctl系统调用 159

7.10   小结 161

第8章   IP:网际协议 162

8.1   引言 162

8.2   代码介绍 163

8.2.1   全局变量 163

8.2.2   统计量 163

8.2.3   SNMP变量 164

8.3   IP分组 165

8.4   输入处理:ipintr函数 167

8.4.1   ipintr概观 167

8.4.2   验证 168

8.4.3   转发或不转发 171

8.4.4   重装和分用 173

8.5   转发:ip_forward函数 174

8.6   输出处理:ip_output函数 180

8.6.1   首部初始化 181

8.6.2   路由选择 182

8.6.3   源地址选择和分片 184

8.7   Internet检验和:in_cksum函数 186

8.8   setsockopt和getsockopt系统调用 190

8.8.1   PRCO_SETOPT的处理 192

8.8.2   PRCO_GETOPT的处理 193

8.9   ip_sysctl函数 193

8.10   小结 194

第9章   IP选项处理 196

9.1   引言 196

9.2   代码介绍 196

9.2.1   全局变量 196

9.2.2   统计量 197

9.3   选项格式 197

9.4   ip_dooptions函数 198

9.5   记录路由选项 200

9.6   源站和记录路由选项 202

9.6.1   save_rte函数 205

9.6.2   ip_srcroute函数 206

9.7   时间戳选项 207

9.8   ip_insertoptions函数 210

9.9   ip_pcbopts函数 214

9.10   一些限制 217

9.11   小结 217

第10章   IP的分片与重装 218

10.1   引言 218

10.2   代码介绍 219

10.2.1   全局变量 220

10.2.2   统计量 220

10.3   分片 220

10.4   ip_optcopy函数 223

10.5   重装 224

10.6   ip_reass函数 227

10.7   ip_slowtimo函数 237

10.8   小结 238

第11章   ICMP:Internet控制报文协议 239

11.1   引言 239

11.2   代码介绍 242

11.2.1   全局变量 242

11.2.2   统计量 242

11.2.3   SNMP变量 243

11.3   icmp结构 244

11.4   ICMP 的protosw结构 245

11.5   输入处理:icmp_input函数 246

11.6   差错处理 249

11.7   请求处理 251

11.7.1   回显询问:ICMP_ECHO和

             ICMP_ECHOREPLY 252

11.7.2   时间戳询问:ICMP_TSTAMP和

             ICMP_TSTAMPREPLY 253

11.7.3   地址掩码询问:ICMP_MASKREQ和ICMP_MASKREPLY 253

11.7.4   信息询问:ICMP_IREQ和ICMP_IREQREPLY 255

11.7.5   路由器发现:ICMP_ROUTERADVERT和ICMP_ROUTERSOLICIT 255

11.8   重定向处理 255

11.9   回答处理 257

11.10   输出处理 257

11.11   icmp_error函数 258

11.12   icmp_reflect函数 261

11.13   icmp_send函数 265

11.14   icmp_sysctl函数 266

11.15   小结 266

第12章   IP多播 268

12.1   引言 268

12.2   代码介绍 269

12.2.1   全局变量 270

12.2.2   统计量 270

12.3   以太网多播地址 270

12.4   ether_multi结构 271

12.5   以太网多播接收 273

12.6   in_multi结构 273

12.7   ip_moptions结构 275

12.8   多播的插口选项 276

12.9   多播的TTL值 277

12.9.1   MBONE 278

12.9.2   扩展环搜索 278

12.10   ip_setmoptions函数 278

12.10.1   选择一个明确的多播接口:IP_MULTICAST_IF 280

12.10.2   选择明确的多播TTL: IP_ MULTICAST_TTL 281

12.10.3   选择多播环回:IP_MULTICAST_LOOP 281

12.11   加入一个IP多播组 282

12.11.1   in_addmulti函数 285

12.11.2   slioctl和loioctl函数:SIOCADDMULTI和SIOCDELMULTI 287

12.11.3   leioctl函数:SIOCADDMULTI和SIOCDELMULTI 288

12.11.4   ether_addmulti函数 288

12.12   离开一个IP多播组 291

12.12.1   in_delmulti函数 292

12.12.2   ether_delmulti函数 293

12.13   ip_getmoptions函数 295

12.14   多播输入处理:ipintr函数 296

12.15   多播输出处理:ip_output函数 298

12.16   性能的考虑 301

12.17   小结 301

第13章   IGMP:Internet组管理协议 303

13.1   引言 303

13.2   代码介绍 304

13.2.1   全局变量 304

13.2.2   统计量 304

13.2.3   SNMP变量 305

13.3   igmp结构 305

13.4   IGMP的protosw的结构 306

13.5   加入一个组:igmp_joingroup函数 306

13.6   igmp_fasttimo函数 308

13.7   输入处理:igmp_input函数 311

13.7.1   成员关系查询:IGMP_HOST_MEMBERSHIP_QUERY 312

13.7.2   成员关系报告:IGMP_HOST_MEMBERSHIP_REPORT 313

13.8   离开一个组:igmp_leavegroup函数 314

13.9   小结 315

第14章   IP多播选路 316

14.1   引言 316

14.2   代码介绍 316

14.2.1   全局变量 316

14.2.2   统计量 317

14.2.3   SNMP变量 317

14.3   多播输出处理(续) 317

14.4   mrouted守护程序 318

14.5   虚拟接口 321

14.5.1   虚拟接口表 322

14.5.2   add_vif函数 324

14.5.3   del_vif函数 326

14.6   IGMP(续) 327

14.6.1   add_lgrp函数 328

14.6.2   del_lgrp函数 329

14.6.3   grplst_member函数 330

14.7   多播选路 331

14.7.1   多播选路表 334

14.7.2   del_mrt函数 335

14.7.3   add_mrt函数 336

14.7.4   mrtfind函数 337

14.8   多播转发:ip_mforward函数 338

14.8.1   phyint_send函数 343

14.8.2   tunnel_send函数 344

14.9   清理:ip_mrouter_done函数 345

14.10   小结 346

第15章   插口层 348

15.1   引言 348

15.2   代码介绍 349

15.3   socket结构 349

15.4   系统调用 354

15.4.1   举例 355

15.4.2   系统调用小结 355

15.5   进程、描述符和插口 357

15.6    socket系统调用 358

15.6.1   socreate函数 359

15.6.2   超级用户特权 361

15.7    getsock和sockargs函数 361

15.8    bind系统调用 363

15.9    listen系统调用 364

15.10   tsleep和wakeup函数 365

15.11   accept系统调用 366

15.12   sonewconn和soisconnected函数 369

15.13   connect系统调用 372

15.13.1   soconnect函数 374

15.13.2   切断无连接插口和外部地址的关联 375

15.14   shutdown系统调用 375

15.15   close系统调用 377

15.15.1   soo_close函数 377

15.15.2   soclose函数 378

15.16   小结 380

第16章   插口I/O 381

16.1   引言 381

16.2   代码介绍 381

16.3   插口缓存 381

16.4   write、writev、sendto和sendmsg系统调用 384

16.5   sendmsg系统调用 387

16.6   sendit函数 388

16.6.1   uiomove函数 389

16.6.2   举例 390

16.6.3   sendit代码 391

16.7   sosend函数 392

16.7.1   可靠的协议缓存 393

16.7.2   不可靠的协议缓存 393

16.7.3   sosend函数小结 401

16.7.4   性能问题 401

16.8   read、readv、recvfrom和recvmsg系统调用 401

16.9   recvmsg系统调用 402

16.10   recvit函数 403

16.11   soreceive函数 405

16.11.1   带外数据 406

16.11.2   举例 406

16.11.3   其他的接收操作选项 407

16.11.4   接收缓存的组织:报文边界 407

16.11.5   接收缓存的组织:没有报文边界 408

16.11.6   控制信息和带外数据 409

16.12   soreceive代码 410

16.13   select系统调用 421

16.13.1   selscan函数 425

16.13.2   soo_select函数 425

16.13.3   selrecord函数 427

16.13.4   selwakeup函数 428

16.14   小结 429

第17章   插口选项 431

17.1   引言 431

17.2   代码介绍 431

17.3   setsockopt系统调用 432

17.4   getsockopt系统调用 437

17.5   fcntl和ioctl系统调用 440

17.5.1   fcntl代码 441

17.5.2   ioctl代码 443

17.6   getsockname系统调用 444

17.7   getpeername系统调用 445

17.8   小结 447

第18章   Radix树路由表 448

18.1   引言 448

18.2   路由表结构 448

18.3   选路插口 456

18.4   代码介绍 456

18.4.1   全局变量 458

18.4.2   统计量 458

18.4.3   SNMP变量 459

18.5   Radix结点数据结构 460

18.6   选路结构 463

18.7   初始化:route_init和rtable_init函数 465

18.8   初始化:rn_init和rn_inithead函数 468

18.9   重复键和掩码列表 471

18.10   rn_match函数 473

18.11   rn_search函数 480

18.12   小结 481

第19章   选路请求和选路消息 482

19.1   引言 482

19.2   rtalloc和rtalloc1函数 482

19.3   宏RTFREE和rtfree函数 484

19.4   rtrequest函数 486

19.5   rt_setgate函数 491

19.6   rtinit函数 493

19.7   rtredirect函数 495

19.8   选路消息的结构 498

19.9   rt_missmsg函数 501

19.10   rt_ifmsg函数 503

19.11   rt_newaddrmsg函数 504

19.12   rt_msg1函数 505

19.13   rt_msg2函数 507

19.14   sysctl_rtable函数 510

19.15   sysctl_dumpentry函数 514

19.16   sysctl_iflist函数 515

19.17   小结 517

第20章   选路插口 518

20.1   引言 518

20.2   routedomain和protosw结构 518

20.3   选路控制块 519

20.4   raw_init函数 520

20.5   route_output函数 520

20.6   rt_xaddrs函数 530

20.7   rt_setmetrics函数 531

20.8   raw_input函数 532

20.9   route_usrreq函数 534

20.10   raw_usrreq函数 535

20.11   raw_attach、raw_detach和raw_disconnect函数 539

20.12   小结 540

第21章   ARP:地址解析协议 542

21.1   介绍 542

21.2   ARP和路由表 542

21.3   代码介绍 544

21.3.1   全局变量 544

21.3.2   统计量 544

21.3.3   SNMP变量 546

21.4   ARP结构 546

21.5   arpwhohas函数 548

21.6   arprequest函数 548

21.7   arpintr函数 551

21.8   in_arpinput函数 552

21.9   ARP定时器函数 557

21.9.1   arptimer函数 557

21.9.2   arptfree函数 557

21.10   arpresolve函数 558

21.11   arplookup函数 562

21.12   代理ARP 563

21.13   arp_rtrequest函数 564

21.14   ARP和多播 569

21.15   小结 570

第22章   协议控制块 572

22.1   引言 572

22.2   代码介绍 573

22.2.1   全局变量 574

22.2.2   统计量 574

22.3   inpcb的结构 574

22.4   in_pcballoc和in_pcbdetach函数 575

22.5   绑定、连接和分用 577

22.6   in_pcblookup函数 581

22.7   in_pcbbind函数 584

22.8   in_pcbconnect函数 589

22.9   in_pcbdisconnect函数 594

22.10   in_setsockaddr和in_setpeeraddr函数 595

22.11   in_pcbnotify、in_rtchange和in_losing函数 595

22.11.1   in_rtchange函数 598

22.11.2   重定向和原始插口 599

22.11.3   ICMP差错和UDP插口 600

22.11.4   in_losing函数 601

22.12   实现求精 602

22.13   小结 602

第23章   UDP:用户数据报协议 605

23.1   引言 605

23.2   代码介绍 605

23.2.1   全局变量 606

23.2.2   统计量 606

23.2.3   SNMP变量 607

23.3   UDP 的protosw结构 607

23.4   UDP的首部 608

23.5   udp_init函数 609

23.6   udp_output函数 609

23.6.1   在前面加上IP/UDP首部和mbuf簇 612

23.6.2   UDP检验和计算和伪首部 612

23.7   udp_input函数 616

23.7.1   对收到的UDP数据报的一般确认 616

23.7.2   分用单播数据报 619

23.7.3   分用多播和广播数据报 622

23.7.4   连接上的UDP插口和多接口主机 625

23.8   udp_saveopt函数 625

23.9   udp_ctlinput函数 627

23.10   udp_usrreq函数 628

23.11   udp_sysctl函数 633

23.12   实现求精 633

23.12.1   UDP PCB高速缓存 633

23.12.2   UDP检验和 634

23.13   小结 635

第24章   TCP:传输控制协议 636

24.1   引言 636

24.2   代码介绍 636

24.2.1   全局变量 636

24.2.2   统计量 637

24.2.3   SNMP变量 640

24.3   TCP 的protosw结构 641

24.4   TCP的首部 641

24.5   TCP的控制块 643

24.6   TCP的状态变迁图 645

24.7   TCP的序号 646

24.8   tcp_init函数 650

24.9   小结 652

第25章   TCP的定时器 654

25.1   引言 654

25.2   代码介绍 655

25.3   tcp_canceltimers函数 657

25.4   tcp_fasttimo函数 657

25.5   tcp_slowtimo函数 658

25.6   tcp_timers函数 659

25.6.1   FIN_WAIT_2和2MSL定时器 660

25.6.2   持续定时器 662

25.6.3   连接建立定时器和保活定时器 662

25.7   重传定时器的计算 665

25.8   tcp_newtcpcb算法 666

25.9   tcp_setpersist函数 668

25.10   tcp_xmit_timer函数 669

25.11   重传超时:tcp_timers函数 673

25.11.1   慢起动和避免拥塞 675

25.11.2   精确性 677

25.12   一个RTT的例子 677

25.13   小结 679

第26章   TCP输出 680

26.1   引言 680

26.2   tcp_output概述 680

26.3   决定是否应发送一个报文段 682

26.4   TCP选项 691

26.5   窗口大小选项 692

26.6   时间戳选项 692

26.6.1   哪个时间戳需要回显,RFC 1323算法 694

26.6.2   哪个时间戳需要回显,正确的算法 695

26.6.3   时间戳与延迟ACK 695

26.7   发送一个报文段 696

26.8   tcp_template函数 707

26.9   tcp_respond函数 708

26.10   小结 710

第27章   TCP的函数 712

27.1   引言 712

27.2   tcp_drain函数 712

27.3   tcp_drop函数 712

27.4   tcp_close函数 713

27.4.1   路由特性 713

27.4.2   资源释放 716

27.5   tcp_mss函数 717

27.6   tcp_ctlinput函数 722

27.7   tcp_notify函数 723

27.8   tcp_quench函数 724

27.9   TCP_REASS宏和tcp_reass函数 724

27.9.1   TCP_REASS宏 725

27.9.2   tcp_reass函数 727

27.10   tcp_trace函数 732

27.11   小结 736

第28章   TCP的输入 737

28.1   引言 737

28.2   预处理 739

28.3   tcp_dooptions函数 745

28.4   首部预测 747

28.5   TCP输入:缓慢的执行路径 752

28.6   完成被动打开或主动打开 752

28.6.1   完成被动打开 753

28.6.2   完成主动打开 756

28.7   PAWS:防止序号回绕 760

28.8   裁剪报文段使数据在窗口内 762

28.9   自连接和同时打开 768

28.10   记录时间戳 770

28.11   RST处理 770

28.12   小结 772

第29章   TCP的输入(续) 773

29.1   引言 773

29.2   ACK处理概述 773

29.3   完成被动打开和同时打开 774

29.4   快速重传和快速恢复的算法 775

29.5   ACK处理 778

29.6   更新窗口信息 784

29.7   紧急方式处理 786

29.8   tcp_pulloutofband函数 788

29.9   处理已接收的数据 789

29.10   FIN处理 791

29.11   最后的处理 793

29.12   实现求精 795

29.13   首部压缩 795

29.13.1   引言 796

29.13.2   首部字段的压缩 799

29.13.3   特殊情况 801

29.13.4   实例 802

29.13.5   配置 803

29.14   小结 803

第30章   TCP的用户需求 805

30.1   引言 805

30.2   tcp_usrreq函数 805

30.3   tcp_attach函数 814

30.4   tcp_disconnect函数 815

30.5   tcp_usrclosed函数 816

30.6   tcp_ctloutput函数 817

30.7   小结 820

第31章   BPF:BSD 分组过滤程序 821

31.1   引言 821

31.2   代码介绍 821

31.2.1   全局变量 821

31.2.2   统计量 822

31.3   bpf_if结构 822

31.4   bpf_d结构 825

31.4.1   bpfopen函数 826

31.4.2   bpfioctl函数 827

31.4.3   bpf_setif函数 830

31.4.4   bpf_attachd函数 831

31.5   BPF的输入 832

31.5.1   bpf_tap函数 832

31.5.2   catchpacket函数 833

31.5.3   bpfread函数 835

31.6   BPF的输出 837

31.7   小结 838

第32章   原始IP 839

32.1   引言 839

32.2   代码介绍 839

32.2.1   全局变量 839

32.2.2   统计量 840

32.3   原始 IP的protosw结构 840

32.4   rip_init函数 842

32.5   rip_input函数 842

32.6   rip_output函数 844

32.7   rip_usrreq函数 846

32.8   rip_ctloutput函数 850

32.9   小结 852

结束语 853

附录A   部分习题的解答 854

附录B   源代码的获取 872

附录C   RFC 1122 的有关内容 874

参考文献 895

你与世界

只差一个

公众号

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hzbooks/article/details/108215520

智能推荐

[AIGC] Java List和Map常用API以及其Python实现方式对照介绍-程序员宅基地

文章浏览阅读477次,点赞9次,收藏8次。Java和Python作为当今非常浅显易懂的编程语言,其数据结构中对于List和Map(Java)或List和Dict(Python)的操作无疑是每个程序员都非常必需的知识。本文将介绍在Java中对List和Map常用的一些操作,并给出在Python中对应的实现方式。

meson 概述-程序员宅基地

文章浏览阅读1.2w次,点赞8次,收藏42次。meson是一个编译系统,类似于 CMake 或者GNU Autotools. meson只是负责配置构建,后台默认是用ninja来编译的(当然也支持其它后台)。ninja是一个小型的致力于编译速度优化的编译系统,相当于make的替代物。所以meson+ninja相当于Cmake+make。meson设计目标是好用,同时保持高性能。它采用了一种自定义语言,号称简单、清晰和简洁性。很多灵感来自于Python编程语言,具有较好的易读性。meson的另一个设计目标,是为现代编程工具提供辅助的支持,包括单元测试_meson

oracle查看编码以及修改编码-程序员宅基地

文章浏览阅读87次。oracle的编码一直是个很重要的问题,以前也总结的写过,但都忘了,今天再在这写一下。首先查看oracle数据库的编码SQL>select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';PARAMETER--------------------VALUE---..._orcid邮政编号怎么修改

【设计模式】享元模式的使用场景及与其他共享技术的对比-程序员宅基地

文章浏览阅读905次,点赞23次,收藏19次。享元模式(Flyweight Pattern)是一种非常常用的结构型设计模式,通过共享对象的方式,减少系统中的重复对象,提高内存使用效率。本文主要讲了享元模式的概念、使用场景以及与其他技术的对比。在使用方式上,与缓存、池化技术是高度类似的,都是创建好对象并存储起来,在后续想要使用的时候直接从存储的数据结构中获取,而不用重新创建。它与缓存、池化技术之间的区别,更多的是在于使用目的上的区别,只要能判断出,当前的对象是在通过共享对象的方式,减少系统中的重复对象,提高内存使用效率。

3D点云系列(一)点云介绍_点云数据-程序员宅基地

文章浏览阅读4.9k次。点云数据简介 点云数据(point cloud data)是指在一个三维坐标系统中的一组向量的集合。扫描资料以点的形式记录,每一个点包含有三维坐标,有些可能含有颜色信息(RGB)或反射强度信息(Intensity)。 我们常用的点云数据为激光雷达采集的数据,激光雷达的非接触式测量特点,具有测量速度快、精度高、识别准确等优点,成为移动机器人定位导航的核心传感器。在激光雷达技术领域中,目前主要通过三角测距法与TOF方法来进行测..._点云数据

python匿名函数的好处_Python之匿名函数如何理解?-程序员宅基地

文章浏览阅读393次。常规我们定义函数时,函数都是有名字的,比如:def add(x,y):return x+y这个函数是有名字的,叫add,我们在使用的时候直接调用即可:print(add(3,2))那么匿名函数呢,经常看一些代码会出现类似lambda(x,y:x+y),那么我们该如何去理解匿名函数呢?我们先看定义:匿名函数:根据名字就可以知道,被定义的函数是没有名字的;lambda是一个表达式而不是一个语句。它能够..._匿名函数的优点

随便推点

chatgpt生成的一些qt进度条样式_qt进度条绿色-程序员宅基地

文章浏览阅读344次。【代码】chatgpt生成的一些qt进度条样式。_qt进度条绿色

深读 |《人人都是产品经理2.0》上篇_人人都是产品经理2.0电子书-程序员宅基地

文章浏览阅读711次。本文首发于微信公众号:胡先生的理想国《人人都是产品经理2.0》(以下简称“《人人》”)是写给-1至3年级泛互联网产品经理的一本书,苏杰老师的写作思路集中于一个互联网产品从无至有的全过程和产品经理职业生涯规划两条线,并穿插对于互联网创业的一些思考。(《人人》高清思维导图见文章末尾)产品过程:“想清楚”→“做出来”→“推出去”职业生涯:“大话产品经理” →“产品经理的工作” →“产品经理的七层修炼与蜕变”创业建议:“组建团队”→“产品规划”→“大公司与创业公司” →“泛创业”本篇读_人人都是产品经理2.0电子书

Thread Pool Engine, and Work-Stealing scheduling algorithm-程序员宅基地

文章浏览阅读138次。http://pages.videotron.com/aminer/threadpool.htmhttp://pages.videotron.com/aminer/zip/threadpool.zip FPC Pascal v2.2.0+ / Delphi 5+http://pages.videotron.com/aminer/zip/pthreadpool_xe4.zip (for D..._work stealing的不同任务steal方案(窃取一半vs窃取一个大的任务粒度vs小的任务粒

kicad绿油开窗_KiCad里Pcbnew中各层的使用说明-程序员宅基地

文章浏览阅读581次。Kicad里Pcbnew提供了至多50个层供电路板设计师使用。总计32个铜层供导线走线(可覆铜)总计14个固定用途技术层12个技术层对(上技术层和下技术层对称),包括Adhesive,Solder Paste,Silk Screen,Solder Mask,Courtyard,Fabrication,共计6对。在KiCad里Pcbnew的层描述中,F.代表电路板上层(Front),B.代..._kicad铜开窗

浅谈逆向——OD断点简介(OD的使用3)_od断电需要过检测吗-程序员宅基地

文章浏览阅读7.6k次,点赞4次,收藏27次。浅谈逆向-OD断点简介常用断点INT 3断点硬件断点常用断点INT 3断点,硬件断点,内存断点,消息断点…INT 3断点常用,OD中可以使用bp命令或F2快捷键来设置/取消。当执行一个INT 3断点时,该地址处的内容被调试器用INT 3替换了。此时OD将INT 3隐藏起来,显示中断前的指令。由于INT 3指令的机器码时0xCC故此 也常称之为CC指令。当被调试进程执行INT 3指令导致一..._od断电需要过检测吗

Introduction to Causal Inference:Chapter 1因果推断概论-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。本文是学习brady neal于2020年开设的因果推断课程Introduction to Causal Inference的记录概述本chapter主要分四个部分:辛普森悖论为什么相关性不是因果关系什么展示了因果关系在观测性研究中如何发现因果关系1 因果推断的动机:辛普森悖论1.1 辛普森悖论案例辛普森悖论(Simpson‘s paradox)是广泛存在于统计学事件的一个现象,指的是分组下的统计表现与总体统计表现相悖。这里举了一个例子,假设有一个新的疾病:COVID-27有两种_introduction to causal inference

推荐文章

热门文章

相关标签