- OpenGrok代码检索服务器搭建
此处有熊
有时候代码开源网站无法访问或者访问很慢,这个时候如果本地能搭建这么一个代码服务就能解决这个问题了,本文就主要介绍一个搭建本地OpenGrok代码检索服务器方法。1.软件准备Java:jdk1.8.0_181Tomcat:apache-tomcat-8.5.32OpenGrok:opengrok-1.1-rc3ctags:ctags-5.8相关软件:https://pan.baidu.com/s/1
- ubuntu14.04搭建openGrok 1.7.40 + Java17+tomcat10.0.27阅读android系统代码
junglyfine
Androidandroidgitopengrokubuntu
为了快速阅读android系统代码,首选openGrok,其它SI或understand估计不适合了。话不多说,工欲善其事必先利其器,先下载源码和工具.以下命令默认使用root,防止权限问题一、下载android代码还是清华的镜像比较牛逼,直接访问https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/1、先下载repo工具mkdir~/binPATH=~/b
- 使用 OpenGrok搭建大型源码阅读环境
Calvin880828
Android开发工具tomcatjavaoracle
使用OpenGrok搭建大型源码阅读环境官方wiki简单介绍了OpenGrok的搭建过程,参考https://github.com/oracle/opengrok/wiki/How-to-setup-OpenGrok在自己的实践过程中,还是会遇到一些小问题,记录下来以避免后人继续踩坑。本文以最新版ubuntu22.10为例(实测ubuntu22.10搭建AOSP编译环境完全没有任何问题)tomca
- Windows搭建opengork源码阅读环境
Just_Paranoid
技术流Clipopengorktomcatctagsaosp
Android源码的代码量比较庞大,有时候很难在其中找到自己需要的东西,opengork提供了一个在线源码快速搜索代码的引擎,带语法高亮的交叉引用显示,在代码间自由跳转,免费,开源,运行流畅,功能强大。参考网站:http://aosp.opersys.com/关于OpenGrokOpenGrok:https://oracle.github.io/opengrok/Requirements:Java
- 在ubuntu 22.04 上通过 Docker部署OpenGrok
殷天赐
dockerubuntulinux
Linuxkernel有2000多万行代码,当需要搜索的代码量很大时,使用OpenGrok可以加速搜索速度.通过Docker部署OpenGrok能隔离部署的环境与host环境,互不干扰.过程如下准备linux代码mkdir/home/jenkins/opengrok/{src,data,dist,etc,log}-pcdopengrok/src/gitclonehttps://git.kernel
- 通过opengrok实现android整套代码的快速搜索
refactorMe
整个Android代码非常复杂,涉及到各种类型的文件,要做完整的搜索非常困难,给开发带来很大的不便。对于aosp的代码,可以通过http://androidxref.com/这个网址搜索,但是对于有平台vendor的开发代码来说就很困难。所以借用开源的opengrok自建一个搜索服务。第一步:安装tomcat,这个比较简单$sudoapt-getinstallexuberant-ctagstomc
- docker搭建opengrok环境2
大海之狂
linux运维docker容器运维
引言:虚拟机关闭后重新开启,理论上是需要重新启动一下docker的,以重新启动其中的服务。命令基础:dockerimages:查看docker中现有的镜像dockercontainerls-all:查看docker中目前在运行的containerdockerstart容器名称或者ID:启动容器dockerexec-it容器名称或者ID命令:进入容器然后重新,启动一下tomcat就可以了,正常使用o
- 2021-09-08 opengrok比lxr先进
蓝色科学史
在同样的Ubuntu服务器上,OpenGrok的效率比LXR要高很多。扫描整个AndroidAOSP代码,LXR需要18个小时以上,而OpenGrok只需要4个小时。搭建方法:https://blog.messyidea.com/archives/44/对比:https://daimajiaoliu.com/daima/60f312f2e6e6803tomcat修改:catalina.sh300#
- NVMe驱动学习记录-2
最佳损友1020
学习记录内核驱动开发记录zns学习linux驱动开发
NVMe驱动学习记录-2参考源代码阅读顺序不了解的函数/概念变量函数结构体参考源码地址:https://mirrors.tuna.tsinghua.edu.cn/kernel/v4.x/linux-4.19.90.tar.gzlinux-4.19.90\drivers\nvme\host源码阅读环境:Windows搭建opengrok|极客教程(geek-docs.com)书籍:《LINUX设备驱
- OpenGrok简单使用
3eefbb8f78c6
OpenGrok一个快速、便于使用的源代码搜索与对照引擎。它帮助你搜索,对照,定位你的源代码树。它能够明白各种程序文件格式和版本控制历史记录。AndroidXRef(网址:http://androidxref.com/)项目提供Android源码的交叉索引,可以快速的搜索符合特定条件的Android源代码,后台是基于OpenGrok引擎,OpenGrok主要用来在源码中搜索、交叉索引以及进行导航。
- (搬运)AOSP opengrok docker
丸子不爱吃丸子
opengrok阅读,查询aosp代码再合适不过了,从网上搬运一套安装方式,还是比较简单的1.安装docker相当简单,直接copy官方安装指导:curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun2.docker安装opengrokdocker虽然安装好了,不过下面使用过程中会有权限问题,聪明如你一定会想到解决方案的.dockers
- opengrok搭建
tjy_2011
opengrok是看代码的利器,主页为https://github.com/oracle/opengrok下载和设置页面为:https://github.com/oracle/opengrok/wiki/How-to-setup-OpenGrok我用它来看android代码,创建index的命令为:java\-Xmx2g\-d64\-server\-jaropengrok.jar\-d/home/
- windows搭建opengrok工具
heavenjackson
opengrok是一个开源的查看代码的工具,当需要索引的源码量较大时,相比起sourceinsight要好很多,这篇文章就介绍一下opengrok的安装,及如何建立工程代码的索引.附上官网地址opengrok需要提前安装的环境1.Java1.82.Tomcat(8.x及以上版本)3.Ctags这几个软件的安装就不再赘述,都很简单.主要介绍opengrok的安装1,将下载好的opengrok解压到指
- 基于 OpenGrok 实现 Emacs 中代码符号查找跳转
c++
背景一直比较忙,太久没写点东西了,今天介绍下之前做的一个Emacs脚本。在公司里主要用C++作为生产语言,平时用Mac电脑工作,但是代码开发都是在远端服务器上。公司代码异常庞大,思考不逊色Linux内核代码量,并且源代码级别依赖的项目更是几十个。作为Spacemacs老用户平时都是用它做主力生产工具,尽管源代码在远端服务器上,我仍然用本地Mac上带GUI的Spacemacs开发,通过Oxfs可以非
- OpenGrok在线代码浏览环境搭建
zhongxiao_yao
tools
OpenGrok是专门的源码阅读工具在针对特大型源码时,比如AOSP和Chromium,就需要祭出专门的源码阅读工具。OpenGrok属于另一类,免费,开源,运行流畅,功能也毫不逊色,该工具环境搭建和使用感觉很简单,但最近搭建的过程中遇到各种问题,直到怀疑人生,经历各种磨难最后终于可以到流程使用的程度,特此记录一方面为自己备忘,另一方面希望可以给需要搭建环境的人一些帮助,快速完成,避免重复采坑。R
- OpenGrok 搜索技巧
Ricardo_Yu
OpenGrok
+表示包含此字符串,-表示包含此字符串。例如在FullSearch中搜索包含activity字符串但是不包含service字符串的源文件,可以填入+”activity”-“service”(去掉双引号同样可以,但是对于不可分割的词且两者间包含空格则双引号不可去,此规则适用于所有的搜索规则,例如FullSearch“finalString”,双引号去除表示或的关系,这个与Google的搜索规则是一样
- 使用OpenGrok阅读源码
weixin_34268610
java操作系统移动开发
0前言打算本周再写一篇关于Android的文章,却忘了带工作电脑的充电器。上周主要从事了安卓源码的阅读工作,那么今天就来分享下Android源码的阅读总结。不要天真的以为这是篇介绍安卓源码的文章,毕竟一周的时间不足以产生更多的心得体会,而是介绍一种阅读源码的利器——OpenGrok。工欲善其事必先利其器!!!其实在开发过程中,通常遇到一些阅读源码的工作。只不过由于代码量少的原因,使用IDE,如:A
- Ubuntu环境下OpenGrok的安装及使用
Jony-Li
ToolsLinux
OpenGrok是一个快速,便于使用的源码搜索引擎与对照引擎,它能够帮助我们快速的搜索、定位、对照代码树。接下来就具体讲解一下OpenGrok的安装及使用。安装Web服务器-Tomcat第一步:首先大家应该明白OpenGrok是一个Web系统,因此要共享OpenGrok搜索引擎,需要安装Web服务器。在Ubuntu环境下,推荐使用Tomcat。下载Tomcat到指定目录(e.g/data_2/to
- Windows10 opengrok配置文档
wd623894174
工具
参考文档:https://blog.csdn.net/w860316/article/details/72796295http://mazhuang.org/2016/12/14/rtfsc-with-opengrok/#折腾狂魔1.安装jdk安装配置jdk环境变量,windows10--此电脑--属性--高级系统设置--环境变量--系统设置--path--新建路径验证使用javajavacjav
- Android源码阅读神器-openGrok的搭建
迷你球
Android系统opengrokaospAndroid源码代码跳转阅读神器
前言阅读Android源码这样庞大的代码,没有一个趁手的工具,会比较难受。之前都是通过vim来阅读源码,但没有做相关的vim插件配置,所以每次都需要进行grep,效率极低。后来尝试在ubuntu中使用sourceinsight,效果也不是特别好,不流畅,而且同步代码时比较慢(可能是我电脑性能问题)。后面尝试了openGrok,一个让我欲罢不能的阅读源码的工具。但在搭建openGrok的时候,还是遇
- OpenGrok源码搜索引擎搭建
包老头子
AndroidLinux工具安装与使用
文章目录声明**1.OpenGrok简介****剩下一些事儿**修改说明声明版权声明:博文为原创内容,可以转载或引用,但须在明显位置标明原文作者和出处,未经同意不得擅自修改本文内容!博客地址:http://blog.csdn.net/luzhenrong451.OpenGrok简介有些情况下,我们需要在GB级别甚至几十GB级别且随时不断更新的大型代码(比如Android源码)里面搜索阅读源码,那么
- OpenGrok搜索技巧
jingzitakk66
+表示包含此字符串,-表示包含此字符串。例如在FullSearch中搜索包含activity字符串但是不包含service字符串的源文件,可以填入+”activity”-“service”(去掉双引号同样可以,但是对于不可分割的词且两者间包含空格则双引号不可去,此规则适用于所有的搜索规则,例如FullSearch“finalString”,双引号去除表示或的关系,这个与Google的搜索规则是一样
- 爱测未来移动-Android源码阅读利器之openGrok
itest_2016
移动测试
如何快速查阅、定位android源码,这里推荐工具openGrok。阅读Android源码工具很多,有sourceinsight,vim+ctags+taglist+cscrop,androidstudio等,都各有优缺点。这里选择openGrok的原因如下:基于web在服务器上运行,在本地用浏览器直接查看。简单易上手相比其他工具,openGrok更加简单,不需要记快捷键:点击函数名跳转到定义,点
- Android系统源码极速搜索引擎(OpenGrok)
michaelpp
Androidandroid源代码搜索引擎
使用OpenGrok的Android系统源码搜索引擎,搜索速度简直太快速了!:http://androidxref.com/另外,OpenGrok的也是可以在本地计算机中安装配置的,主要是安装Tomcat服务器和OpenGrok模块(Ubuntu13):1.安装Tomcat:sudoapt-getinstalltomcat7安装完之后在浏览器中输出http://localhost:8080如果能显
- opengrok源码浅析
freud.wy
opengrok
最近公司想搭一套代码搜索系统,所以调研了一下Oracle的开源代码搜索系统opengrok的索引建立机制。opengrok建立索引主要架构图如下所示:入口在Indexer类中,其中Indexer会对每个project建立一个索引类IndexDatabase,IndexDatabase通过遍历代码目录下的所有文件对每个文件生成索引。IndexDatabase中的indexDown是建立索引的核心方法
- AndroidXRef使用说明
Androidfoolish
OpenGrok一个快速、便于使用的源代码搜索与对照引擎。它帮助你搜索,对照,定位你的源代码树。它能够明白各种程序文件格式和版本控制历史记录。借助Eclipse以及本地源码可以比较方便地分析Android源码,但是对于Native代码的调用就无法通过Eclipse的快速定位来查看相应的Native源码了,而且Android源码中对Native库的加载一般不是通过在Static块里调用System.
- Windows上安装OpenGrok的方法
sd2131512
技术点/工具
发现这篇文章很实用,转帖一下:原文地址:http://lifeisbetter.in/blog/2009/05/11/install-opengrok-on-windows/InstallOpenGrokonWindowsAswebsiteofOpenGroksays,itsindeedawicked,fastsourcebrowser.Inamuchelaborateversion:“OpenG
- ubuntu16.04搭建openGrok
wd623894174
工具
参考link:Opengrok环境搭建--阅读Android源码1.安装tomcat8 sudoapt-getinstalltomcat8 sudo/etc/init.d/tomcat8restart //重启tomcat8浏览器中打开http://localhost:8080/,出现下图说明tomcat8没问题。//控制服务sudo/etc/init.d/tomcat8startsudo/etc
- Ubuntu环境下OpenGrok的安装及配置
陪你去看南极光
工具使用&工程配置
注:YOUDIR为自己设定的存放目录,这个大家随意哈。第一步,安装Web服务器-Tomcat:1、使用以下命令解压下载的Tomcat压缩包#tarxvzfapache-tomcat-6.0.45-C/YOURDIR/这样便自动解压到指定目录下2、获取startup.sh路径cd/YOURDIR/apache-tomcat-6.0.45cdbin/pwd(获取路径待拷贝)/YOURDIR/apach
- ubuntu16.04下搭建opengrok阅读android源码
Zz_patrick
杂记
ubuntu16.04下搭建opengrok阅读android源码写在前面最近准备了解,学习一下安卓的源码。但是使用AndroidStudio导入源码,使用过朋友的都知道那叫一个慢,这个时候就需要一个自己搭一个本地的opengrok服务器来解除我们的痛处。openGrok的作用:通过浏览器查看代码快速查找每个java/cpp文件的方法/成员变量列表显示…更多的功能用的时候再一一体会系统环境系统ub
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持