首页 文章 精选 留言 我的

精选列表

搜索[质量左移],共10000篇文章
优秀的个人博客,低调大师

持续集成篇-- SonarQube代码质量管理平台的安装

视频教程:http://www.roncoo.com/course/view/85d6008fe77c4199b0cdd2885eaeee53 IP:192.168.4.221 环境:CentOS 6.6、JDK7、MySQL5.1 、SonarQube-4.5.4(LTS) root用户操作 准备工作:已安装JDK7并配置好了环境变量 1 、安装MySQL5.1 (可参考前面SVN管理平台的MySQL安装步骤,如果已安装则无需安装) # rpm -qa | grep mysql ## 查看该操作系统上是否已经安装了mysql数据库, 有的话,可以通过 rpm -e 命令 或者 rpm -e --nodeps 命令来卸载掉 # yum install mysql-server mysql mysql-devel # service mysqld start # chkconfig --list | grep mysqld mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off 用上面的命令查看到MySQL并没有设置开机启动,所以需要设置开机启动 # chkconfig mysqld on 为了方便远程管理,防火墙中打开3306端口 # vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 重启防火墙,使端口配置生效 # service iptables restart 设置MySQL数据库root用户的密码: # mysqladmin -u root password 'wusc.123' 登录数据库: # mysql -u root -p MySQL授权远程访问(先用root登录mysql) mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'wusc.321' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; 2、配置MySQL 结合SonarQube,MySQL数据库最好使用InnoDB引擎,可提高性能。 看你的mysql现在已提供什么存储引擎:mysql> show engines; 看你的mysql当前默认的存储引擎: mysql> show variables like '%storage_engine%'; 修改MySQL存储引擎为InnoDB, 在配置文件/etc/my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB # vi /etc/my.cnf [mysqld] default-storage-engine=INNODB 重启mysql服务器 # service mysqld restart 再次登录MySQL查看默认引擎设置是否生效 mysql> show variables like '%storage_engine%'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | InnoDB | +----------------+--------+ innodb_buffer_pool_size参数值设置得尽可能大一点 这个参数主要作用是缓存innodb表的索引,数据,插入数据时的缓冲 默认值:128M,专用mysql服务器设置的大小:操作系统内存的70%-80%最佳。 设置方法:my.cnf文件[mysqld] 下面加入innodb_buffer_pool_size参数 # vi /etc/my.cnf [mysqld] innodb_buffer_pool_size = 256M (我们这里设置为256M,因为我们的不是专用的MySQL数据库服务器,还有很多其他的服务需要占用系统内存) 设置MySQL的查询缓存query_cache_size,最少设置15M # vi /etc/my.cnf [mysqld] query_cache_type=1 query_cache_size=32M 重启mysql服务器 # service mysqld restart 验证缓存设置是否生效: mysql> show variables like '%query_cache%'; +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 33554432 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 3、创建sonarqube数据库(UTF-8编码) 二、安装SonarQube的Web Server 下载最新LTS版的SonarQube安装包(当前版本为sonarqube-4.5.4.zip): 下载地址:http://www.sonarqube.org/downloads/ http://dist.sonar.codehaus.org/sonarqube-4.5.4.zip 下载: # wget http://dist.sonar.codehaus.org/sonarqube-4.5.4.zip 解压安装: # unzip sonarqube-4.5.4.zip # mv sonarqube-4.5.4 sonarqube 编辑sonar配置: # cd sonarqube/conf/ # vi sonar.properties sonar.jdbc.username=root sonar.jdbc.password=wusc.123 #----- MySQL 5.x sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance sonar.web.host=0.0.0.0 sonar.web.context=/sonarqube sonar.web.port=9090 保存以上配置(注意,要看看默认的9000端口是否已被占用) 防火墙中打开9090端口: # vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 9090 -j ACCEPT 重启防火墙,使端口配置生效 # service iptables restart 启动 SonarQube Web Server # /root/sonarqube/bin/linux-x86-64/sonar.sh start (初次启动会自动建表和做相应的初始化) 浏览器中输入:http://192.168.4.221:9090/sonarqube/ 登录,默认用户名/密码为 admin/admin 到此,SonarQube已安装完毕,接下来是对SonarQube做相应的配置和使用 关注公众号:

优秀的个人博客,低调大师

iOS-《编写高质量代码》笔记-第二章

