Java 语言特性
基本特性Java语言的特性包括: 简单易学:Java语言的语法与C++类似,但是去掉了一些复杂的特性,使得Java更加容易学习和使用。 面向对象:Java是一种纯面向对象的编程语言,所有的数据类型都是对象,所有的操作都是方法调用。 平台无关性:Java程序可以在不同的平台上运行,只需要安装相应的JVM即可。 安全性:Java提供了严格的安全机制,防止恶意代码对系统造成破坏。 自动内存管理:Java自动进行垃圾回收,程序员不需要手动管理内存。 多线程支持:Java提供了多线程支持,可以方便地实现并发编程。 异常处理:Java提供了异常处理机制,可以有效地处理程序中出现的错误。 开放性:Java是一种开放的编程语言,有大量的开源库和框架可供使用。 高性能:Java虚拟机(JVM)可以将字节码转换为本地机器码执行,具有较高的性能。 动态性:Java支持动态加载和卸载类,可以在运行时动态地修改程序行为。 版本的新特性Java历代版本的新特性如下: Java 1.0:Java语言首次发布,包括基本的面向对象特性和网络编程API。 Java...
Linux 三剑客
正则表达式菜鸟 MDN re 含义 * 匹配前面的子表达式零次或多次 . 匹配除换行符(\n、\r)之外的任何单个字符 ? 匹配前面的子表达式零次或一次 + 匹配前面的子表达式一次或多次 ^ 匹配输入字符串的开始位置 $ 匹配输入字符串的结束位置 [] 匹配所包含的任意一个字符 [^] 匹配未包含的任意字符 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符 {n} n 是一个非负整数。匹配确定的 n 次 {n,m} m 和 n 均为非负整数,其中n <= m。匹配 [n, m] 次 x|y 匹配 x 或 y 修饰符 含义 i ignore - 不区分大小写 g global - 全局匹配 m multi line - 多行匹配 s 特殊字符圆点 . 中包含换行符 \n grepgrep [OPTION...] PATTERNS [FILE...] awk菜鸟 awk — pattern scanning and processing...
Java 数据库框架
Java 数据库访问框架JDBCJDBC(Java Database Connectivity)是Java语言中用于连接和操作数据库的API。JDBC提供了一组标准接口,使得Java程序可以与各种关系型数据库进行交互,如Oracle、MySQL、SQL Server等。 JDBC的工作原理是通过驱动程序(Driver)来实现与数据库的连接。驱动程序是一个Java类库,它包含了与特定数据库通信所需的代码和协议。在使用JDBC时,需要先加载相应的驱动程序,然后通过驱动程序建立与数据库的连接,最后执行SQL语句或存储过程等操作。 JDBC的主要功能包括: 建立与数据库的连接:通过DriverManager类的getConnection()方法建立与数据库的连接。 执行SQL语句:通过Statement或PreparedStatement对象执行SQL语句,如查询数据、插入数据、更新数据等。 处理结果集:通过ResultSet对象处理查询结果集,如获取查询结果、遍历结果集等。 事务管理:通过Connection对象控制事务的提交、回滚等操作。 JDBC是Java...
Java实现文件上传下载
Java实现文件上传下载开始之前使用Linux,比较麻烦的一点就是和手机共享文件(下载电脑上的,上传手机上的), 目前存在的选择有: QQ,微信 优点:简单,安装即用 缺点:基于wine,慢,不稳定容易崩溃 Kde connection 优点:功能强大 缺点:依赖多,不稳定(连接不上),仅限于局域网 所以我就想用Java实现一个文件上传下载的小工具 简单的需求 启动程序会打开一个网页 网页显示二维码,手机浏览器扫描二维码在手机上打开相同网页 网页分为 “文件上传” 和 “文件下载” 两个部分 “文件上传” 用户选择手机上的文件上传 “文件下载” 显示电脑上的文件,并提供下载 设计我想的是使用快速原型,先实现基本的需求(文件上传和下载)再在基础功能上添加新的功能或者使得程序更易用 为了简单起见,我使用 SpringBoot 作为开发框架,我想想让程序能跑起来,再把它变得轻量快速 程序使用 MVC 架构 V : 负责和用户交互,提供文件上传下载的接口 异步获取二维码 C : 处理文件上传下载 M : 生成二维码 实现结果
网络编程模型
网络编程模型网络编程模型的核心: 服务器如何管理连接 服务器如何处理请求 以上两个设计点最终都和操作系统的 I/O 模型及进程模型相关 I/O模型:阻塞 、非阻塞、同步 、异步 进程模型:单进程、 多进程、多线程 PPC (Process per Connection) 父进程接受连接(图中accept) 父进程“fork”子进程(图中fork) 子进程处理连接的读写请求(图中子进程read、业务处理、write) 子进程关闭连接(图中子进程中的close) PPC 模式实现简单,比较适合服务器的连接数没那么多的情况(eg. pgsql) 而互联网兴起后,服务器的并发和访问量从几十剧增到成千上万,这种模式的弊端就凸显出来了,主要体现在如下几个方面: ...
将Gitee Pages 转移到自己的服务器
将Gitee Pages 转移到自己的服务器开始之前我在自己的电脑上用 hexo 框架配置了一个博客。本来一切安好直到最近换了个主题博客访问变得有点慢了(原因应该是js比较多。。。)但是我不想放弃现在的主题,所以就决定转移原来部署在Gitee Pages的博客到自己租的服务器(是的,我有服务器。但是只有一年,用完了还得倒数据,嫌麻烦。。。) 我发现网页所有的资源都在这个文件夹下 而这个文件夹被推送到了gitee 现在就好办了,直接从gitee克隆到自己的服务器就行了。 克隆复制这个链接 在服务器上找个合适的地方执行 1quanwei@VM-8-7-ubuntu:~/workplaceFolder$ git clone https://gitee.com/quanw20/quanw20.git 输入密码(因为是私有的)就克隆下来了 更新每次推送到gitee之后服务器上的数据都不会自动更新(不知道有没有什么hook之类的) 所以我会在每次更新之后向服务器发送一条命令用来拉取更新,吧结果写入log 1ssh name@host "cd...
Linux 系统管理
Linux 系统管理PS 查看进程状态12345ps [options]ps aux |grep <name>ps efps -u <username> Options: -A,-e,a Select all processes. Identical to -e. -a Select all processes except both session leaders and processes not associated with a terminal. -d Select all processes except session leaders. g Really all, even session leaders. -N,--deselect Select all processes except those that fulfill the specified conditions (negates the selection). T,t Select all processes...
Linux AT&T 汇编
开始之前大名鼎鼎的Hello World 1234567891011121314151617.data msg : .string "Hello Word!\n" len = . -msg.text.global _start _start : movl $len,%edx # len -> edx movl $msg,%ecx # msg -> ecx movl $1,%ebx movl $4,%eax # 系统调用号 int $0x80 # 调用 movl $0,%ebx # 退出代码 movl $1,%eax int $0x80 通用寄存器汇编就是在几个寄存器间倒来倒去 寄存器有两种概念,逻辑上的和物理上的,分别是: 架构相关寄存器(architectural register) 物理寄存器(physical...
三门问题和贝叶斯定理
三门问题也称为蒙提霍尔问题或蒙提霍尔悖论。这是一个经典的概率问题,最早由美国的数学家及电视主持人蒙提·霍尔(Monty Hall)在20世纪60年代初首次提出。 问题描述:你面前有三扇关闭的门,在其中一扇门后有奖品,另外两扇门后没有奖品。选手先选择其中一扇门,然后,主持人会在另外两扇门中打开一扇没有奖品的门。此时,选手可以选择是否更改自己的选择来获取奖品。请问,是否应该更改选择? 解决对于三门问题中新事件所提供的信息,也就是主持人打开一扇没有汽车的门后告诉你选择正确概率只有1/2,我们可以将其视为更新先前假设的过程。 在游戏开始前,我们有三个可能性:汽车在门A,汽车在门B,汽车在门C,每个可能性发生的先验概率都是1/3。而当主持人打开了门B,并告诉你选择正确的概率只有1/2时,这相当于给出了一个新的观测值(门B不含汽车),从而更新了我们的先验分布。 具体来说,我们可以根据贝叶斯定理计算更新后的后验分布。在这种情况下,我们需要计算的是汽车真实在门X(其中X=?)的概率,因此我们有: P(X|B) = P(B|X) * P(X)...
Netty 框架入门
优势 统一API,多模型 自带编解码器 多通信协议 高吞吐、低延迟、低资源消耗、少内存复制 安全 核心组件ChannelChannel 接口是 Netty 对网络操作抽象类,它除了包括基本的 I/O 操作,如 bind()、connect()、read()、write() 等 EventLoopEventLoop 定义了 Netty 的核心抽象,用于处理连接的生命周期中所发生的事件 主要作用是负责监听网络事件并调用事件处理器进行相关 I/O 操作的处理。 ChannelFutureNetty 是异步非阻塞的,所有的 I/O 操作都为异步的。 我们不能立刻得到操作是否执行成功。可以通过 ChannelFuture 接口的 addListener() 方法注册一个 ChannelFutureListener,当操作执行成功或者失败时,监听就会自动触发返回结果。 另外,我们还可以通过 ChannelFuture 接口的 sync()方法让异步的操作变成同步的 ChannelHandler123456789b.group(eventLoopGroup) ...

