![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java学习笔记
文章平均质量分 60
haohulala
进击的蛋糕(dangao123coding)
展开
-
【金融数据分析】计算沪深300指数行业权重分布并用饼图展示
前面的文章我们已经介绍了如何获取沪深300成分股所述行业以及权重的数据,想要了解这部分内容的小伙伴可以阅读上一篇文章springboot+jdbcTemplate+sqlite编程示例——以沪深300成分股数据处理为例-CSDN博客那么有了上文获取的数据,我们实际上可以计算一下沪深300按照行业分布的权重占比数据,最后的成果如下所示是不是效果还挺库的,下面就来介绍一下技术细节。原创 2023-12-10 15:44:51 · 1270 阅读 · 0 评论 -
springboot+jdbcTemplate+sqlite编程示例——以沪深300成分股数据处理为例
本文介绍了使用springboot+jdbcTemplate+sqlite进行编程的用例,并且以处理沪深300成分股数据为例子,我觉得如果我们自己写一些小玩具的话,这样的组合会比较好一点。那么本文内容就到此结束啦,有什么想和我讨论的欢迎评论区留言。原创 2023-12-09 22:32:19 · 809 阅读 · 0 评论 -
java状态机的一种优雅写法
再说说execute(),这个方法接收ActionEnum作为参数,然后会遍历列表,寻找一条当前状态经过相应动作变化得到的下一个对象的这么一个状态信息,如果找到了就执行event中的handle()方法,并且将当前状态进行转移,最后将StateTransaction返回,如果没找到就返回null。我们可以用非常多的方法实现状态机,比如用茫茫多的if-else来进行条件判断,但是这种原始的方法并不够优雅,这篇文章就来介绍一个状态机优雅的实现方法。上面准备工作都做完后,我们需要一个状态机类,来进行状态转移。原创 2023-03-27 21:54:31 · 4071 阅读 · 2 评论 -
【springboot项目】纳米搜索引擎
到这里终于把demo做完了,目前为止的话,算是实现了基本目标,但是项目其实还有很多模块没有完成,比如当检索的文章数量非常非常多的时候,服务器是否能抗住这个数据压力,以及当页面元素排列有问题的时候,是否还可以正确抓取数据,还有,我们是否可以基于已经爬取的数据做进一步分析,比如分析csdn文章趋势,提供当前的热点信息等等。以上的信息都是可以拓展的点。我认为一个好的软件,一定是迭代出来,只有在时间的过程中发现问题,然后改进问题,软件才能越来越健壮。原创 2023-03-19 12:59:59 · 294 阅读 · 0 评论 -
【java查漏补缺】网络编程
可以服务多个客户端的服务器模型的基本逻辑是,持续监听accept()方法是否有返回,一旦有返回,就接收其返回的Socket对象,并且新建立一个线程执行服务器逻辑,然后再持续监听accept()方法,重复上述步骤。上述例子中ServerDemo是服务器类,ClientDemo是客户端类,连接建立后,客户端可以给服务器发送消息,知道服务器收到"END"字符串的时候停止服务。下面就是客户端和服务器的简单例子,这个简单的例子中,服务器只能和一个客户端进行通信,并且当客户端连接结束后,客户端和服务器同时停止。原创 2023-01-10 13:02:48 · 371 阅读 · 0 评论 -
【java查漏补缺】File类的使用
当我们使用list()函数的时候传入了一个FilenameFilter参数的时候,首先会调用无参的list()函数,获取目录下所有文件名,然后判断一下获取的文件名数组和过滤器对象是否为空,如果两个都为空,那么无参的list()函数得到的结果,否则就回调过滤器的accept()函数进行过滤,符合条件的文件名就存到List容器中,最后将容器中的数据打包成String数组返回。有的时候,我们需要对文件名按照一定的顺序进行排列输出,这时候就可以将上面的代码进行一定修改。原创 2023-01-08 18:38:54 · 382 阅读 · 0 评论 -
用友一面面经
4 每个红色结点的两个子结点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色结点)5.从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点。3.每个叶子结点都是黑色的空结点(NIL结点)。这个问题同双亲委派机制。1.结点是红色或黑色。原创 2022-09-01 18:19:46 · 321 阅读 · 0 评论 -
滴滴二面总结
记录一下滴滴二面没有答上来的两个题目问题一:线程池如何知道线程的状态这个问题我不知道是不是应该答线程的五种状态并发编程:java线程池的五个状态_芳的程序员的博客-CSDN博客_java 线程池状态问题二:synchronize修饰静态方法和非静态方法的区别修饰静态方法,锁是加在类上的,类的所有对象竞争一把锁;修饰非静态方法,锁加在单个对象上,不同对象间没有竞争关系。synchronized修饰静态方法和非静态方法 - 简书首先,在java中,类只能被加载一次,引用会有多个。然后,静态方法是不属原创 2022-06-20 17:28:17 · 967 阅读 · 0 评论 -
懒汉式单例模式
今天面试被问了懒汉式单例模式,没有答上来,现将答案记录下来以上便是懒汉式单例模式的写法,现在对于代码做一个解析1. 使用volatile是为了防止指令重排2. 是为了加快多线程模式下的运行速率,比如已经创建了一个实例,那么就不需要去竞争锁了3+4. 是为了防止多线程模式下重复创建单例。有可能线程A竞争到了锁,然后创建了实例,退出了锁,此时线程B也进到临界区,此时如果没有if判断是否为null,那么就会重复创建实例5. 创建单例...原创 2022-06-09 18:03:13 · 1640 阅读 · 0 评论 -
JAVA泛型编程
最近在项目中发现了一个问题,就是我需要处理不同的实体类集合,比如List<ACUser>和List<ACDepartment>,我希望有一个函数可以同时打印这两个集合,于是就想写成下面的形式private void print(List<ACUser> list){ ...}private void print(List<ACDepartment> list){ ...}这是一个同名函数的重载,假设我们遍历的不是lis..原创 2022-05-23 10:34:56 · 941 阅读 · 0 评论 -
记录java使用rsyslog的一次实验
详情rsyslog的基本架构图如下。这个实验的需求是测试两台服务器之间,使用rsyslog进行日志传输的性能。rsyslog网上的资料非常少,使用java进行rsyslog收发的资料就更少了。java是有一个jar包可以进行rsyslog编程的,在pom中引入如下坐标 <!-- https://mvnrepository.com/artifact/org.syslog4j/syslog4j --> <dependency> .原创 2022-05-07 13:38:17 · 1633 阅读 · 0 评论 -
我用java分析了原神抽卡记录
起因我们都知道原神抽卡是有保底机制的,但是游戏里面只能按页查看抽卡记录,并没有各种数据统计,为了能够优化大家的游戏体验,本文就带大家用java爬虫来获取抽卡信息。抽卡信息api解析由于我用的是安卓(鸿蒙)手机,所有就介绍安卓获取信息的办法。对于每一个角色,在游戏内查看记录的时候都会有一个特定的api,我们需要获得这个api。安卓(鸿蒙)的获取方法是 祈愿->查看历史记录->断网(手动断开手机的网络连接),然后把相应的api复制下来。就是上面这个页面,断网后点击右上方橘原创 2022-04-13 19:50:17 · 17498 阅读 · 11 评论 -
java多线程处理消息队列数据的一个案例
介绍本次案例的起因是,原本使用@Async注解进行异步调用的某个方法会占用spring线程池的资源,所以需要把这个方法变成同步,但是处理的函数得是异步的。具体的改进如下图所示。这样做的话,处理线程就会一直在运行,不会占用spring的线程池资源。并且在处理线程中可以写一些控制代码,比如为了防止无数据时cpu空转,可以写一个控制逻辑让线程在没有数据一段时间后休眠一定时间。在生产端也可以对数据进行控制,比如数据过多的时候,使用一个while(queen.size>maxSize)自旋,让数原创 2022-04-12 15:08:11 · 2446 阅读 · 0 评论 -
javaFX游戏制作:游戏循环与控制
我们知道,游戏程序最主要是就是游戏循环,通俗点来说,就是主线程会不断循环控制游戏的各种状态,并告知绘图线程需要绘制那些图片。本文,我们用最简单的文字游戏来做一个简单的游戏循环与控制的例子。最终效果最简单的文字游戏的玩法就是点击屏幕,然后推进故事,本文的案例将会相应鼠标点击事件,并且做一个简单的场景切换,效果如下所示。场景类从上面的例子可以看出,文字游戏最重要的元素就是场景,其中场景包括背景图,人物图以及人物的对话。控制器控制的最小单元就是场景,场景的定义如下所示@Data原创 2022-04-08 10:35:48 · 5247 阅读 · 2 评论 -
JavaFX游戏制作:对话框绘制
对话框是很多游戏都有的内容,当我们观察游戏的对话框,会发现其主要内容有:人物头像,对话内容以及对话框背景贴图,这篇文章就主要对对话框进行绘制。对话框实体类除了上面我们提到的主要内容以外,我们还需要模拟对话框中文字延时展示的效果,也就是每隔一段时间多显示几个字这样的效果。我们采用延时计数的形式进行实现,每当计数器到了某个值的时候才让字符串指针前进,并且当字符串指针已经到达字符串的尾部的时候,将不再前进。@Data@NoArgsConstructor@AllArgsConstructor//原创 2022-04-05 20:25:57 · 1959 阅读 · 0 评论 -
JavaFX游戏制作:让你的精灵动起来
电子游戏最重要的表现形式我认为是动作。当然精美的立绘也可以给人非常棒的感官体验,但是能动的角色往往更能让人有心驰神往的感觉。这篇文章我将借助JavaFX让精灵动起来。动画实体类动画实体类主要存放动画的每一帧,以及长宽和位置信息等等基础信息。与之前的图片类不同的是,我们定义了一个图片指针,指向将要绘制的下一帧信息。@Data@NoArgsConstructor// 动画实体public class AnimEntity { // 图片集合 private List&l原创 2022-04-05 19:09:26 · 2882 阅读 · 1 评论 -
JavaFX游戏制作:瓦片地图绘制
在进行2d游戏制作的时候,通常都会绘制瓦片地图,所谓的瓦片地图,实际上就是一小块一小块的图片绘制成一张大地图,这篇文章就简单介绍一下瓦片地图绘制的思路地图元素地图元素存储了待绘制的图片,以及图片的长宽信息。@Data@NoArgsConstructor@AllArgsConstructor// 瓦片地图上的瓦片public class MapComponent { // 长度和宽度 private int height; private int width;原创 2022-04-05 14:45:48 · 3690 阅读 · 0 评论 -
JavaFX游戏制作思路
最近在学习JavaFX游戏制作,这篇文章将自己的思考所得记录下来。JavaFX游戏制作主要是在Canvas内绘画。每一帧都先检查所有的动作,然后将相应的组件绘制上去。由此可见,最重要的类就是组件,其中组件包括,位置,长宽,图片以及图层等信息,并且每个组件可能还会有动作(比如游戏中的敌人,会自己找到你,并且攻击你)。我定义了一个基础的Component类记录组件的基础功能@Datapublic class Component{ // 对应图片的url private St原创 2022-04-02 20:34:49 · 1799 阅读 · 1 评论 -
mysql的with关键字
今天学了一个mysql的技巧,使用with关系可以在一个sql里面写多个查询比如,我需要先根据条件从表中查出某个字段,然后再根据这个字段查出所有与该字段相关的数据,使用的sql如下所示with getGraphId as (select GraphId from file_graph_opt where strsourcefile="062021A考勤..xlsx"), getResult as (select distinct strsourcefile, strdestfile,st原创 2022-03-23 13:38:06 · 1577 阅读 · 0 评论 -
java多线程读写excel文件
使用两个线程,一个线程读,一个线程写,实际上就是一个典型的生产者-消费者模型public class Application { private String prefix = "G:/JAVA资料/"; private String readFilename = prefix + "curblock-笔试-1504_人口、人口密度统计年鉴_20191113.xlsx"; private String writeFilename = prefix + "new.xlsx";原创 2022-02-22 09:44:37 · 4675 阅读 · 0 评论 -
自制简易线程池
该文章代码来自黑马程序员全面深入学习Java并发编程,JUC并发编程全套教程_哔哩哔哩_bilibili阻塞队列public class BlockingQueue<T> { // 任务队列 private Queue<T> queue = new LinkedList<T>(); // 锁 private ReentrantLock lock = new ReentrantLock(); // 生产者队列原创 2022-01-12 18:44:37 · 1015 阅读 · 0 评论 -
简易Spring IOC实现
本代码来自https://www.bilibili.com/video/BV1Np4y1z7BU?p=137spring IOC相关接口分析BeanFactory解析BeanFactory是最基础的一个接口,他之定义了IOC容器的基本规范,但是不规定具体要生产那些产品,具体的生产步骤交给该接口的子实现类去实现。public interface BeanFactory { String FACTORY_BEAN_PREFIX = "&"; // 根据beanName获取IOC原创 2022-01-11 15:36:36 · 366 阅读 · 0 评论 -
建造者模式的简单实例
黑马程序员Java设计模式详解,全网最全23种Java设计模式(图解+框架源码分析+实战)_哔哩哔哩_bilibili建造者抽象类public abstract class Builder { protected Bike bike = new Bike(); public abstract void buildFrame(); public abstract void buildSeat(); public abstract Bike createBike原创 2022-01-07 20:55:21 · 515 阅读 · 0 评论 -
工厂模式的简单实例
工厂模式在软件设计中运用非常广泛,这篇文章就记录一个工厂模式的简单例子。黑马程序员Java设计模式详解,全网最全23种Java设计模式(图解+框架源码分析+实战)_哔哩哔哩_bilibili首先是一些准备工作,设计一个咖啡抽象类,然后有两个类继承这个抽象类,分别是美式咖啡类和拿铁咖啡类。public abstract class Coffee { // 加糖 public void addsugar(){ System.out.println("加糖");原创 2022-01-07 14:21:16 · 1385 阅读 · 0 评论 -
mysql如何实现ACID
知识点来自于阿里面试官,确实强悍,还好我会MySQL事务ACID的底层实现原理_哔哩哔哩_bilibili我们都知道ACID指的是:原子性,持久性,隔离性和一致性原子性:主要依靠undo.log日志实现,即在事务失败时执行回滚。undo.log日志会记录事务执行的sql,当事务需要回滚时,通过反向补偿回滚数据库状态持久性:主要依靠redo.log日志实现。首先,mysql持久化通过缓存来提高效率,即在select时先查缓存,再查磁盘;在update时先更新缓冲,再更新磁盘。以减少磁盘io次数,提高原创 2021-12-29 18:14:52 · 837 阅读 · 0 评论 -
自制简易Spring IoC容器
什么是IoC我们知道,Spring主要是由IoC和AOP两个部分组成,这篇文章只讨论IoC。IoC的中文翻译是“控制反转”,我觉得这个名称特别唬人,看起来好像非常厉害,但是又不知道具体是做什么的。其实用大白话说,IoC容器就是一段用来控制和管理Java中bean对象实例化以及调用的程序。我们使用IoC容器大体上有两个需求:其一,使得我们的程序的耦合性降低,当需求发生变更的时候,只需要修改配置文件即可(即尽量少地在原来的程序中做修改)。其二,每一个类我们只需要其中的一个实例,比如我们的Co原创 2021-12-28 15:03:01 · 758 阅读 · 0 评论 -
自制简易Tomcat服务器
在学习javaweb的时候我感觉自己是很懵逼的,因为好像就是写servlet然后配置web.xml,就可以让服务器提供服务了,对于这整个过程都不是很了解。为了弄懂整个的过程,我就找了黑马的自制简易Tomcat的视频,现将代码记录与这篇文章中。相信你看完整个过程,会对javaweb有更深的理解模拟浏览器给服务器发送请求// 模拟浏览器向服务器发送HTTP请求public class TestClient { private static Socket socket = null;原创 2021-12-26 13:51:07 · 1070 阅读 · 0 评论 -
java中PriorityQueue源码阅读
PriorityQueue实际上是一个小根堆(大根堆),具体堆顶元素是最大元素还是最小元素取决于你传入的比较器,默认是小根堆,即每次堆顶拿到的是最小的元素。我们来看一下实例 public static void main(String[] args) { PriorityQueue<int[]> q = new PriorityQueue<>((a,b)->a[0]-b[0]); q.add(new int[]{2,5});原创 2021-12-24 13:37:17 · 1061 阅读 · 0 评论 -
mysql索引学习笔记
最近看到一个视频对于mysql索引的讲解非常好,于是将部分内容记录下来。【编程不良人】这一次彻底搞定MySQL索引、从此不在恐惧面试_哔哩哔哩_bilibilimysql中的常见索引:主键索引:就是我们常用的primarykey普通索引:就是给某一列加上索引唯一索引:与主键索引的区别就是可以为null复合索引:使用多个类组成索引索引的创建下面我们使用sql语句在建表时创建索引create table t_user ( id varchar(20) primary k.原创 2021-12-24 10:06:17 · 516 阅读 · 0 评论 -
java自定义注解实例
之前一直不懂注解是怎么回事,今天看到一篇非常好的文章,讲解了注解的使用方法,现将实例记录下来。java注解是怎么实现的? - 知乎注解的使用有三个步骤:定义注解,使用注解和读取注解首先我们定义三个注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface MyBefore {}@Target(ElementType.METHOD)@Retention(RetentionPo原创 2021-12-23 14:08:29 · 655 阅读 · 0 评论 -
【java多线程】多线程编程实例
之前学习多线程的时候一直不知道多线程道理有哪些应用,最近发现了一个java多线程的应用,那就是使用BIO的方式开发一个客户端与服务器的简单通信模型。所谓BIO就是同步阻塞式通信方式。所谓同步就是指在逻辑上,多个客户端可以同时发送消息;所谓阻塞,则是指服务器在建立连接后,如果没有接收到客户端的消息,那么服务端的线程将会被阻塞,直到接收到消息被唤醒。(以上是我的理解,如有不对,欢迎与我讨论)在服务端编程时,我们可以直接在建立一个链接后就创建一个线程。但是这种方法是有缺陷的,比如当连接很多的时候,那么不停原创 2021-12-22 10:37:01 · 444 阅读 · 0 评论 -
java中的动态代理
反射反射是动态代理的基础,通过反射,我们可以动态的实例化对象,下面是反射的一个简单实例public class ReflectDemo { public void sayHello(String name){ System.out.println("hello " + name); } public static void main(String[] args) throws Exception { // 通过反射创建对象原创 2021-12-21 16:29:53 · 534 阅读 · 0 评论 -
【java多线程】乐观锁与悲观锁
乐观锁所谓乐观锁,就是认为数据被修改这件事是不常见的,于是使用相对较弱的版本控制进行同步。具体的做法有在数据库的表中添加version字段,每次更新操作的时候检查version字段的值是否一致,只有当值一致的时候才更新。具体的例子如下public int updateEntry(long id){ //(1)使用乐观锁获取指定记录 EntryObject entry = query("select * from table1 where id = #{id}", id);原创 2021-12-19 20:03:38 · 873 阅读 · 0 评论 -
【java多线程】线程的等待与通知
线程的创建java线程创建一般有三种方法:1)继承Thread方法,并重写run()方法2)实现Runnable方法,并重写run()方法3)实现callable方法,并重写call()方法。这种线程创建方式有返回值进程的等待与通知java中的任意对象都可以当做锁,我们只需要用synchronized关键字修饰即可。任何一个对象都有wait()方法,用于将拿到锁的线程挂起,并且有notify()和notifyAll()方法,用于唤醒该锁的阻塞队列中的线程,其中notify()方法用于原创 2021-12-19 16:31:48 · 947 阅读 · 0 评论 -
String类中hashcode的计算方法
这个问题在面试中被问到过,面试官问我怎么计算String的hashcode,下面是String类中的源码 /** * Returns a hash code for this string. The hash code for a * {@code String} object is computed as * <blockquote><pre> * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n原创 2021-12-09 12:00:22 · 613 阅读 · 0 评论 -
ArrayList和StringBuilder的扩容机制
我们知道,无论是ArrayList还是StringBuilder,其内部存储机制都是数组。数组在查找的时候有明显的优势,但是在插入或者删除的时候比较麻烦,涉及到扩容机制。下面我们来看一下ArrayList和StringBuilder的扩容机制有什么区别。1. ArrayList的扩容机制在了解扩容机制之前,我们先来看一下ArrayList的属性public class ArrayList<E> extends AbstractList<E> implem原创 2021-12-07 15:36:44 · 705 阅读 · 0 评论 -
LinkedList源码阅读
打算从这篇文章开始读jdk源码,先从比较简单的LinkedList开始吧。1.继承关系先来看一下LinkedList的继承情况,可以看出来,LinkedList继承的是AbstractSequentialListpublic class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io..原创 2021-12-06 18:03:19 · 2324 阅读 · 0 评论 -
springboot中使用AOP的简单实例
这个实例来自Spring AOP 详解及示例_哔哩哔哩_bilibili首先创建springboot项目,然后导入依赖,pom.xml文件如下所示<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati原创 2021-12-04 15:31:14 · 1251 阅读 · 0 评论 -
德邦快递面试总结
1.我们可以自己写一个String类代替java自带的String类吗面试官说,我们可以写一个String类出来,但是自己写的不能用,我不知道为什么java中自定义String会怎样?_pocher的博客-CSDN博客这个问题我表示存疑,有想法的欢迎和我讨论2.mybatis中“#”和“$”有什么区别MyBatis中#{}和${}的作用与区别_陈三千的博客-CSDN博客_mybatis中$和#3.mybatis使用了哪些设计模式面试官:Mybatis 使用了哪些设计模式?_...原创 2021-12-03 17:18:44 · 355 阅读 · 0 评论 -
字节跳动面试记录
刚刚面了字节跳动实习岗,问的问题都比较基础,但是范围很广,由于我介绍了我的python爬虫项目,面试官就问了很多关于网络的问题,但是大多都答不出来。然后就是重头戏在线编程了,我承认我的编程能力很弱,一共给了三道题,只有第三题勉强做出来了,下面记录这三道题。1. 三数之和 --》https://leetcode-cn.com/problems/3sum/2.打印镜像二叉树 --》https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-..原创 2021-12-01 15:13:05 · 570 阅读 · 0 评论