目录

菠萝🍍的博客

有谁不喜欢吃菠萝呢

【LeetCode刷题】1115. 交替打印FooBar

题目 我们提供一个类: class FooBar { public void foo() { for (int i = 0; i < n; i++) { print("foo"); } } public void bar() { for (int i = 0; i < n; i++) { print("bar"); } } } 两个不同的线程将会共用一个 FooBar 实例。其中一个线程将会调用 foo() 方法,另一个线程将会调用 bar() 方法。 请设计修改程序,以确保 "foobar" 被输出 n 次。 示例 1: 输入: n = 1 输出: "foobar" 解释: 这里有两个线程被异步启动。其中一个调用 foo() 方法, 另一个调用 bar() 方法,"foobar" 将被输出一次。 示例 2: 输入: n = 2 输出: "foobarfoobar" 解释: "foobar" 将被输出两次。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/print-foobar-alternately 著作....

POI开发指南2

图像 图像是图形支持的一部分。要添加图像,只需在绘图首字母上调用createPicture()。在编写时,支持以下类型: PNG JPG DIB 应该注意的是,一旦将一幅图像添加到一张纸上,任何现有的图形都可能被擦除。 //create a new workbook Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); //add picture data to this workbook. InputStream is = new FileInputStream("image1.jpeg"); byte[] bytes = IOUtils.toByteArray(is); int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG); is.close(); CreationHelper helper = wb.getCreationHelper(); //create sheet Sheet sheet = wb.createSheet(); ....

POI开发指南1

POI开发指南1,来源 创建一个新的工作簿 Workbook wb = new HSSFWorkbook(); try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { wb.write(fileOut); } Workbook wb = new XSSFWorkbook(); try (OutputStream fileOut = new FileOutputStream("workbook.xlsx")) { wb.write(fileOut); } 这里应当注意的是,创建空的工作簿是无法打开的。HSSX=>.xls文件 XSSF=>.xlsx文件 创建一个新表 Workbook wb = new HSSFWorkbook(); // or new XSSFWorkbook(); Sheet sheet1 = wb.createSheet("new sheet"); Sheet sheet2 = wb.createSheet("second sheet"); // 请注意,工作表名称是Exc....

【LeetCode刷题】1117.H2O生成

【LeetCode刷题】1117.H2O生成 现在有两种线程,氢 oxygen 和氧 hydrogen,你的目标是组织这两种线程来产生水分子。 存在一个屏障(barrier)使得每个线程必须等候直到一个完整水分子能够被产生出来。 氢和氧线程会被分别给予 releaseHydrogen 和 releaseOxygen 方法来允许它们突破屏障。 这些线程应该三三成组突破屏障并能立即组合产生一个水分子。 你必须保证产生一个水分子所需线程的结合必须发生在下一个水分子产生之前。 换句话说: 如果一个氧线程到达屏障时没有氢线程到达,它必须等候直到两个氢线程到达。 如果一个氢线程到达屏障时没有其它线程到达,它必须等候直到一个氧线程和另一个氢线程到达。 书写满足这些限制条件的氢、氧线程同步代码。 示例 1: 输入: "HOH" 输出: "HHO" 解释: "HOH" 和 "OHH" 依然都是有效解。 示例 2: 输入: "OOHHHH" 输出: "HHOHHO" 解释: "HOHHHO", "OHHHHO", "HHOHOH", "HOHHOH", "OHHHOH", "HHOOHH", "HO....

【转载】新年彩蛋:Spring Boot自定义Banner

新年彩蛋:Spring Boot 自定义 Banner 借用 Spring Boot 的 Banner 向各位程序猿同仁们问候一声:Happy New Year。 接下来我们就来介绍一下这个轻松愉快的自定义 banner 功能。实现的方式非常简单,我们只需要在 Spring Boot 工程的 /src/main/resources 目录下创建一个 banner.txt 文件,然后将 ASCII 字符画复制进去,就能替换默认的 banner 了。比如上图中的输出,就采用了下面的 banner.txt 内容: ${AnsiColor.BRIGHT_GREEN} ## ## ### ######## ######## ## ## ## ## ######## ## ## ## ## ######## ### ######## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### #### ## ## ## ## ## #### ## ## ## #....

