自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 java动态代理

在《从静态代理到AOP》中提到过面向切面编程的优势,动态代理也同理。接前面的例子,为了实现一个加日志的功能,静态代理需要对CRUD分别写一个代理类,这样就增加了代码量。而动态代理,只需要一个代理类就可以代理CRUD四个类。.........

2022-08-13 11:03:42 157 1

原创 从静态代理到AOP

系统的基础业务无非就CRUD,但是当这些主干功能开发完之后,一定是会拓展系统功能的,比如加一个日志功能。这时候如果改源码,系统就很容易出问题。此时就需要一个解决方案。我发现很多编程思想,就一个核心—解耦!系统开发是有生命周期的,时不断修改的,唯有解耦,才能减小开发后期的工作量。窃以为,悟性还可以。在没接触AOP,IOC之前,在下使用MATLAB写代码,已经习惯将各个不同的方法进行封装,以此来实现解耦。.........

2022-08-11 18:35:01 95

原创 控制反转IOC

看上图,Dao层最初有一个接口,只有一个实现类DaoImpl。按照三层架构的原理,Service层的ServerImpl中则是需要一个DaoImpl对象,最开始,我们通常会使用new来直接创建对象。但是,随着业务的拓展,Dao层又添加了两个实现类,这时本来在ServiceImpl中new DaoImpl的代码就要要进行更改。这是个工作量很大的事情。放弃使用new来直接创建对象的做法,改用setDao来在Service层中创建一个对象。.........

2022-08-05 23:57:43 154

原创 实现位映射与布隆过滤器

少量的数据可以存储在arry或者link中,需要查找的时候,把所有的数据都读到内存里,然后用for去遍历。但是有大量的数据的话,内存就放不下了。比如,在10亿个不重复的int中查找一个数。

2022-08-02 00:12:04 169

原创 list接口

vector和arraylist都是用可变数组实现的。但是vector使用了synchronized,保证了线程安全,但是牺牲了性能。所以,vectororarraylist要视情况而定。iterator多用来遍历list,可以理解成一个指针。他只有nset(),hasNext(),move()三个方法。增强循环for(数据类型a集合名称){}底层实现就是iterator。都实现了list接口,另外linkliset实现了deque接口。......

2022-07-28 11:44:53 120

原创 util中的数据结构

Collection是个接口,AbstractCollection继承了这个接口。httpshttpshttpshttps。

2022-07-26 21:38:54 309

原创 多线程实现多客户端通讯

多线程实现多客户端通讯

2022-06-04 17:34:46 62

原创 多线程:线程池

