09.kubernetes笔记 Service(三) 两种特殊类型的SVC Headless Service、ExternalName

目录

  • Headless Service
    示例1.无头服务解析
  • Service类型中的第四种:ExternalName
    示例2:www.baidu.com cname到svc

两种特殊类型的svc

Headless Service

  • Headless Service
    有时不需要或不想要负载均衡,以及单独的 Service IP 。遇到这种情况,可以通过指定 Cluster IP(spec.clusterIP) 的值为 “None” 来创建 Headless Service 。这类 Service 并不会分配 Cluster IP, kube-
    proxy 不会处理它们,而且平台也不会为它们进行负载均衡和路由每个个体都具有一定程度的独特性,由其存储的状态决定;
    Headless Services是一种特殊的service,其spec:clusterIP表示为None,这样在实际运行时就不会被分配ClusterIP。也被称为无头服务。
  1. headless Service和普通Service的区别
    headless不分配clusterIP
    headless service可以通过解析service的DNS,返回所有Pod的地址和DNS(statefulSet部署的Pod才有DNS) 普通的service,只能通过解析service的DNS返回service的ClusterIP
  2. statefulSet和Deployment控制器的区别
    statefulSet下的Pod有DNS地址,通过解析Pod的DNS可以返回Pod的IP
    deployment下的Pod没有DNS
  3. 普通Service解析service的DNS结果
  • headless Service 就是没头的Service,有什么使用场景呢?
    第一种: 自主选择权,有时候client想自己决定使用哪个Real Server,可以通过查询DNS来获取Real Server的信息
    第二种: headless service关联的每个endpoint(也就是Pod),都会有对应的DNS域名;这样Pod之间就可以互相访问

  • headless service一般和statefulSet结合使用
    为什么要用headless service+statefulSet部署有状态应用?

  1. headless service会为关联的Pod分配一个域
    .$.svc.cluster.local
  2. StatefulSet会为关联的Pod保持一个不变的Pod Name
    statefulset中Pod的hostname格式为$(StatefulSet name)-$(pod序号)
  3. StatefulSet会为关联的Pod分配一个dnsName
    $.$.$.svc.cluster.local
示例1.Headless Service无头服务解析
[root@k8s-master svc]# cat demoapp-headless-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: demoapp-headless-svc
spec:
  clusterIP: None  #必须为None
  selector:
    app: demoapp
  ports:
  - port: 80
    targetPort: 80
    name: http  

[root@k8s-master centos]# kubectl exec centos-deployment-66d8cd5f8b-nrfnv -it -- /bin/bash

root@centos-deployment-66d8cd5f8b-nrfnv /]# nslookup -query=A demoapp-headless-svc    #解析到是后端pod IP
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   demoapp-headless-svc.default.svc.cluster.local
Address: 10.244.1.103
Name:   demoapp-headless-svc.default.svc.cluster.local
Address: 10.244.2.99
Name:   demoapp-headless-svc.default.svc.cluster.local
Address: 10.244.2.97
Name:   demoapp-headless-svc.default.svc.cluster.local
Address: 10.244.1.102

[root@centos-deployment-66d8cd5f8b-nrfnv /]# nslookup -query=PTR  10.244.1.103 #对pod IP进行反解 得到所有绑定的SVC
Server:     10.96.0.10
Address:    10.96.0.10#53

103.1.244.10.in-addr.arpa   name = 10-244-1-103.demoapp-svc.default.svc.cluster.local.
103.1.244.10.in-addr.arpa   name = 10-244-1-103.demoapp-nodeport-svc.default.svc.cluster.local.
103.1.244.10.in-addr.arpa   name = 10-244-1-103.demoapp-loadbalancer-svc.default.svc.cluster.local.
103.1.244.10.in-addr.arpa   name = 10-244-1-103.demoapp-externalip-svc.default.svc.cluster.local.
103.1.244.10.in-addr.arpa   name = 10-244-1-103.demoapp-headless-svc.default.svc.cluster.local.

[root@centos-deployment-66d8cd5f8b-nrfnv /]# curl 10.244.1.103
iKubernetes demoapp v1.0 !! ClientIP: 10.244.1.104, ServerName: demoapp-66db74fcfc-2jf49, ServerIP: 10.244.1.103!
[root@centos-deployment-66d8cd5f8b-nrfnv /]# 
[root@centos-deployment-66d8cd5f8b-nrfnv /]# 
[root@centos-deployment-66d8cd5f8b-nrfnv /]# curl demoapp-headless-svc   #需要注意的是Headless Service只有集群内部能访问,宿主机上因为无法解析到SVC IP是访问的
iKubernetes demoapp v1.0 !! ClientIP: 10.244.1.104, ServerName: demoapp-66db74fcfc-5dp5n, ServerIP: 10.244.1.102!
[root@centos-deployment-66d8cd5f8b-nrfnv /]# curl demoapp-headless-svc
iKubernetes demoapp v1.0 !! ClientIP: 10.244.1.104, ServerName: demoapp-66db74fcfc-z682r, ServerIP: 10.244.2.99!
[root@centos-deployment-66d8cd5f8b-nrfnv /]# curl demoapp-headless-svc
iKubernetes demoapp v1.0 !! ClientIP: 10.244.1.104, ServerName: demoapp-66db74fcfc-9wkgj, ServerIP: 10.244.2.97!
[root@centos-deployment-66d8cd5f8b-nrfnv /]# exit

[root@k8s-master svc]# curl demoapp-headless-svc  #无法访问
curl: (6) Could not resolve host: demoapp-headless-svc; Unknown error

Service类型中的第四种:ExternalName

externalName Service是k8s中一个特殊的service类型,它不需要指定selector去选择哪些pods实例提供服务,而是使用DNS CNAME机制把自己CNAME到你指定的另外一个域名上,你可以提供集群内的名字,比如mysql.db.svc这样的建立在db命名空间内的mysql服务,也可以指定http://mysql.example.com这样的外部真实域名。

CNAME是很有用的一个功能,在不同的域名之间搭建桥梁达到明一个域名暗另一个域名,比如github就通过CNAME机制来达到为用户提供私有域名站点的功能,云服务商也都是使用CNAME为用户提供各种各样的服务。作为明域名的所有者,我可以用A云来提供服务,哪天我口味变了,我换成B云提供服务,对我的用户的来说没有任何感知。

