LeetCode刷题记录
2. Add Two Numbers
Medium
Topics
Companies
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers...
more...
JNDI
# JNDI
JNDI(Java Naming and Directory Interface) 是 Java 提供的 Java 命名和目录接口 。通过调用 JNDI 的 API 应用程序可以定位资源和其他程序对象。 JNDI 是 Java EE 的重要部分,需要注意的是它并不只是包含了 DataSource(JDBC 数据源) , JNDI 可访问的现有的目录及服务有: JDBC 、 LDAP 、 RMI 、 DNS 、 NIS 、 CORBA 。
Naming Service 命名服务:
命名服务将名称和对象进行关联,提供通过名称找到对象的操作,例如:DNS 系统将计算机名和 IP...
more...
Gazebo+Ardupilot仿真
# Multi-UAV Gazebo Simulation
Tutorial for Multi-UAV (Quadcopters) simulation in Gazebo and Ardupilot.
# Installation
# Ubuntu
Ubuntu 20.04 inside a Virtual Machine (VM) used in this tutorial.
# Gazebo
The Gazebo version 11 is used in this tutorial. ROS noetic has gazebo11 but if there is problem...
more...
Java RMI
RMI 架构:
RMI 底层通讯采用了 Stub(运行在客户端) 和 Skeleton(运行在服务端) 机制, RMI 调用远程方法的大致如下:
RMI客户端 在调用远程方法时会先创建 Stub(sun.rmi.registry.RegistryImpl_Stub) 。
Stub 会将 Remote 对象传递给 远程引用层(java.rmi.server.RemoteRef) 并创建 java.rmi.server.RemoteCall(远程调用) 对象。
RemoteCall 序列化 RMI服务名称 、 Remote 对象。
RMI客户端 的 远程引用层 传输 RemoteCall...
more...
JNI安全基础
# JNI 安全基础
Java 语言是基于 C 语言实现的,Java 底层的很多 API 都是通过 JNI(Java Native Interface) 来实现的。通过 JNI 接口 C/C++ 和 Java 可以互相调用 (存在跨平台问题)。Java 可以通过 JNI 调用来弥补语言自身的不足 (代码安全性、内存操作等)。这个看似非常炫酷的特性其实自 JDK1.1 开始就有了,但是我们不得不去考虑 JNI 调用带来的一系列的安全问题!
本章节仍以本地命令执行为例讲解如何构建动态链接库供 Java 调用,也许很多人是第一次接触这个概念会比较陌生但是如果你了学习过 C/C++ 或者...
more...
java本地命令执行
# Java 本地命令执行
Java 原生提供了对本地系统命令执行的支持,黑客通常会 RCE利用漏洞 或者 WebShell 来执行系统终端命令控制服务器的目的。
对于开发者来说执行本地命令来实现某些程序功能 (如:ps 进程管理、top 内存管理等) 是一个正常的需求,而对于黑客来说 本地命令执行 是一种非常有利的入侵手段。
# Runtime 命令执行
在 Java 中我们通常会使用 java.lang.Runtime 类的 exec 方法来执行本地系统命令。
# Runtime 命令执行测试
runtime-exec2.jsp 执行 cmd...
more...
Java JDBC
# JDBC 基础
JDBC(Java Database Connectivity) 是 Java 提供对数据库进行连接、操作的标准 API。Java 自身并不会去实现对数据库的连接、查询、更新等操作而是通过抽象出数据库操作的 API 接口 ( JDBC ),不同的数据库提供商必须实现 JDBC 定义的接口从而也就实现了对数据库的一系列操作。
# JDBC Connection
Java 通过 java.sql.DriverManager 来管理所有数据库的驱动注册,所以如果想要建立数据库连接需要先在 java.sql.DriverManager 中注册对应的驱动类,然后调用...
more...
Java文件系统
# Java 文件系统
众所周知 Java 是一个跨平台的语言,不同的操作系统有着完全不一样的文件系统和特性。JDK 会根据不同的操作系统 ( AIX,Linux,MacOSX,Solaris,Unix,Windows ) 编译成不同的版本。
在 Java 语言中对文件的任何操作最终都是通过 JNI 调用 C语言 函数实现的。Java 为了能够实现跨操作系统对文件进行操作抽象了一个叫做 FileSystem 的对象出来,不同的操作系统只需要实现起抽象出来的文件操作方法即可实现跨平台的文件操作了。
# Java FileSystem
在 Java SE 中内置了两类文件系统: java.io...
more...
sun.misc.Unsafe
# sun.misc.Unsafe
sun.misc.Unsafe 是 Java 底层 API ( 仅限Java内部使用,反射可调用 ) 提供的一个神奇的 Java 类, Unsafe 提供了非常底层的 内存、CAS、线程调度、类、对象 等操作、 Unsafe 正如它的名字一样它提供的几乎所有的方法都是不安全的,本节只讲解如何使用 Unsafe 定义 Java 类、创建类实例。
# 如何获取 Unsafe 对象
Unsafe 是 Java 内部 API,外部是禁止调用的,在编译 Java 类时如果检测到引用了 Unsafe 类也会有禁止使用的警告: Unsafe是内部专用 API,...
more...