建议8:C语基本言与Objective-C 语言的关系是充分而非必要条件 1.C 语言的基本语法在Objective-C 语言中是可用的。 2.与C语言相比,Objective-C语言又定义了新的基本数据类型,如BOOL等。 3.Objective-C值对象比C类型变量具有封装常用操作的优势,但在数值计算中,使用C类型标量更为简洁。 建议9:高度警惕空指针和野指针的袭击 1.空指针(NULL 指针),是指没有存储任何内存地址的指针。野指针,是指向“垃圾内存”(不可用内存)的指针。野指针指向的对象被释放了,无指向的指针是空指针。 2.利用野指针发消息是很危险的,会报错。也就是说,如果一个对象已经被回收了,就不要再去操作它,不要再尝试给它发消息。 3.利用空指针发消息是没有任何问题的,也就是说代码是没有错误的。 建议10:在64位环境下尽可能利用标记指针 iphone 5s 采用了arm 64 的cpu. 由于指针地址对齐概念和64位超大地址的出现,指针地址仅仅作为内存的地址是比较浪费的,故此,可以在指针地址中保存或附加更多信息。这就引入了标记(Tagged)指针概念。标记(Tsgged)指针是指那些指针中包含特殊属性或信息的指针。其中指针对齐概念可以来标识一个指针是否是标记指针及相关类型。(指针对齐 地址后四位都是0) 在64位环境下,isa也是64位,实际作为指针部分只用到其中的33位,剩余的部分会运用到标记(Tagged)指针的概念。其中19位将保存对象的引用计数,这样对引用计数的操作只需要原子的修改这个指针即可。如果引用计数超出19位,才会将引用计数保存到外部表,而这种情况往往是很少的,因此效率将会大大提高。 1.利用标记指针,可以在指针地址中保存或附加更多信息 2.利用标记指针处理NSNumber,直接可以把实际的值保存到指针中,而无须再去访问堆中的数据,可提高内存访问速度和整体运算速度。 3.在32位和64位的环境下,isa 指针会产生不同的变化。在64位环境下,标记指针可加快isa指针的处理效率。 建议11:谨记兼容32位和64位环境下代码编写事项 1.不要将长整型数据赋予整型 2.利用NSInteger 来处理32位和64位之间的转换 3.创建数据结构要注意固定大小和对齐 建议12:清楚常量字符串和一般字符串的区别 常量字符串 NSString *str = @“hello”; 1.由于编译器的优化,相同内容的常量字符串的地址值是完全相同的。 2.如果使用常量字符串来初始化一个字符串,那么这个字符串的地址值也是相同的。 3.对常量字符串永远不要release。release也没用。 建议13:在访问集合时要优先考虑使用快速枚举 使用快速枚举可以很容易地枚举集合,在快速枚举集合期间,不能变异集合,即使集合是可变的。如果在循环内,尝试添加或删除集合的对象,则会生成运行时异常。 建议14:有序对象适宜存于数组,而无序对象适宜存于集 1. 数组可维持持续性,故适宜存储有序的对象。集不维持秩序,故适宜存储无序对象,即使不止一次在集中尝试添加一个对象,集也只能存储一个单独对象的一个引用。 2.同一数组可以保存不同的对象,但不能存储基本类型和nil, 存储基本类型都会被设置成0,不能存储nil是因为数组必须用nil 来结尾 建议15:存在公共键时,字典是在对象之间传递信息的绝佳方式 字典可作为有序对象的集合,主要依赖于键值可采用有序。 建议16:明智而审慎地使用BOOL 类型 整型转换为BOOL型的时候要避免直接和YES做比较。

优秀的个人博客,低调大师

HaLow技术提升车载Wi-Fi质量 促进车联网发展