示例2:www.baidu.com cname到svc
[root@k8s-master svc]# cat externalname-redis-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: externalname-http-svc
  namespace: default
spec:
  type: ExternalName
  externalName: www.baidu.com
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  selector: {}

[root@k8s-master svc]# kubectl get svc
NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)   AGE
demoapp-deploy          ClusterIP      10.109.159.225             80/TCP    3d3h
externalname-http-svc   ExternalName              www.baidu.com   80/TCP    87m

#新增Pod测试
[root@k8s-master storage]# kubectl run pod-$RANDOM --image=ikubernetes/admin-box:latest -it --rm --command -- /bin/sh
root@pod-7813 # nslookup -query=A  externalname-http-svc
Server:     10.96.0.10
Address:    10.96.0.10#53

externalname-http-svc.default.svc.cluster.local canonical name = www.baidu.com.
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 180.101.49.11
Name:   www.a.shifen.com
Address: 180.101.49.12


root@pod-7813 # curl -H "host:www.baidu.com" externalname-http-svc.default.svc.cluster.local

 百度一下,你就知道
....
root@pod-7813 # 
</code></pre> 
 <p>参考链接:</p> 
 <blockquote> 
  <p>https://zhuanlan.zhihu.com/p/113195379</p> 
 </blockquote> 
</article>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1648276380967800832"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(09.kubernetes笔记 Service(三) 两种特殊类型的SVC Headless Service、ExternalName)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1903789390077947904.htm"
                           title="Python 常用内建模块-HTMLParser" target="_blank">Python 常用内建模块-HTMLParser</a>
                        <span class="text-muted">赔罪</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0/1.htm">系统学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录HTMLParser小结练习HTMLParser如果我们要编写一个搜索引擎,第一步是用爬虫把目标网站的页面抓下来,第二步就是解析该HTML页面,看看里面的内容到底是新闻、图片还是视频。假设第一步已经完成了,第二步应该如何解析HTML呢?HTML本质上是XML的子集,但是HTML的语法没有XML那么严格,所以不能用标准的DOM或SAX来解析HTML。好在Python提供了HTMLParser来非</div>
                    </li>
                    <li><a href="/article/1903789391193632768.htm"
                           title="Python 常用内建模块-venv" target="_blank">Python 常用内建模块-venv</a>
                        <span class="text-muted">赔罪</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0/1.htm">系统学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录venv小结venv在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.x。所有第三方的包都会被pip安装到Python3的site-packages目录下。如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python3。如果应用A需要jinja2.7,而应用B需要jinja2.6怎么办?这种情况下,每个应用可能需要各自拥有一套“</div>
                    </li>
                    <li><a href="/article/1903788507466362880.htm"
                           title="AIOps:解决企业IT挑战的智能利器" target="_blank">AIOps:解决企业IT挑战的智能利器</a>
                        <span class="text-muted">雅菲奥朗</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%A4%E8%AF%81%E5%9F%B9%E8%AE%AD/1.htm">认证培训</a><a class="tag" taget="_blank" href="/search/AIOps/1.htm">AIOps</a><a class="tag" taget="_blank" href="/search/SRE/1.htm">SRE</a><a class="tag" taget="_blank" href="/search/%E5%8F%AF%E8%A7%82%E6%B5%8B%E6%80%A7/1.htm">可观测性</a>
                        <div>前言:在当今数字化的时代,企业IT基础设施和应用程序规模不断扩大,面临着日益复杂的挑战。在这种情况下,AIOps人工智能运维成为解决企业IT运维困境的智能利器。AIOps与可观测性密切相关,可观测性是实现AIOps的基础。通过收集、监视和理解系统数据,AIOps能够自动化运维任务、实时监控系统状态、预测潜在问题,从而提高效率和稳定性。AIOps尤其适用于IT运维部门,这是一个迫切需要此类技术的群体</div>
                    </li>
                    <li><a href="/article/1903788508699488256.htm"
                           title="可视化埋点在React Native中的实践" target="_blank">可视化埋点在React Native中的实践</a>
                        <span class="text-muted">Shopee技术团队</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/native/1.htm">native</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a>
                        <div>本文首发于微信公众号“Shopee技术团队”。1.背景笔者所在团队为Shopee的本地生活前端团队,用户可以在我们的平台购买优惠券,然后去线下门店使用。随着用户规模不断增加,研究用户行为数据可以更好地指导产品功能设计,提供更加优秀的用户体验。用户行为数据的研究首先涉及到如何采集,即我们常说的“埋点”。一直以来,我们项目中的埋点都采用代码埋点,每次新增埋点往往是一些重复性的工作,且需要重新发布代码才</div>
                    </li>
                    <li><a href="/article/1903788381238784000.htm"
                           title="去哪儿网 ReactNative 跨小程序多端方案介绍" target="_blank">去哪儿网 ReactNative 跨小程序多端方案介绍</a>
                        <span class="text-muted">去哪儿网技术沙龙</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%89%8D%E7%AB%AF/1.htm">大前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/native/1.htm">native</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a>
                        <div>1前言qrn-remax-unir是由去哪儿网前端技术团队实现的一套将RN适配到小程序端的跨端组件,通过该组件库可快速方便的将RN源代码直接运行到小程序端。方案参考了react-native-web的适配方案,使用remax框架来实现适配组件库并达到适配多小程序的目的。和react-native-web一样,它对RN源代码侵入度低,并且调试和替换组件相当方便。方案来自于社区,我们只是合理的应用用来</div>
                    </li>
                    <li><a href="/article/1903788253463506944.htm"
                           title="计算机基础:源码、反码、补码 、位运算。盘点源码常见的位运算操作,祝您源码阅读更上一层楼。" target="_blank">计算机基础:源码、反码、补码 、位运算。盘点源码常见的位运算操作,祝您源码阅读更上一层楼。</a>
                        <span class="text-muted">pumpkin的玄学</span>
