JAVA数据处理的常用技术
背景
在实际开发中,数据的处理有五种:获取、传输、存储、分析、转换。每种各对应一些常用的技术。
序列化和反序列化
序列化是将对象的信息转换为可传输或可存储形式的过程。反序列化就是反过来让这些可传输的、可存储的信息变回对象。
传输的序列化除了安全性的考虑,因为涉及到和第三方通信,所以还有重要的一点是可读性和不变性。而存储的链路短,可控,所以更讲究效率。
传输最常用的序列化手段是JSON这样人眼可读的。而存储会使用protostuff这种将key值映射成编码来传输的。因为1,2,3比one、two、four更省空间更高效。但是传输中都用编码,解析时就很难判断它的意义。双方还要进行额外的约定。本来3代表four,中间加了一个three,3代表three的话,对方没有及时被通知,那么解析传输过来的消息就是错的。
反射
Java反射是在运行时,对于任何一个类,都可以知道这个类有哪些方法和属性。对于任何一个对象,都能对它的方法和属性进行调用。
常用数据转换工具,比如Spring的RequestParam、RequestBody、ResponseBody内部就用了反射机制。还有Jackson等工具类。甚至在业务代码中直接使用反射也是很常见的。比如设计一个AI助手问答机。想实现:
小A:我要搜索美女"冰冰"AI助手:OK,搜索"冰冰"小A:想知道她的"年龄"AI助手:21岁
上面这个JAVA实现是这样的:
Field field = 美女.class.getDeclaredField(年龄);field.setAccessible(true);return field.get(冰冰).toString();
动态代理
代理模式是为了提供增强的或不同的操作,而插入来替代实际对象的对象。这些操作涉及到与实际对象的通信,所以称为代理。
Spring主要的两大思想IoC和AOP。对于IoC,利用的是反射机制。而AOP使用了动态代理,当然底层也是反射。
JDK动态代理只能给有接口的类代理。本质是通过反射获取要执行的方法,并在执行前或者后加入一些代理处理操作。cglib本质上用继承的方法实现的,是通过动态生成一个子类去覆盖所要代理的类。用final修饰的不能被覆盖的就不代理了。spring动态代理是优先使用JDK动态代理,如果目标没有实现任何接口,则创建一个cglib代理。如果几个类实现了都实现了一个通用接口,比如Runnable,并且加了Component请spring来负责其生命周期。这时候会抛出一个Proxy代理异常。说期望加载一个Bean,实际上实现却不只一个。这时候可以在这个类上加下面标签强制使用cglib代理来解决。
@EnableAspectJAutoProxy(proxyTargetClass = true)
总结
我工作十几年来,查找和排序算法一直被奉为经典。而这两项就是搜索技术的核心。大数据是建立在搜索技术基础上的。AI又是建立在大数据基础上的。可见查找和排序的核心地位。看似高深的技术也是从最底层开始。苦练基本功。
JAVA数据处理的常用技术的更多相关文章
- java语言体系的技术简介之JSP、Servlet、JDBC、JavaBean(Application)
转自:https://zhangkunnan.iteye.com/blog/2040462 前言 Java语言 Java语言体系比较庞大,包括多个模块.从WEB项目应用角度讲有JSP.Servlet. ...
- 基于java平台的常用资源整理
这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...
- 这里整理了基于java平台的常用资源
这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...
- Android无线开发的几种常用技术(阿里巴巴资深工程师原创分享)
完整的开发一个android移动App需要经过从分解需求.架构设计到开发调试.测试.上线发布等多个阶段,在发布后还会有产品功能上的迭代演进,此外还会面对性能.安全.无线网络质量等多方面的问题. 移动A ...
- Java Web之JSP技术
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm ...
- Java Web之会话技术
客户端与服务器通信过程中,会产生一些数据.比如,A和B分别登陆了某宝购物网站,A买了一个Android手机,B买了一个iPhone手机,当结账时,web服务器需要分别对用户A和B的信息分别保存.根据J ...
- JAVA中的代理技术(静态代理和动态代理)
最近看书,有两个地方提到了动态代理,一是在Head First中的代理模式,二是Spring AOP中的AOP.所以有必要补充一下动态代理的相关知识. Spring采用JDK动态代理和CGLib动态代 ...
- OC中另外的一个常用技术:通知(Notification)
OC中另外的一个常用技术:通知(Nofitication)其实这里的通知和之前说到的KVO功能很想,也是用于监听操作的,但是和KVO不同的是,KVO只用来监听属性值的变化,这个发送监听的操作是系统控制 ...
- java中最常用jar包的用途说明
java中最常用jar包的用途说明,适合初学者 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实 ...
随机推荐
- 人脸识别开发套件RJ45、继电器、OTG、RS232接口说明
人脸识别开发套件RJ45.继电器.OTG.RS232接口说明 接口说明 D801A 人脸抓拍识别一体机是一款高性能.高可靠性的人脸识别类产品.依托深度学习算法扩展人脸库数量,准确率更高,支 ...
- react-navigation
安卓端React Navigation的TabNavigator选项卡与react-native-scrollable-tab-view.FlatList一起使用,只显示第一页的内容. 解决方案: 给 ...
- 06 css选择器
选择器的作用:选中标签 1.基本选择器 标签选择器 id选择器 class选择器 *通配符选择器 权重:行内样式 1000 > id选择器 100 > 类选择器10 > 标签选择器 ...
- 打包Electron项目
先确保该项目正常运行npm run dev,结束程序, 上篇的项目运行已经提到了打包输出工具electron-packager 可以使用全局安装的方式: npm install -g electron ...
- sql server 怎么查看blocked的线程
select spid ,blocked from master..sysprocesses
- Windows上快捷登陆应用程序
在Windows上有些程序双击后,还需要输入用户名密码等,填写很多信息后才开始使用. 有些程序本身实现了保存信息,或者可以自动登陆. 但也有些程序无信息保存和自动登陆功能,如果经常使用,每次都填写觉得 ...
- Mac忘记MySQL root密码解决方法(亲测有效)
重置MySQL root密码 重置MySQL root用户的密码: 1)新建一个文本文件sql.txt,写入修改用户密码的SQL语句. MySQL 5.7.6及更高版本写这句: ALTER USER ...
- Linux 设置服务开机启动
首先来了解一下 service命令是Redhat Linux兼容的发行版中用来控制系统服务的实用工具,它以启动.停止.重新启动和关闭系统服务,还可以显示所有系统服务的当前状态. service +(自 ...
- Delphi - Indy TIdHTTP方式创建程序外壳 - 实现可执行程序的自动升级
Delphi 实现可执行程序的自动升级 准备工作: 1:Delphi调用TIdHTTP方式开发程序,生成程序打包外壳 说明:程序工程命名为ERP_Update 界面布局如下: 代码实现如下: unit ...
- dataGrip连接数据库失败[08001]的一种可能原因
我使用的是mac系统,并且由于机型较老,容量不高,为减轻系统负荷,没有设置开机自动启动MYSQL服务.这导致我在一次重启后,重新开启服务,然后就出现了dataGrip连接不上数据库: 在网上查找相 ...