Netty的复习【3】Buffer、NIO

Buffer ByteBuffer可以理解为放在内存中的一个数组。Buffer是一个抽象类,它的具体实现有 ByteBuffer,CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer。为什么没有string,用char代替了。 在这些类型中,使用最多的是ByteBuffer,可以在网络上进行传输。 该图描述的是Buffer的分配、读写和常用操作 原生JDK网络编程- Buffer capacity 作为一个内存块,Buffer有一个固定的大小值,也叫“capacity”.你只能往里写capacity个byte、long,char等类型。一旦Buffer满了,需要将其清空(通过读数据或者清除数据)才能继续写数据往里写数据。 position 当你写数据到Buffer中时,position表示当前的位置。初始的position值为0.当一个byte、long等数据写到Buffer后, position会向前移动到下一个可插入数据的Buffer单元。position最大可为capacity – 1. 当读取....

Netty的复习【2】AIO

水平触发和边缘触发 水平触发Level_triggered 当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次性全部读完(如读写缓冲区太小),那么下次调用epoll_wait()时,它还会通知你在上没读写万的文件描述符上继续读写,当然如果你一直不去读写,它会一直通知你!!!如果系统中有大量你不需要读写的就绪文件描述符,而它们每次都会返回,这样会大大降低处理程序检索自己关心的就绪文件描述符的效率。 边缘触发Edge_triggered 当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据全部读写完(如读写缓冲区太小),那么下次调用epoll_wait()时,它不会通知你,也就是它只会通知你一次,知道该文件描述符上出现第二次可读写事件才会通知你!!!这种模式比水平触发效率高,系统中不会充斥大量你不关心的就绪文件描述符!! select(),poll()模型都是水平触发模式,信号驱动IO是边缘触发模式,epoll()模型即支持水平触发,也支持边缘触发,默认是水平触发。 原生的JD....

Linux中mysql表的导出导入【转载】

导出整个数据库中的所有数据 1、在linux命令行下输入: mysqldump -uUserName -pPasword dabaseName > fileName.sql fileName.sql最好加上路径名 导出数据库中的某个表的数据 mysqldump -uUserName -pPassword dabaseName tableName > fileName.sql 导出整个数据库中的所有的表结构 在linux命令行下输入: mysqldump -uUserName -pPassword -d dabaseName > fileName.sql 注意:是加了-d 导出整个数据库中某个表的表结构 在linux命令行下输入: mysqldump -uUserName -pPassword -d dabaseName tableName > fileName.sql 注意:是加了-d 导出查询的数据 select * from tableName into outfile "/home/vobile/tn.txt" 导入mysql方法1 进入linu....

MySQL 出现的时区问题【转载】

MySQL 出现的时区问题 使用低版本的MySQL jdbc驱动,不会存在时区的问题。 1.驱动版本 问题 Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 启动时,发现提示说: 已经不赞成加载“com.mysql.jdbc.Driver”这个类,新的驱动类为“com.mysql.cj.jdbc.Driver”。 2.时区问题 发现读出数据库中的时间相差几个小时,这是由于数据库和系统时区差异所造成的。 需要在数据库连接串中设置时区。 serverTimezone=GMT即可解决问题,如果需要使用GMT+8时区,需要写成GMT%2B8,否则会被解析为空 serverTimezone=GMT%2B....

Netty的复习【1】

OSI七层模型【记不太清了,要好好复习一下】 OSI七层模型各层作用 物理层 物理层并不是物理媒体本身,它只是开放系统中利用物理媒体实现物理连接的功能描述和执行连接的规程。 DTE、DCE DTE数据终端:手机 DCE数据通信设备:光猫 作用 1.提供数据传输的实际通道 2.传输数据 数据链路层 数据链路的建立,拆除,对数据的检错,纠错是数据链路层的基本任务。 网卡可以看作独立的数据链路层产品。 网络层 路由选择和中继,在一条数据链路上复用多条网络连接 传输层 定义传输数据的协议端口号,以及流控和差错校验。 会话层 建立、管理、终止会话 表示层 把应用层提供的信息变换为能够共同理解的形式 应用层 网络服务与最终用户的一个接口 TCP/IP协议 端口号:端口号用来识别同一台计算机中进行通信的不同应用程序。因此,也被称为程序地址。 三次握手 首先标志位SYN置为1,客户端将这个报文发送给服务器端。 然后客户端的状态变为SYN_CENT,然后服务端把SYN,ACK标志位置为1,大写的ACK和小写的ack并不一样,小写的ack表示一个具体的值,seq=K中的K值为随机数,然后服务端....