<a class="tag" taget="_blank" href="/search/my/1.htm">my</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E8%BF%9B%E5%88%B6/1.htm">二进制</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/1.htm">计算机基础</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E8%BF%9B%E5%88%B6/1.htm">二进制</a>
                        <div>源码、反码、补码计算机中对数字的编码表示有三种方式:「原码」,「反码」,「补码」:「原码」:原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1。比如十进制10如果用8个二进制位来表示就是00001010,-10就是10001010。「反码」:反码表示方法:正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变,其余各个位取反。「补码」:补码表示方法:正数的补</div>
                    </li>
                    <li><a href="/article/1903788254876987392.htm"
                           title="python Qt" target="_blank">python Qt</a>
                        <span class="text-muted">Solkatt's</span>

                        <div>最近帮朋友做了一个将文本文件按条件导出到excel里面的小程序。使用了PyQT,发现Python真是一门强大的脚本语言,开发效率极高。首先需要引用fromPyQt4importQtGui,uic,QtCore很多控件像QPushButton是从QtGui的空间中得来的,下面def__init__(self,parent=None)中定义了界面的设计及与控件相互联系的方法。classAddressB</div>
                    </li>
                    <li><a href="/article/1903785734737817600.htm"
                           title="流浪地球 - 华为OD机试真题(E卷、Java)" target="_blank">流浪地球 - 华为OD机试真题(E卷、Java)</a>
                        <span class="text-muted">什码情况</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E8%AF%95/1.htm">机试</a>
                        <div>针对刷题难,效率慢,我们提供一对一算法辅导,针对个人情况定制化的提高计划(全称1V1效率更高)。有兴趣的同学可以扫码添加我们的微信(code5bug)了解,免费试课一下。题目描述流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N。1).初始状态下所有的发动机都是未启动状态;2).发动机启动的方式分为”手动启动”和”关联启动”两种方式;3).如果在时刻1一个发动机被启动,下一个时刻</div>
                    </li>
                    <li><a href="/article/1903784978836156416.htm"
                           title="Rust + 时序数据库 TDengine:打造高性能时序数据处理利器" target="_blank">Rust + 时序数据库 TDengine:打造高性能时序数据处理利器</a>
                        <span class="text-muted">涛思数据(TDengine)</span>
<a class="tag" taget="_blank" href="/search/%E6%97%B6%E5%BA%8F%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">时序数据库</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/tdengine/1.htm">tdengine</a>
                        <div>引言:为什么选择TDengine与Rust?TDengine是一款专为物联网、车联网、工业互联网等时序数据场景优化设计的开源时序数据库,支持高并发写入、高效查询及流式计算,通过“一个数据采集点一张表”与“超级表”的概念显著提升性能。Rust作为一门系统级编程语言,近年来在数据库、嵌入式系统、分布式服务等领域迅速崛起,以其内存安全、高性能著称,与TDengine的高效特性天然契合,适合构建高可靠、高</div>
                    </li>
                    <li><a href="/article/1903784222108217344.htm"
                           title="MATLAB数据的保存与读取" target="_blank">MATLAB数据的保存与读取</a>
                        <span class="text-muted">晚风微凉~</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>在工程应用中,我们经常需要将未处理完的数据保存起来以便后期使用,或者在一些复杂计算中,我们需要多次计算过程中,由于系统的工作空间会随着系统的关闭而被释放掉,导致下次使用时无法快速调用,所有需要对数据进行保存与读取。1.核心代码1)数据保存基于MATALB的储存数据的常用命令是"save",使用save会将数据以二进制的方式存储在后缀名)为"文件名字.mat";savedemo01使用该命令会将数据</div>
                    </li>
                    <li><a href="/article/1903784222758334464.htm"
                           title="MATLAB的function函数的使用" target="_blank">MATLAB的function函数的使用</a>
                        <span class="text-muted">晚风微凉~</span>
<a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>在工程应用中,我们经常会遇到算法的计算较为复杂,很多算法的过程重复次数过多的问题,针对这个问题我们可以考虑使用function函数简化代码编写的工作量。1、单个传参在使用function的函数时,我们首先需要定义function函数的结构;function[输出参数]=函数名(输入参数)%注释:function函数的使用一般是比较多的,因此需要注意注释的编写,避免后期工作的误导;主要代码:****</div>
                    </li>
                    <li><a href="/article/1903784223244873728.htm"
                           title="TCP三次握手与四次挥手(全网最易懂保姆级教程)" target="_blank">TCP三次握手与四次挥手(全网最易懂保姆级教程)</a>
                        <span class="text-muted">秋‍.</span>
<a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B/1.htm">三次握手</a>
                        <div>一、前置知识准备1.TCP协议特性-面向连接:通信前需要建立专用通道-可靠传输:通过确认机制保证数据可达-全双工通信:双方可同时发送数据-流量控制:滑动窗口机制-拥塞控制:慢启动算法2.关键概念说明|术语|说明||------------|----------------------------------------------------------------------||**SYN**|</div>
                    </li>
                    <li><a href="/article/1903783970051518464.htm"
                           title="三维点云重建的原理及代码" target="_blank">三维点云重建的原理及代码</a>
                        <span class="text-muted">晚风微凉~</span>
<a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/1.htm">图像处理</a>
                        <div>点云重建是将来自各种传感器(如激光雷达、相机等)采集的离散点云数据转换为具有结构和几何形状的物体模型的过程。在这个过程中,算法的核心任务是从大量的离散点中提取出具有几何意义的特征,并将这些特征组合成相应的物体模型。在实际应用中,无法获得物体所有表面的三维坐标数据,因此点云重建算法必须处理部分点云数据,尽可能准确地还原物体的几何结构。点云重建的目标是通过对描述物体表面形状的点数据进行处理,根据它们的</div>
                    </li>
                    <li><a href="/article/1903783717810270208.htm"
                           title="编译链接过程" target="_blank">编译链接过程</a>
                        <span class="text-muted">YancyKahn</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%AF%91%E9%93%BE%E6%8E%A5/1.htm">编译链接</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%AF%91/1.htm">编译</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E6%8E%A5/1.htm">链接</a><a class="tag" taget="_blank" href="/search/GCC/1.htm">GCC</a>
                        <div>编译链接过程C/C++程序从文本到可执行文件之间是一个复杂的过程.对于源代码(.c/.cpp)文件我们是不能直接运行的,必须经过一系列的处理才能转化为机器语言,再通过链接相应的文件转化为可执行程序.这个过程称为编译链接过程.本文篇幅较长,想直接看分析过程点击这里下面是从源代码到可执行文件的整个编译链接的过程:整个编译链接过程无非就分为编译过程和链接过程1.编译过程C文件编译过程又可分为:编译和汇编</div>
                    </li>
                    <li><a href="/article/1903783717093044224.htm"
                           title="Android端ReactNative环境搭建——上" target="_blank">Android端ReactNative环境搭建——上</a>
                        <span class="text-muted">hzulwy</span>
