- 博客(22)
- 收藏
- 关注
原创 java动态代理
在《从静态代理到AOP》中提到过面向切面编程的优势,动态代理也同理。接前面的例子,为了实现一个加日志的功能,静态代理需要对CRUD分别写一个代理类,这样就增加了代码量。而动态代理,只需要一个代理类就可以代理CRUD四个类。.........
2022-08-13 11:03:42
180
原创 从静态代理到AOP
系统的基础业务无非就CRUD,但是当这些主干功能开发完之后,一定是会拓展系统功能的,比如加一个日志功能。这时候如果改源码,系统就很容易出问题。此时就需要一个解决方案。我发现很多编程思想,就一个核心—解耦!系统开发是有生命周期的,时不断修改的,唯有解耦,才能减小开发后期的工作量。窃以为,悟性还可以。在没接触AOP,IOC之前,在下使用MATLAB写代码,已经习惯将各个不同的方法进行封装,以此来实现解耦。.........
2022-08-11 18:35:01
129
原创 控制反转IOC
看上图,Dao层最初有一个接口,只有一个实现类DaoImpl。按照三层架构的原理,Service层的ServerImpl中则是需要一个DaoImpl对象,最开始,我们通常会使用new来直接创建对象。但是,随着业务的拓展,Dao层又添加了两个实现类,这时本来在ServiceImpl中new DaoImpl的代码就要要进行更改。这是个工作量很大的事情。放弃使用new来直接创建对象的做法,改用setDao来在Service层中创建一个对象。.........
2022-08-05 23:57:43
180
原创 实现位映射与布隆过滤器
少量的数据可以存储在arry或者link中,需要查找的时候,把所有的数据都读到内存里,然后用for去遍历。但是有大量的数据的话,内存就放不下了。比如,在10亿个不重复的int中查找一个数。
2022-08-02 00:12:04
191
原创 list接口
vector和arraylist都是用可变数组实现的。但是vector使用了synchronized,保证了线程安全,但是牺牲了性能。所以,vectororarraylist要视情况而定。iterator多用来遍历list,可以理解成一个指针。他只有nset(),hasNext(),move()三个方法。增强循环for(数据类型a集合名称){}底层实现就是iterator。都实现了list接口,另外linkliset实现了deque接口。......
2022-07-28 11:44:53
137
原创 util中的数据结构
Collection是个接口,AbstractCollection继承了这个接口。httpshttpshttpshttps。
2022-07-26 21:38:54
337
原创 多线程:线程池
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
217
原创 多线程:可见性
可见性问题的引出一个线程要改堆中的变量,有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
95
原创 多线程实现移动的小球
第一代版本 v1.0放个项目链接各个类的功能Ball:小球的基本参数,draw,move方法监听器:监听鼠标按下的动作。new一个小球,new一个线程并启动。BallThread:每个线程是一个小球,一个线程既要move又要draw。一些值得注意的问题所有小球共用一个画笔,就会出现上面这种线程不安全问题。解决方法见监听器中的注释。小球move和draw的衔接问题。见BallThread中的注释。v2.0版本v1的问题每个小球一个线程这种方法是有问题的。小球只有draw和mov
2022-04-24 13:03:20
437
原创 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
458
原创 java网络通讯(一)群发消息
套接字图示有个需要注意的问题就像打完电话需要挂断才能打下一个一样,当server给client发完一条消息,要调用输入/输出流的close()方法 来挂断电话才能播出下一通电话。输入/输出流都是实实在在的硬件,此类操作,都会有相应的clsoe方法进行关闭。两端都正常关闭的状态称之为orderly,只有一端正常关闭称之为abortive(流产)。会报出"connect reset"的错误。服务端public class MsgServer { /*这个命名和初始化分开的写法就很好
2022-01-12 17:27:47
144
原创 list介绍
当我们讨论List的时候,一般都和Set作比较。 List中元素可以重复,并且是有序的。Set中的元素不可以重复,并且是无序的(从set中遍历出来的数据和放入顺序没有关系)。ArrayList是用数组实现的list。数组查找、修改快,但是扩容、删除困难。数组的增删需要new一个新的数组,然后把老数组的值付进去,这种操作会很慢。LinkList是用链表实现的list。由于链表在内存中的位置并不连续,所以增删只需要修改指针即可。但是查找、修改需要从头部开始遍历,所以比较慢。......
2022-01-07 23:07:12
463
转载 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
215
原创 swing开发五子棋
五子棋4.0项目地址:github链接这是个比较完善的版本,具体功能如下:基本的棋盘、棋子绘制黑白双方轮流交替下棋启动界面,输入用户名密码登录存储棋路移动洗盘窗口时进行重绘判定输赢悔棋类的说明StartUI:启动界面,可以输入用户名密码用来登录,由于每次都要输入太麻烦,已注释掉用户验证。GoBangUI: 下棋界面,详见注释。重点关注界面与监听器传参的get\set方法 。**Chess、BlackChess、WhiteChess:**一个父类,两个子类。重点关注子类调用
2021-08-13 13:24:13
219
原创 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
176
原创 面向对象
继承相关问题1.继承了什么?子类实际上继承了父类所有的东西,只不过调用被限制public 整个项目private 本类之内可以调用protected 同包与缺省一致 不同包时,其子类可调用(即,只有子类可以调用)缺省的、 不写 同一个包下可调用或者也可以说同包下: 只有 私有的不能调用不同包下:子类中 ,public protected 可以调用非子类中,子类对象只能调用
2021-08-03 11:46:35
82
原创 数据类型
基本数据类型byte(字节) 8bit(位、比特)short 16bitint 32bitlong 64bitfloat 32bitdouble 64bitchar 16bitboolean 8bit引用数据类型之所以叫做引用数据类型,是因为存的的只是地址,是内容的引用。eg.String str=new String(“123”);//123储存在内存中的某个地方,而str只是储存了一个地址,指向
2021-08-03 11:02:30
90
原创 数据结构(Link)
关于堆和栈栈是固定大小的,在编译时候已经确定大小,储存函数有关调用执行的信息、储存局部变量。堆的大小是不固定的,是内存中的空闲空间,new方法需要从堆中调用信息(这说法明显有待完善)。......
2021-05-31 17:31:20
1150
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人