【LeetCode刷题】按序打印

原题:按序打印 我们提供了一个类: public class Foo { public void one() { print("one"); } public void two() { print("two"); } public void three() { print("three"); } } 三个不同的线程将会共用一个 Foo 实例。 线程 A 将会调用 one() 方法 线程 B 将会调用 two() 方法 线程 C 将会调用 three() 方法 请设计修改程序,以确保 two() 方法在 one() 方法之后被执行,three() 方法在 two() 方法之后被执行。 示例 1: 输入: [1,2,3] 输出: "onetwothree" 解释: 有三个线程会被异步启动。 输入 [1,2,3] 表示线程 A 将会调用 one() 方法,线程 B 将会调用 two() 方法,线程 C 将会调用 three() 方法。 正确的输出是 "onetwothree"。 示例 2: 输入: [1,3,2] 输出: "onetwothree" 解释: 输入 [1,3,2] 表示....

【转载】"您与此网站之间建立的连接并非完全安全" ????

有时候即使SSL证书有效, Chrome还是显示"并非完全安全"?比如: 肿么肥事呢?原来一个网页不完全由1个https包得到的, 而是由多个资源共同组成的,打开网络工具就可以看到: 在'Size'那一列, 只有第1个资源(通常是html)是不会走缓存的,这个资源也来自浏览器地址栏里面所看到的url. 光第1个资源上了https其他资源只是http并不能保证网站就是完全安全的了. 这时候是'不完全安全'状态, 但是比'危险状态'要安全, 因为毕竟第1个'主导'资源是信任的, 由它调用的其他http资源相对还是比较可靠的. 没有人能授权信任http, 因为http从网络层上就已经不安全了 所以以后要杜绝这类隐患: 代码里的元素:图片,js,css,等调用外面的http://路径; 使用iframe到http://路径上; 推荐使用相对路径(CDN的话除外, 也要记得使用https的cdn哦): ———————————————— 版权声明:本文为CSDN博主「流浪的狗和一坨屎」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:....

Maven私服(Java升级计划7)

私服简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。 我们可以使用专门的 Maven 仓库管理软件来搭建私服,比如:Apache Archiva,Artifactory,Sonatype Nexus。这里我们使用 Sonatype Nexus。 上面这部分转载自博客Nexus安装、使用说明、问题总结,由于使用转载博客的安装无法进行,这里我说明怎么安装 安装nexus nexus下载地址:https://www.sonatype.com/download-oss-sonatype 解压 进入bin目录 打开cmd窗口,在这个目录下进行安装 启动服务 nexus.exe /run (启动成功后不要关闭命令行窗口) 当看到图中所示界面时,表示启动成功 安装服务 nexus.exe /install (重新使用新的命令行安装,可能出现权限不足,请以管理员身份运行命令行) 怎么打开管理员身份的c....

Java中的一些并发工具

1. 【转载】类CountDownLatch 1.1 CountDownLatch介绍 CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行。 1.2 CountDownLatch原理 CountDownLatch是通过一个计数器来实现的,计数器的初始化值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已完成任务,然后在闭锁上等待的线程就可以恢复执行任务。 1.2.1 CountDownLatch的伪代码 Main thread start Create CountDownLatch for N threads Create and start N threads Main thead wait on latch N threads completes there tasks are returns Main thread resume execution 1.2.2 CountDownLatch....

JAVA并发编程: CAS和AQS

说起JAVA并发编程,就不得不聊聊CAS(Compare And Swap)和AQS了(AbstractQueuedSynchronizer)。