<a class="tag" taget="_blank" href="/search/reactnative/1.htm">reactnative</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/native/1.htm">native</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a>
                        <div>前言最近一年,因为公司业务需要,部门引入了rn这门跨段技术来开发业务需求。从去年部门大佬调研rn这个框架到现在已有超过一年的时间了。而我从当时毕业不到1年的小白成长到现在负责维护项目的Android端代码的主力。同时,自己对rn相关的技术有了不少理解。因此,想要分享一些知识点,希望可以帮助到大家。我会以一个专栏的方式述说在这一年当中使用rn开发需求遇到的困难。大家可以借鉴参考下,共同进步!!!使用</div>
                    </li>
                    <li><a href="/article/1903783590831910912.htm"
                           title="nvm管理多版本node,nvm 配置国内镜像,npm配置国内镜像" target="_blank">nvm管理多版本node,nvm 配置国内镜像,npm配置国内镜像</a>
                        <span class="text-muted">奇纳尼</span>
<a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a>
                        <div>目录前言nvm是什么?安装nvm配置nvm国内镜像nvm常用命令npm配置国内镜像:淘宝镜像nrm源管理命令:可以不用实际项目中会遇到的问题前言公司多个项目需要配置不同版本的node,按照传统方式一直切换下载安装不同版本的node太麻烦了,发现nvm可以管理多版本nodenvm是什么?nvm(node.jsversionmanagement),是一个nodejs的版本管理工具。nvm和n都是nod</div>
                    </li>
                    <li><a href="/article/1903783212719599616.htm"
                           title="autojs之乐旅商城自动报名自动约" target="_blank">autojs之乐旅商城自动报名自动约</a>
                        <span class="text-muted">恶猫</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/autojs/1.htm">autojs</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%8D%93%E8%84%9A%E6%9C%AC/1.htm">安卓脚本</a>
                        <div>之前用的。现在能不能用不知道了啊。自己测试吧。//一键亮屏device.wakeUp();device.wakeUpIfNeeded();sleep(1000);//滑开swipe(device.width/2,device.height*0.8,device.width/2,device.height*0.1,2000);sleep(2000);//一键开微信launchApp("微信");sl</div>
                    </li>
                    <li><a href="/article/1903782330296758272.htm"
                           title="C语言指针入门(一)" target="_blank">C语言指针入门(一)</a>
                        <span class="text-muted">悄悄敲敲敲</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1.什么是指针?内存会划分为一个个内存单元(一个内存单元大小为1字节)每个内存单元都有一个编号即地址也被称为指针,我们可以理解为指针就是地址。通过指针可以找到其所指向的内存单元。就像我们第一次去一个朋友家时可以通过门牌号找到她的家一样,指针就是所存储数据的“门牌号”但不同的地方是在C语言中不同类型的数据在内存中所占用的字节数和存储方式是不一样的,所以我们在存取数据时不仅要知道位置信息还要知道该数据</div>
                    </li>
                    <li><a href="/article/1903782330770714624.htm"
                           title="C语言指针入门(二)" target="_blank">C语言指针入门(二)</a>
                        <span class="text-muted">悄悄敲敲敲</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>1.二级指针二级指针就是指针的指针,即存放指针变量地址的一个变量。#includeintmain(){inta=10;int*p=&a;int**pp=&p;printf("%d\n",a);printf("%d\n",*p);printf("%d\n",**pp);//打印结果全为10printf("%p\n",a);printf("%p\n",*p);printf("%p\n",**pp);/</div>
                    </li>
                    <li><a href="/article/1903781826485350400.htm"
                           title="基于 STC89C52 的 8x8 点阵显示数字" target="_blank">基于 STC89C52 的 8x8 点阵显示数字</a>
                        <span class="text-muted">@小张要努力</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/51%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">51单片机</a><a class="tag" taget="_blank" href="/search/proteus/1.htm">proteus</a>
                        <div>一、引言在电子设计领域,信息的有效展示是众多项目的关键环节。8x8点阵作为一种经济且实用的显示模块,能够呈现数字、简单字母及图形等信息,在电子时钟、简易游戏机等产品中广泛应用。STC89C52单片机凭借其低成本、丰富的I/O资源与稳定的性能,成为驱动8x8点阵的理想选择。本文将深入探讨如何利用STC89C52单片机结合74LS245芯片,实现8x8点阵的数字显示功能,并借助Proteus软件进行仿</div>
                    </li>
                    <li><a href="/article/1903781699943198720.htm"
                           title="基于 STC89C52 的智能秒表" target="_blank">基于 STC89C52 的智能秒表</a>
                        <span class="text-muted">@小张要努力</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/51%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">51单片机</a><a class="tag" taget="_blank" href="/search/proteus/1.htm">proteus</a><a class="tag" taget="_blank" href="/search/mcu/1.htm">mcu</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>引言秒表作为一种常见的计时工具,在体育赛事、实验测量等众多场景中有着广泛应用。随着电子技术的发展,基于单片机的智能秒表凭借其高精度、多功能等优势逐渐取代传统机械秒表。本文将详细介绍一款基于STC89C52单片机的智能秒表设计,该秒表通过两位数码管进行时间显示。STC89C52单片机特性回顾STC89C52是一款性能卓越的8位CMOS微控制器。它拥有8K字节的系统可编程Flash存储器,可方便地存储</div>
                    </li>
                    <li><a href="/article/1903781445789347840.htm"
                           title="uboot(bootrom的作用)" target="_blank">uboot(bootrom的作用)</a>
                        <span class="text-muted">花落已飘</span>
<a class="tag" taget="_blank" href="/search/uboot/1.htm">uboot</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/uboot/1.htm">uboot</a>
                        <div>BootROM详细讲解1.什么是BootROM?BootROM(BootRead-OnlyMemory)是一种固化在芯片内部的只读存储器(ROM),用于存放设备启动时执行的第一阶段引导代码。由于它是只读的,意味着其内容在芯片出厂时已经写入,无法更改。作用:当设备上电或复位时,BootROM负责最早的引导过程,它会初始化硬件环境,并决定从哪个存储介质加载操作系统或用户程序。2.BootROM的作用B</div>
                    </li>
                    <li><a href="/article/1903781067677036544.htm"
                           title="回归任务中的评价指标MAE,MSE,RMSE,R-Squared" target="_blank">回归任务中的评价指标MAE,MSE,RMSE,R-Squared</a>
                        <span class="text-muted">旺旺棒棒冰</span>