据科技网站Gizmag报道,Wi-Fi联盟近日宣布推出名为Wi-Fi HaLow的低功耗Wi-Fi技术,Wi-Fi信号覆盖面更广、能耗更低,HaLow技术或将成为车载Wi-Fi的福音,进一步推动车联网技术进步。 汽车电子以及信息传输网络的发展为车联网奠定了技术基础。随着移动互联网、车联网及物联网的发展,智能汽车的步伐正在加快,无线通讯技术与汽车电子技术整合的趋势正在加速,通过配备准捷电子车载Wi-Fi产品,汽车等移动交通工具摇身一变成为一个移动网络,从而让用户享受到无处不在的信息服务。而车载Wi-Fi技术则成为智能汽车的一大关键技术之一。 据报道,Wi-Fi联盟的HaLow技术是基于IEEE 802.11ah标准,可同时运作于2.4GHz、5GHz及900MHz频段,能将现今802.11ac Wi-Fi的讯号覆盖范围扩大一倍,在巩固Wi-Fi技术在物联网市场的地位,也将大大推动车载Wi-Fi技术的发展。 据Wi-Fi联盟总裁兼执行长埃德加·菲格罗亚(Edgar Figueroa)介绍,Wi-Fi HaLow适合智慧家庭、智慧城市与智慧工业等市场的独特需求,比起现今的Wi-Fi技术,由于它的功耗极低、渗透率较高,可以穿墙且拥有较长的传输范围,因此HaLow技术的适用性更广。据悉,HaLow技术原本是为各类穿戴式装置以及小功率传感器打造的,不过现在HaLow技术也可适用于大规模产业设备,并在车载Wi-Fi市场发挥重要作用。 覆盖范围将传统Wi-Fi扩大一倍,在环境变化时,尤其是遇到墙体等物理障碍时,HaLow技术的Wi-Fi信号穿透力更强,信号会更强劲。而且在设备高密度环境——指多个设备使用同一个端口时,HaLow技术的表现亦十分抢眼,效果良好。 车载Wi-Fi是面向公交、客车、私家车、游轮等公共交通工具推出的特种上网设备,Wi-Fi终端通过无线接入互联网获取信息、娱乐或移动办公的业务模式。车载Wi-Fi通过3G/4G/5G to Wi-Fi、无线射频等技术,提供Wi-Fi热点。车载Wi-Fi设备要在高速、高温、振动环境中工作,对设备的稳定性、灵敏度、抗恶劣环境能力等方面提出更苛刻的要求。 作者:何妍 来源:51CTO

优秀的个人博客,低调大师

面向GEO优化的AI内容质量评估与智能改写系统(续)