单例模式

因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。

volatile实现机制

【转载】Java 并发编程:volatile的使用及其原理 作者:liuxiaopeng 博客地址:http://www.cnblogs.com/paddix/ valatile的作用 对volatile变量的单次读/写操作可以保证原子性的,如long和double类型变量,但是并不能保证i++这种操作的原子性,因为本质上i++是读、写两次操作。 volatile的使用 1、防止重排序 我们从一个最经典的例子来分析重排序问题。大家应该都很熟悉单例模式的实现,而在并发环境下的单例实现方式,我们通常可以采用双重检查加锁(DCL)的方式来实现。其源码如下: public class Singleton { public static volatile Singleton singleton; /** * 构造函数私有,禁止外部实例化 */ private Singleton() {}; public static Singleton getInstance() { if (singleton == null) { synchronized (singleton) { if (single....

synchronized(Java升级计划2)

synchronized原理 为什么会出现脏读呢? 当两个线程同时对一个共享数据进行操作的时候,如下图: 会把内存中的x=1读到工作空间,然后进行+1,这个时候就有一个CPU的时间片轮询的情况。当线程1进行执行的时候,读取x=1到工作空间,然后+1,刚好CPU轮询的时间到了,此时线程1中x=2的结果还没有刷新到内存中,导致线程2读取的数据是线程1更改数值之前的,出现脏读。 这里还有一种情况是,如果内存中的x=1是static修饰的,那么会出现跳号的情况,比如:线程1拿到x+1,此时x已经改为2了,但是没有输出,然后时间片轮询线程2执行,线程2拿到的值就是2了 当一段代码块被synchronized修饰的时候,那段代码被一个线程执行时,要么全部执行,要么都不执行,当执行到一半的时候,另一个线程进行访问,就会等待这个线程执行完成后再切换。此时synchronized具有的特性:独占性,排他性,可见性,原子性 为什么具有可见性呢?因为对于线程1中修改的值,线程2要能够感知到线程1把synchronized所包含的变量给修改了,此时对于线程2来说就具有可见性 synchronized (....

Java内存模型(Java升级计划1)

Java内存模型 JVM什么时候启动 类被调用的时候 启动JVM线程,再启动其他的线程,包括main线程,也就是JVM线程创建了其他的线程。 线程在JVM中是怎么运行的 方法区:存放的是一些加载的类信息(类加载器加载classload),常量,static变量,JIT编译后的代码。,也可以出现out of memory JIT编译(just-in-time compilation)狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”。JIT编译是动态编译的一种特例。JIT编译一词后来被泛化,时常与动态编译等价;但要注意广义与狭义的JIT编译所指的区别。 Java堆区:大量的实例对象,也可以出现out of memory 方法区和堆区可以实现信息共享 VIM Stack:Java在运行时的内存模型,数据私有,不能实现数据共享 每一个方法有唯一的栈帧去对应去存放数据 当栈帧放满了VIM Stack时,任然不断的添加,就会出现内存溢出,也可以出现out of memory 程序计数器(PC):Java线程的私有数据,这个数据就是执行下一条指令的地址,也就是说当这条指....

前端笔记

前端笔记 标签(空格分隔): javascript jquery easyui html html5 javascript中""==0为true 一些新手web0开发者会在写JS 中这样写, if(a == 0){ console.log("进来了"); } 一般会认为不会进入,实际JS 在运行时,当a 等于空的字符串时 JS会判断其与0是相等的 所以 判断是否等于0时,可以这样判断 用String(a) == 0 这样包裹一下或者 a+""==0 这样也是可以的 JavaScript中实现键值对的方法 在写js的时候,碰到需要使用类似hashmap的情况。 1、有一种比较简单的实现办法,但是使用起来局限性比较大。 var obj1={"a":1,"b":2}; alert(obj1["a"]); 这是一种功能非常简单的键值对,只能够小范围的定义和取值。 正则 //数字 return /^[0-9]+.?[0-9]*$/.test(value); frame自适应高度 function setIframeHeight(iframe) { if (iframe) { v....