<a class="tag" taget="_blank" href="/search/%E7%BB%9F%E8%AE%A1%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/1.htm">统计学习方法</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E5%9B%9E%E5%BD%92/1.htm">回归</a><a class="tag" taget="_blank" href="/search/%E8%AF%84%E4%BB%B7%E6%8C%87%E6%A0%87/1.htm">评价指标</a><a class="tag" taget="_blank" href="/search/r2/1.htm">r2</a><a class="tag" taget="_blank" href="/search/mse/1.htm">mse</a>
                        <div>转自博客。仅供自己学习使用,如有侵权,请联系删除分类任务的评价指标有准确率,P值,R值,F1值,而回归任务的评价指标就是MSE,RMSE,MAE、R-SquaredMSE均方误差MSE是真实值与预测值的差值的平方和然后求平均。通过平方的形式便于求导,所以常被用作线性回归的损失函数。MSE=1m∑i=1m(yi−y^i)2MSE=\frac{1}{m}\sum_{i=1}^{m}\left(y_{i</div>
                    </li>
                    <li><a href="/article/1903781065680547840.htm"
                           title="使用AIOps进行更好的事件管理" target="_blank">使用AIOps进行更好的事件管理</a>
                        <span class="text-muted">茵赛飞3D CAD数据转换软件</span>
<a class="tag" taget="_blank" href="/search/pagerduty/1.htm">pagerduty</a><a class="tag" taget="_blank" href="/search/devops/1.htm">devops</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>DevOps为科技界带来了更加协作和高效的工作流程。随着AIOps的集成,自动化更进一步,使用人工智能为团队提供更快的根本原因分析和算法降噪。主要从采用AIOps中受益的主要领域之一是事件管理。AIOps可以帮助DevOps团队自动化工作流程,以实现更智能、更高效的事件管理,从而腾出时间让IT运营团队成员专注于创新以改善用户体验。在本文中,我们将了解AIOps如何从检测和识别到响应改进事件管理,以</div>
                    </li>
                    <li><a href="/article/1903781066372608000.htm"
                           title="第十八章:模板的多态力量_《C++ Templates》notes" target="_blank">第十八章:模板的多态力量_《C++ Templates》notes</a>
                        <span class="text-muted">郭涤生</span>
<a class="tag" taget="_blank" href="/search/c%2Fc%2B%2B/1.htm">c/c++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>模板的多态力量一、动态多态vs静态多态二、奇异递归模板模式(CRTP)三、策略模式(编译期策略选择)关键要点总结第一部分:多选题(10题)第二部分:设计题(5题)答案与详解多选题答案:设计题参考答案1.编译期策略选择器2.类型安全访问者模式3.概念约束数学库4.编译期工厂模式5.静态多态容器测试说明一、动态多态vs静态多态核心概念:动态多态:基于虚函数和继承体系,函数调用在运行时决定(通过虚函数表</div>
                    </li>
                    <li><a href="/article/1903780561818808320.htm"
                           title="AI大模型编程能力对比:Deepseek&Claude&Gemini" target="_blank">AI大模型编程能力对比:Deepseek&Claude&Gemini</a>
                        <span class="text-muted">黑夜路人(heiyeluren)</span>
<a class="tag" taget="_blank" href="/search/AI%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">AI人工智能</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a><a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a>
                        <div>在当今快速发展的技术领域,人工智能(AI)模型在编程和数据处理方面的应用越来越广泛。不同的AI模型因其独特的设计理念和技术优势,适用于不同的编程任务和场景。本文将对三种主流的AI模型——DeepSeekv3、GeminiFlash2.0和Claude3.5Sonnet的编程能力进行详细对比,帮助读者根据具体需求选择最合适的工具。同时对DeepSeekv3、GeminiFlash2.0和Claude</div>
                    </li>
                    <li><a href="/article/1903780435507343360.htm"
                           title="React Native 迁移的阵痛" target="_blank">React Native 迁移的阵痛</a>
                        <span class="text-muted">Ethan. L</span>
<a class="tag" taget="_blank" href="/search/ReactNative/1.htm">ReactNative</a><a class="tag" taget="_blank" href="/search/%26amp%3B/1.htm">&</a><a class="tag" taget="_blank" href="/search/JS/1.htm">JS</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/native/1.htm">native</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a>
                        <div>背景由于我们的移动应用程序已经存在多年,经历了许多开发者的更替,因此变得越来越臃肿和难以维护。此外,我们团队中的Android开发人员一直很短缺,这导致我们在两个平台上的开发进度和质量存在巨大差异。因此,我们决定采用ReactNative技术,将原生工程迁移到该平台上,以提高应用程序的可维护性和整体性能。我在《ReactNative技术选型分析》中,阐述了对现有原生工程集成ReactNative的</div>
                    </li>
                    <li><a href="/article/1903780309283958784.htm"
                           title="Android React Native应用逆向分析初探" target="_blank">Android React Native应用逆向分析初探</a>
                        <span class="text-muted">byc6352</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                        <div>随着移动互联网时代的到来,用户在移动设备上花费的时间越来越多,不仅是因为移动设备方便携带,而且还因为层出不穷的大量应用提供为用户使用,以往在电脑上才能做的事情,现在仅靠一部手机就可以解决了。当前的移动设备厂商很多,但是被广泛使用的主流系统却只有两个,Android和iOS,因此现在大多数应用都会有两个版本,Android版本和iOS版本。然而这两种应用的开发方式却完全不同,移动客户端开发人员不得不</div>
                    </li>
                    <li><a href="/article/1903780182876024832.htm"
                           title="实时光线追踪技术:Ray Tracing_2024-07-21_02-55-16.Tex" target="_blank">实时光线追踪技术:Ray Tracing_2024-07-21_02-55-16.Tex</a>
                        <span class="text-muted">chenjj4003</span>
<a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F%E5%BC%80%E5%8F%91/1.htm">游戏开发</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%9F%A9%E9%98%B5/1.htm">矩阵</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/1.htm">线性代数</a><a class="tag" taget="_blank" href="/search/%E9%AA%A8%E9%AA%BC%E7%BB%91%E5%AE%9A/1.htm">骨骼绑定</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>实时光线追踪技术:RayTracing实时光线追踪技术教程基础知识光线追踪原理光线追踪是一种渲染技术,它通过模拟光线在场景中的传播和反射来生成图像。在实时光线追踪中,这一过程被优化以在有限的时间内完成,通常用于游戏和实时动画。其核心原理是逆向追踪,即从观察者(摄像机)发出光线,而不是从光源发出,这样可以减少计算量。示例:光线追踪的基本算法#Python示例代码,展示如何计算光线与场景中物体的交点c</div>
                    </li>
                    <li><a href="/article/1903779804277174272.htm"
                           title="DeepSeek:智能搜索与分析的新纪元" target="_blank">DeepSeek:智能搜索与分析的新纪元</a>
                        <span class="text-muted">XRC2231</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>在人工智能浪潮席卷全球的今天,DeepSeek如同一颗璀璨的新星,以其独特的魅力和强大的功能,在AI领域脱颖而出。DeepSeek,这一基于深度学习和数据挖掘技术的智能搜索与分析系统,不仅重新定义了搜索引擎的边界,更以其卓越的性能和广泛的应用场景,为全球用户带来了前所未有的智能体验。本文将从DeepSeek的定义、特点、应用场景、优势等方面进行全面而深入的介绍,带您领略这一新兴技术的独特魅力。一、</div>
                    </li>
                                <li><a href="/article/57.htm"
                                       title="多线程编程之join()方法" target="_blank">多线程编程之join()方法</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/JOIN/1.htm">JOIN</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a>
                                    <div>现实生活中,有些工作是需要团队中成员依次完成的,这就涉及到了一个顺序问题。现在有T1、T2、T3三个工人,如何保证T2在T1执行完后执行,T3在T2执行完后执行?问题分析:首先问题中有三个实体,T1、T2、T3, 因为是多线程编程,所以都要设计成线程类。关键是怎么保证线程能依次执行完呢?   
Java实现过程如下: 
public class T1 implements Runnabl</div>
                                </li>
                                <li><a href="/article/184.htm"
                                       title="java中switch的使用" target="_blank">java中switch的使用</a>
                                    <span class="text-muted">bingyingao</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/break/1.htm">break</a><a class="tag" taget="_blank" href="/search/continue/1.htm">continue</a>
                                    <div>java中的switch仅支持case条件仅支持int、enum两种类型。 
用enum的时候,不能直接写下列形式。 
 
 
switch (timeType) {
            case ProdtransTimeTypeEnum.DAILY:

                break;

            default:
                br</div>
                                </li>
                                <li><a href="/article/311.htm"
                                       title="hive having count 不能去重" target="_blank">hive having count 不能去重</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/%E5%8E%BB%E9%87%8D/1.htm">去重</a><a class="tag" taget="_blank" href="/search/having+count/1.htm">having count</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E6%95%B0/1.htm">计数</a>
                                    <div>hive在使用having count()是,不支持去重计数 
  
hive (default)> select imei from t_test_phonenum where ds=20150701 group by imei having count(distinct phone_num)>1 limit 10;  
FAILED: SemanticExcep</div>
                                </li>
                                <li><a href="/article/438.htm"
                                       title="WebSphere对JSP的缓存" target="_blank">WebSphere对JSP的缓存</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/WAS+JSP+%E7%BC%93%E5%AD%98/1.htm">WAS JSP 缓存</a>
                                    <div>      对于线网上的工程,更新JSP到WebSphere后,有时会出现修改的jsp没有起作用,特别是改变了某jsp的样式后,在页面中没看到效果,这主要就是由于websphere中缓存的缘故,这就要清除WebSphere中jsp缓存。要清除WebSphere中JSP的缓存,就要找到WAS安装后的根目录。 
       现服务</div>
                                </li>
                                <li><a href="/article/565.htm"
                                       title="设计模式总结" target="_blank">设计模式总结</a>
                                    <span class="text-muted">朱辉辉33</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>1.工厂模式 
  1.1 工厂方法模式 (由一个工厂类管理构造方法) 
     1.1.1普通工厂模式(一个工厂类中只有一个方法) 
     1.1.2多工厂模式(一个工厂类中有多个方法) 
     1.1.3静态工厂模式(将工厂类中的方法变成静态方法) 
&n</div>
                                </li>
                                <li><a href="/article/692.htm"
                                       title="实例:供应商管理报表需求调研报告" target="_blank">实例:供应商管理报表需求调研报告</a>
                                    <span class="text-muted">老A不折腾</span>
<a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E6%8A%A5%E8%A1%A8%E7%B3%BB%E7%BB%9F/1.htm">报表系统</a><a class="tag" taget="_blank" href="/search/%E6%8A%A5%E8%A1%A8%E8%BD%AF%E4%BB%B6/1.htm">报表软件</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8C%96%E9%80%89%E5%9E%8B/1.htm">信息化选型</a>
                                    <div>引言 
随着企业集团的生产规模扩张,为支撑全球供应链管理,对于供应商的管理和采购过程的监控已经不局限于简单的交付以及价格的管理,目前采购及供应商管理各个环节的操作分别在不同的系统下进行,而各个数据源都独立存在,无法提供统一的数据支持;因此,为了实现对于数据分析以提供采购决策,建立报表体系成为必须。 业务目标 
1、通过报表为采购决策提供数据分析与支撑 
2、对供应商进行综合评估以及管理,合理管理和</div>
                                </li>
                                <li><a href="/article/819.htm"
                                       title="mysql" target="_blank">mysql</a>
                                    <span class="text-muted">林鹤霄</span>

                                    <div>转载源:http://blog.sina.com.cn/s/blog_4f925fc30100rx5l.html 
mysql -uroot -p 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 
  
[root@centos var]# service mysql</div>
                                </li>
                                <li><a href="/article/946.htm"
                                       title="Linux下多线程堆栈查看工具(pstree、ps、pstack)" target="_blank">Linux下多线程堆栈查看工具(pstree、ps、pstack)</a>
                                    <span class="text-muted">aigo</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>原文:http://blog.csdn.net/yfkiss/article/details/6729364 
  
1. pstree 
pstree以树结构显示进程$ pstree -p work | grep adsshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552)  &n</div>
                                </li>
                                <li><a href="/article/1073.htm"
                                       title="html input与textarea 值改变事件" target="_blank">html input与textarea 值改变事件</a>
                                    <span class="text-muted">alxw4616</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>// 文本输入框(input) 文本域(textarea)值改变事件 
// onpropertychange(IE) oninput(w3c) 
$('input,textarea').on('propertychange input', function(event) { 
     console.log($(this).val()) 
}); 
  </div>
                                </li>
                                <li><a href="/article/1200.htm"
                                       title="String类的基本用法" target="_blank">String类的基本用法</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/String/1.htm">String</a>
                                    <div>  
字符串的用法; 
    // 根据字节数组创建字符串 
byte[] by = { 'a', 'b', 'c', 'd' };
String newByteString = new String(by); 
  
  
    1,length()  获取字符串的长度 
  
  &nbs</div>
                                </li>
                                <li><a href="/article/1327.htm"
                                       title="JDK1.5 Semaphore实例" target="_blank">JDK1.5 Semaphore实例</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a><a class="tag" taget="_blank" href="/search/Semaphore/1.htm">Semaphore</a>
                                    <div>Semaphore类 
       一个计数信号量。从概念上讲,信号量维护了一个许可集合。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。 
S</div>
                                </li>
                                <li><a href="/article/1454.htm"
                                       title="使用GZip来压缩传输量" target="_blank">使用GZip来压缩传输量</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/GZip/1.htm">GZip</a>
                                    <div>        启动GZip压缩要用到一个开源的Filter:PJL Compressing Filter。这个Filter自1.5.0开始该工程开始构建于JDK5.0,因此在JDK1.4环境下只能使用1.4.6。 
        PJL Compressi</div>
                                </li>
                                <li><a href="/article/1581.htm"
                                       title="【Java范型三】Java范型详解之范型类型通配符" target="_blank">【Java范型三】Java范型详解之范型类型通配符</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>  
  
定义如下一个简单的范型类, 
  
package com.tom.lang.generics;

public class Generics<T> {
    private T value;
    public Generics(T  value) {
        this.value = value;
    }
} </div>
                                </li>
                                <li><a href="/article/1708.htm"
                                       title="【Hadoop十二】HDFS常用命令" target="_blank">【Hadoop十二】HDFS常用命令</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a>
                                    <div>1. 修改日志文件查看器 
  
hdfs oev -i edits_0000000000000000081-0000000000000000089 -o edits.xml
cat edits.xml 
  
修改日志文件转储为xml格式的edits.xml文件,其中每条RECORD就是一个操作事务日志 
  2. fsimage查看HDFS中的块信息等 
&nb</div>
                                </li>
                                <li><a href="/article/1835.htm"
                                       title="怎样区别nginx中rewrite时break和last" target="_blank">怎样区别nginx中rewrite时break和last</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>在使用nginx配置rewrite中经常会遇到有的地方用last并不能工作,换成break就可以,其中的原理是对于根目录的理解有所区别,按我的测试结果大致是这样的。  
 
 location /    
 {     
     proxy_pass http://test; </div>
                                </li>
                                <li><a href="/article/1962.htm"
                                       title="java-21.中兴面试题 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 , 使其和等于 m" target="_blank">java-21.中兴面试题 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 , 使其和等于 m</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class CombinationToSum {

	/*
第21 题
2010 年中兴面试题
编程求解:
输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 ,
使其和等</div>
                                </li>
                                <li><a href="/article/2089.htm"
                                       title="eclipse svn 帐号密码修改问题" target="_blank">eclipse svn 帐号密码修改问题</a>
                                    <span class="text-muted">开窍的石头</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a><a class="tag" taget="_blank" href="/search/svn%E5%B8%90%E5%8F%B7%E5%AF%86%E7%A0%81%E4%BF%AE%E6%94%B9/1.htm">svn帐号密码修改</a>
                                    <div>问题描述: 
     Eclipse的SVN插件Subclipse做得很好,在svn操作方面提供了很强大丰富的功能。但到目前为止,该插件对svn用户的概念极为淡薄,不但不能方便地切换用户,而且一旦用户的帐号、密码保存之后,就无法再变更了。 
解决思路: 
     删除subclipse记录的帐号、密码信息,重新输入</div>
                                </li>
                                <li><a href="/article/2216.htm"
                                       title="[电子商务]传统商务活动与互联网的结合" target="_blank">[电子商务]传统商务活动与互联网的结合</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E5%95%86%E5%8A%A1/1.htm">电子商务</a>
                                    <div> 
 
      某一个传统名牌产品,过去销售的地点就在某些特定的地区和阶层,现在进入互联网之后,用户的数量群突然扩大了无数倍,但是,这种产品潜在的劣势也被放大了无数倍,这种销售利润与经营风险同步放大的效应,在最近几年将会频繁出现。。。。 
 
       如何避免销售量和利润率增加的</div>
                                </li>
                                <li><a href="/article/2343.htm"
                                       title="java 解析 properties-使用 Properties-可以指定配置文件路径" target="_blank">java 解析 properties-使用 Properties-可以指定配置文件路径</a>
                                    <span class="text-muted">cuityang</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/properties/1.htm">properties</a>
                                    <div>#mq 
xdr.mq.url=tcp://192.168.100.15:61618; 
 
import java.io.IOException; 
import java.util.Properties; 
 
 
public class Test { 
 
 String conf = "log4j.properties"; 
 private static final</div>
                                </li>
                                <li><a href="/article/2470.htm"
                                       title="Java核心问题集锦" target="_blank">Java核心问题集锦</a>
                                    <span class="text-muted">darrenzhu</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80/1.htm">基础</a><a class="tag" taget="_blank" href="/search/%E6%A0%B8%E5%BF%83/1.htm">核心</a><a class="tag" taget="_blank" href="/search/%E9%9A%BE%E7%82%B9/1.htm">难点</a>
                                    <div>注意,这里的参考文章基本来自Effective Java和jdk源码 
 
 
1)ConcurrentModificationException 
当你用for each遍历一个list时,如果你在循环主体代码中修改list中的元素,将会得到这个Exception,解决的办法是: 
1)用listIterator, 它支持在遍历的过程中修改元素, 
2)不用listIterator, new一个</div>
                                </li>
                                <li><a href="/article/2724.htm"
                                       title="1分钟学会Markdown语法" target="_blank">1分钟学会Markdown语法</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/markdown/1.htm">markdown</a>
                                    <div>markdown 简明语法 基本符号 
 
 *,-,+ 3个符号效果都一样,这3个符号被称为 Markdown符号  
 空白行表示另起一个段落 
 `是表示inline代码,tab是用来标记 代码段,分别对应html的code,pre标签 
 换行 
 
 单一段落( <p>) 用一个空白行 
 连续两个空格 会变成一个 <br> 
 连续3个符号,然后是空行</div>
                                </li>
                                <li><a href="/article/2851.htm"
                                       title="Gson使用二(GsonBuilder)" target="_blank">Gson使用二(GsonBuilder)</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/gson/1.htm">gson</a><a class="tag" taget="_blank" href="/search/GsonBuilder/1.htm">GsonBuilder</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2175473 一.概述 
    GsonBuilder用来定制java跟json之间的转换格式 
  二.基本使用 
实体测试类: 
温馨提示:默认情况下@Expose注解是不起作用的,除非你用GsonBuilder创建Gson的时候调用了GsonBuilder.excludeField</div>
                                </li>
                                <li><a href="/article/2978.htm"
                                       title="报ClassNotFoundException: Didn't find class "...Activity" on path: DexPathList" target="_blank">报ClassNotFoundException: Didn't find class "...Activity" on path: DexPathList</a>
                                    <span class="text-muted">gundumw100</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>有一个工程,本来运行是正常的,我想把它移植到另一台PC上,结果报: 
 
 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mobovip.bgr/com.mobovip.bgr.MainActivity}: java.lang.ClassNotFoundException: Didn't f</div>
                                </li>
                                <li><a href="/article/3105.htm"
                                       title="JavaWeb之JSP指令" target="_blank">JavaWeb之JSP指令</a>
                                    <span class="text-muted">ihuning</span>
<a class="tag" taget="_blank" href="/search/javaweb/1.htm">javaweb</a>
                                    <div>  
要点 
  
JSP指令简介  
page指令  
include指令  
  
JSP指令简介  
  
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。 
JSP指令的基本语法格式: 
<%@ 指令 属性名="</div>
                                </li>
                                <li><a href="/article/3232.htm"
                                       title="mac上编译FFmpeg跑ios" target="_blank">mac上编译FFmpeg跑ios</a>
                                    <span class="text-muted">啸笑天</span>
<a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a>
                                    <div>1、下载文件:https://github.com/libav/gas-preprocessor, 复制gas-preprocessor.pl到/usr/local/bin/下, 修改文件权限:chmod 777 /usr/local/bin/gas-preprocessor.pl 
2、安装yasm-1.2.0 
curl http://www.tortall.net/projects/yasm</div>
                                </li>
                                <li><a href="/article/3359.htm"
                                       title="sql mysql oracle中字符串连接" target="_blank">sql mysql oracle中字符串连接</a>
                                    <span class="text-muted">macroli</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a>
                                    <div>有的时候,我们有需要将由不同栏位获得的资料串连在一起。每一种资料库都有提供方法来达到这个目的: 
 
 MySQL: CONCAT() 
 Oracle: CONCAT(), || 
 SQL Server: + 
 
CONCAT() 的语法如下: 
Mysql 中 CONCAT(字串1, 字串2, 字串3, ...): 将字串1、字串2、字串3,等字串连在一起。 
请注意,Oracle的CON</div>
                                </li>
                                <li><a href="/article/3486.htm"
                                       title="Git fatal: unab SSL certificate problem: unable to get local issuer ce rtificate" target="_blank">Git fatal: unab SSL certificate problem: unable to get local issuer ce rtificate</a>
                                    <span class="text-muted">qiaolevip</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/%E7%BA%B5%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">纵观千象</a>
                                    <div>// 报错如下: 
$ git pull origin master 
fatal: unable to access 'https://git.xxx.com/': SSL certificate problem: unable to get local issuer ce 
rtificate 
  
// 原因: 
由于git最新版默认使用ssl安全验证,但是我们是使用的git未设</div>
                                </li>
                                <li><a href="/article/3613.htm"
                                       title="windows命令行设置wifi" target="_blank">windows命令行设置wifi</a>
                                    <span class="text-muted">surfingll</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/wifi/1.htm">wifi</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0%E6%9C%ACwifi/1.htm">笔记本wifi</a>
                                    <div>还没有讨厌无线wifi的无尽广告么,还在耐心等待它慢慢启动么 
教你命令行设置 笔记本电脑wifi: 
 
1、开启wifi命令 
 

netsh wlan set hostednetwork mode=allow ssid=surf8 key=bb123456
netsh wlan start hostednetwork
pause
 
 其中pause是等待输入,可以去掉 
 
2、</div>
                                </li>
                                <li><a href="/article/3740.htm"
                                       title="Linux(Ubuntu)下安装sysv-rc-conf" target="_blank">Linux(Ubuntu)下安装sysv-rc-conf</a>
                                    <span class="text-muted">wmlJava</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/sysv-rc-conf/1.htm">sysv-rc-conf</a>
                                    <div>安装:sudo apt-get install sysv-rc-conf 使用:sudo sysv-rc-conf 
操作界面十分简洁,你可以用鼠标点击,也可以用键盘方向键定位,用空格键选择,用Ctrl+N翻下一页,用Ctrl+P翻上一页,用Q退出。 
  
  
背景知识 
sysv-rc-conf是一个强大的服务管理程序,群众的意见是sysv-rc-conf比chkconf</div>
                                </li>
                                <li><a href="/article/3867.htm"
                                       title="svn切换环境,重发布应用多了javaee标签前缀" target="_blank">svn切换环境,重发布应用多了javaee标签前缀</a>
                                    <span class="text-muted">zengshaotao</span>
<a class="tag" taget="_blank" href="/search/javaee/1.htm">javaee</a>
                                    <div>更换了开发环境,从杭州,改变到了上海。svn的地址肯定要切换的,切换之前需要将原svn自带的.svn文件信息删除,可手动删除,也可通过废弃原来的svn位置提示删除.svn时删除。 
  
然后就是按照最新的svn地址和规范建立相关的目录信息,再将原来的纯代码信息上传到新的环境。然后再重新检出,这样每次修改后就可以看到哪些文件被修改过,这对于增量发布的规范特别有用。 
  
检出</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>