java自带的线程池用法public class Demo01ThreadPool { public static void main(String[] args) { // 1.使用线程池的工厂类Executors里面提供的静态方法newFixedThreadPool生产一个有2个线程的线程池 ExecutorService es = Executors.newFixedThreadPool(2); //2.使用submit,传递

2022-05-13 16:24:17 198

原创 多线程:可见性

可见性问题的引出一个线程要改堆中的变量,有8个原子操作,有时候会出现一些问题。见如下示例:boolean flag=true;public static void main(){ Thread t1 = new Thread (new Runnable(){ @Override public void run(){// 线程结束 run方法执行完成 System.out.println ("线程 1 开始"); while(flag){

2022-05-02 11:00:47 68

原创 多线程实现移动的小球

第一代版本 v1.0放个项目链接各个类的功能Ball:小球的基本参数,draw,move方法监听器:监听鼠标按下的动作。new一个小球,new一个线程并启动。BallThread:每个线程是一个小球,一个线程既要move又要draw。一些值得注意的问题所有小球共用一个画笔,就会出现上面这种线程不安全问题。解决方法见监听器中的注释。小球move和draw的衔接问题。见BallThread中的注释。v2.0版本v1的问题每个小球一个线程这种方法是有问题的。小球只有draw和mov

2022-04-24 13:03:20 409

原创 多线程:关于锁

为什么需要多线程?

2022-04-22 17:18:12 432

原创 java网络通讯(二)多种类型消息发送

int类型思路就是,public void sendInt(int value){ OutputStream os= null; //这里是用socket的输出流,而不是用serversocket的 try { os = socket.getOutputStream(); int b24=(value>>24)&0xFF; int b16=(value>>16)&0xFF; int

2022-01-16 22:51:38 420

原创 java网络通讯(一)群发消息

套接字图示有个需要注意的问题就像打完电话需要挂断才能打下一个一样,当server给client发完一条消息,要调用输入/输出流的close()方法 来挂断电话才能播出下一通电话。输入/输出流都是实实在在的硬件,此类操作,都会有相应的clsoe方法进行关闭。两端都正常关闭的状态称之为orderly,只有一端正常关闭称之为abortive(流产)。会报出"connect reset"的错误。服务端public class MsgServer { /*这个命名和初始化分开的写法就很好

2022-01-12 17:27:47 119

原创 list介绍

当我们讨论List的时候,一般都和Set作比较。 List中元素可以重复,并且是有序的。Set中的元素不可以重复,并且是无序的(从set中遍历出来的数据和放入顺序没有关系)。ArrayList是用数组实现的list。数组查找、修改快,但是扩容、删除困难。数组的增删需要new一个新的数组,然后把老数组的值付进去,这种操作会很慢。LinkList是用链表实现的list。由于链表在内存中的位置并不连续,所以增删只需要修改指针即可。但是查找、修改需要从头部开始遍历,所以比较慢。......

2022-01-07 23:07:12 431

原创 树的遍历操作

递归遍历

2022-01-06 10:07:38 405

原创 多线程:基本概念

一、基本概念并行:并发:线程:进程:程序:

2021-09-15 22:03:59 113

转载 mapreduc

转载自:https://www.cnblogs.com/sunbr/p/13286217.htmlMapReduce处理数据的大致流程#①InputFormat调用RecordReader,从输入目录的文件中,读取一组数据,封装为keyin-valuein对象②将封装好的key-value,交给Mapper.map()------>将处理的结果写出 keyout-valueout③ReduceTask启动Reducer,使用Reducer.reduce()处理Mapper的keyout-val

2021-09-15 09:18:02 185

原创 swing开发五子棋

五子棋4.0项目地址:github链接这是个比较完善的版本,具体功能如下:基本的棋盘、棋子绘制黑白双方轮流交替下棋启动界面,输入用户名密码登录存储棋路移动洗盘窗口时进行重绘判定输赢悔棋类的说明StartUI:启动界面,可以输入用户名密码用来登录,由于每次都要输入太麻烦,已注释掉用户验证。GoBangUI: 下棋界面,详见注释。重点关注界面与监听器传参的get\set方法 。**Chess、BlackChess、WhiteChess:**一个父类,两个子类。重点关注子类调用

2021-08-13 13:24:13 180

原创 shell构建基本脚本

Linux系统:CentOS 7大多数的Linux发行版的默认shell都是GNU bash shell。CentOS 7 系统默认的是bash shell,bash shell 提供了基本的命令来操作Linux系统。1.1 shell 的启动GNU bash shell提供对Linux系统的交互访问。以应用程序运行在Linux系统上,在用户登录到终端时自动启动。shell启动依赖于用户账户的配置。系统根据用户账户的配置来启动何种shell(一个Linux系统可能安装了多个shell)。下面是leo

2021-08-03 17:03:20 137

原创 面向对象

继承相关问题1.继承了什么?子类实际上继承了父类所有的东西,只不过调用被限制public 整个项目private 本类之内可以调用protected 同包与缺省一致 不同包时,其子类可调用(即,只有子类可以调用)缺省的、 不写 同一个包下可调用或者也可以说同包下: 只有 私有的不能调用不同包下:子类中 ,public protected 可以调用非子类中,子类对象只能调用

2021-08-03 11:46:35 68

原创 数据类型

基本数据类型byte(字节) 8bit(位、比特)short 16bitint 32bitlong 64bitfloat 32bitdouble 64bitchar 16bitboolean 8bit引用数据类型之所以叫做引用数据类型,是因为存的的只是地址,是内容的引用。eg.String str=new String(“123”);//123储存在内存中的某个地方,而str只是储存了一个地址,指向

2021-08-03 11:02:30 74

原创 数据结构(Link)

关于堆和栈栈是固定大小的,在编译时候已经确定大小,储存函数有关调用执行的信息、储存局部变量。堆的大小是不固定的,是内存中的空闲空间,new方法需要从堆中调用信息(这说法明显有待完善)。......

2021-05-31 17:31:20 1018

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除