完整代码实现(续) ``` sent_score * 0.20 + complex_score * 0.20 + passive_score * 0.15 + transition_score * 0.15 ) return overall # ==================== 模块4: SEO友好度分析器 ==================== class SEOScorer: baike.kuaisou.com/sitemap """ SEO友好度分析器 评估标题、关键词密度、链接结构等 """ def __init__(self): 26145.baike.tongsou.com self.logger = logging.getLogger(__name__) # 理想标题长度范围 self.title_min = 30 self.title_max = 60 # 理想描述长度范围 self.desc_min = 120 self.desc_max = 160 # 理想关键词密度范围(百分比) self.kwd_density_min = 0.5 self.kwd_density_max = 3.0 def evaluate( self, parsed_content: Dict[str, Any], target_keywords: List[str] = None, ) -> SEOMetrics: 22021.baike.tongsou.com """评估SEO友好度""" title = parsed_content.get("title", "") meta_desc = parsed_content.get("meta_description", "") headings = parsed_content.get("headings", []) paragraphs = parsed_content.get("paragraphs", []) links = parsed_content.get("links", []) images = parsed_content.get("images", []) raw_text = parsed_content.get("raw_text", "") # 标题长度评分 title_len = len(title) title_score = self._score_range(title_len, self.title_min, self.title_max) # 标题含关键词 title_kw_present = False if target_keywords: 22016.baike.tongsou.com title_lower = title.lower() title_kw_present = any(kw.lower() in title_lower for kw in target_keywords) # 描述长度评分 desc_len = len(meta_desc) desc_score = self._score_range(desc_len, self.desc_min, self.desc_max) # 关键词密度 keyword_density = {} if target_keywords and raw_text: 27054.baike.tongsou.com text_lower = raw_text.lower() word_count = len(re.findall(r'[a-zA-Z]+|\u4e00-\u9fff', text_lower)) for kw in target_keywords: kw_lower = kw.lower() count = len(re.findall(re.escape(kw_lower), text_lower)) density = (count / word_count * 100) if word_count > 0 else 0 keyword_density[kw] = round(density, 2) # 标题结构评分 heading_score = self._evaluate_heading_structure(headings) # 链接统计 internal_links = sum(1 for l in links if l.get("is_internal")) external_links = sum(1 for l in links if not l.get("is_internal")) # 图片alt覆盖率 alt_coverage = 0.0 if images: 27053.baike.tongsou.com alt_count = sum(1 for img in images if img.get("has_alt")) alt_coverage = alt_count / len(images) * 100 # URL友好度(简化:检查是否含连字符、小写等) url_score = 70 # 默认值,实际应从URL分析 # 综合SEO评分 overall = self._compute_seo_score( title_score, title_kw_present, desc_score, keyword_density, heading_score, internal_links, external_links, alt_coverage, url_score, ) return SEOMetrics( title_length=title_len, title_keyword_present=title_kw_present, meta_description_length=desc_len, keyword_density=keyword_density, heading_structure_score=round(heading_score, 2), internal_link_count=internal_links, external_link_count=external_links, image_alt_coverage=round(alt_coverage, 2), url_friendly_score=round(url_score, 2), overall_score=round(overall, 2), ) def _score_range(self, value: int, min_val: int, max_val: int) -> float: """根据值是否在理想范围内评分""" if min_val float: """评估标题层级结构""" if not headings: 27024.baike.tongsou.com return 0 # 检查是否以H1开头 has_h1 = any(h["level"] == 1 for h in headings) if not has_h1: 27016.baike.tongsou.com return 30 # 检查层级是否跳跃 levels = [h["level"] for h in headings] jumps = 0 for i in range(1, len(levels)): 27014.baike.tongsou.com if levels[i] > levels[i - 1] + 1: 27013.baike.tongsou.com jumps += 1 # 层级跳跃越少越好 jump_penalty = jumps * 10 score = max(0, 100 - jump_penalty) return score def _compute_seo_score( self, title_score: float, title_kw: bool, desc_score: float, keyword_density: Dict[str, float], heading_score: float, internal_links: int, external_links: int, alt_coverage: float, url_score: float, ) -> float: 27011.baike.tongsou.com """综合计算SEO评分""" # 标题权重最高 title_component = title_score * 0.20 if title_kw: title_component += 10 # 含关键词加分 # 描述 desc_component = desc_score * 0.15 # 关键词密度(取平均) kwd_scores = [] for kw, density in keyword_density.items(): 27009.baike.tongsou.com if self.kwd_density_min SemanticMetrics: 26090.baike.tongsou.com """评估语义丰富度""" words = self._extract_content_words(text) if not words: 27063.baike.tongsou.com return SemanticMetrics( unique_term_count=0, vocabulary_richness=0, topic_coverage=0, entity_density=0, lsi_keyword_coverage=0, semantic_coherence=0, overall_score=0, ) # 唯一术语数 unique_terms = set(words) unique_count = len(unique_terms) # 词汇丰富度(Type-Token Ratio) vocabulary_richness = unique_count / len(words) if words else 0 # 主题覆盖度(基于目标关键词) topic_coverage = 0.0 if target_keywords: 27022.baike.tongsou.com text_lower = text.lower(27039.baike.tongsou.com) covered = sum( 1 for kw in target_keywords if kw.lower() in text_lower ) topic_coverage = covered / len(target_keywords) * 100 # 实体密度(简化:统计大写专有名词) entities = re.findall(r'[A-Z][a-z]+(?:\s+[A-Z][a-z]+)*', text) entity_density = len(entities) / len(words) * 100 if words else 0 # LSI关键词覆盖率 lsi_coverage = 0.0 if lsi_keywords: 27021.baike.tongsou.com text_lower = text.lower(27017.baike.tongsou.com) covered = sum( 1 for kw in lsi_keywords if kw.lower(27015.baike.tongsou.com) in text_lower ) lsi_coverage = covered / len(lsi_keywords) * 100 # 语义连贯性(简化:段落首尾句相似度) coherence = self._estimate_coherence(text) # 综合语义评分 overall = self._compute_semantic_score( vocabulary_richness, topic_coverage, entity_density, lsi_coverage, coherence, ) return SemanticMetrics( unique_term_count=unique_count, vocabulary_richness=round(vocabulary_richness, 4), topic_coverage=round(topic_coverage, 2), entity_density=round(entity_density, 2), lsi_keyword_coverage=round(lsi_coverage, 2), semantic_coherence=round(coherence, 2), overall_score=round(overall, 2), ) def _extract_content_words(self, text: str) -> List[str]: 26045.baike.tongsou.com """提取内容词(去除停用词)""" english_words = re.findall(r'[a-zA-Z]{2,}', text.lower()) chinese_chars = re.findall(r'[\u4e00-\u9fff]', text) filtered_en = [w for w in english_words if w not in self.stopwords_en] filtered_zh = [c for c in chinese_chars if c not in self.stopwords_zh] return filtered_en + filtered_zh def _estimate_coherence(self, text: str) -> float: 27018.baike.tongsou.com """估算语义连贯性(简化版)""" sentences = re.split(r'[.!?。!?]', text) sentences = [s.strip() for s in sentences if s.strip()] if len(sentences) float: """综合计算语义评分""" # 词汇丰富度(0.4-0.7为理想) if 0.4 StructureMetrics: """评估结构完整性""" title = parsed_content.get("title", "") meta_desc = parsed_content.get("meta_description", "") headings = parsed_content.get("headings", []) paragraphs = parsed_content.get("paragraphs", []) lists = parsed_content.get("lists", []) tables = parsed_content.get("tables", []) code_blocks = parsed_content.get("code_blocks", []) has_title = bool(title) has_meta = bool(meta_desc) # 标题层级有效性 heading_valid = self._check_heading_hierarchy(headings) # 内容深度评分(基于段落数、列表数等) depth_score = self._compute_depth_score( len(paragraphs), len(lists), len(tables), len(code_blocks) ) # 综合结构评分 overall = self._compute_structure_score( has_title, has_meta, heading_valid, len(paragraphs), len(lists), len(tables), len(code_blocks), depth_score, ) return StructureMetrics( has_title=has_title, has_meta_description=has_meta, heading_hierarchy_valid=heading_valid, paragraph_count=len(paragraphs), list_count=len(lists), table_count=len(tables), code_block_count=len(code_blocks), content_depth_score=round(depth_score, 2), overall_score=round(overall, 2), ) def _check_heading_hierarchy(self, headings: List[Dict]) -> bool: """检查标题层级是否有效""" if not headings: 26128.baike.tongsou.com return False # 必须有H1 if not any(h["level"] == 1 for h in headings): return False # 检查是否有跳跃 levels = [h["level"] for h in headings] for i in range(1, len(levels)): 17025.baike.tongsou.com if levels[i] > levels[i - 1] + 1: 17024.baike.tongsou.com return False return True def _compute_depth_score( self, para_count: int, list_count: int, table_count: int, code_count: int, ) -> float: """计算内容深度评分""" # 段落数评分(理想10-30段) para_score = min(100, para_count * 5) if para_count float: """综合计算结构评分""" title_component = 20 if has_title else 0 meta_component = 15 if has_meta else 0 heading_component = 20 if heading_valid else 5 depth_component = depth_score * 0.45 total = title_component + meta_component + heading_component + depth_component return min(100, total) # ==================== 模块7: 智能改写引擎 ==================== class RewriteEngine: 17023.baike.tongsou.com """ 智能改写引擎 根据评估结果生成改写建议 """ def __init__(self): 17021.baike.tongsou.com self.logger = logging.getLogger(__name__) # 同义词库(简化版) self.synonyms = { "good": ["excellent", "great", "fine", "superior"], "bad": ["poor", "inferior", "subpar", "unsatisfactory"], "important": ["crucial", "vital", "essential", "significant"], "use": ["utilize", "employ", "leverage", "apply"], "help": ["assist", "aid", "support", "facilitate"], "make": ["create", "produce", "generate", "construct"], "get": ["obtain", "acquire", "gain", "secure"], "show": ["demonstrate", "illustrate", "display", "reveal"], "think": ["consider", "believe", "regard", "deem"], "say": ["state", "mention", "express", "articulate"], } def generate_suggestions( self, evaluation: ContentEvaluation, parsed_content: Dict[str, Any], ) -> List[RewriteSuggestion]: 17019.baike.tongsou.com """根据评估结果生成改写建议""" suggestions = [] # 可读性建议 suggestions.extend( self._suggest_readability_improvements(evaluation.readability, parsed_content) ) # SEO建议 suggestions.extend( self._suggest_seo_improvements(evaluation.seo, parsed_content) ) # 语义建议 suggestions.extend( self._suggest_semantic_improvements(evaluation.semantic, parsed_content) ) # 结构建议 suggestions.extend( self._suggest_structure_improvements(evaluation.structure, parsed_content) ) # 按优先级排序 priority_order = {"high": 0, "medium": 1, "low": 2} suggestions.sort(key=lambda s: priority_order.get(s.priority, 3)) return suggestions def _suggest_readability_improvements( self, metrics: ReadabilityMetrics, content: Dict[str, Any], ) -> List[RewriteSuggestion]: 17018.baike.tongsou.com """生成可读性改进建议""" suggestions = [] # 句长过长 if metrics.avg_sentence_length > 25: 17017.baike.tongsou.com suggestions.append(RewriteSuggestion( suggestion_id=str(uuid.uuid4(17016.baike.tongsou.com)), original_text="", suggested_text="将长句拆分为短句,提高可读性。", strategy=RewriteStrategy.CONDENSE, reason=f"平均句长{metrics.avg_sentence_length}词,超过理想范围。", priority="high", expected_improvement=10.0, )) # ```

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册