Categories
程式開發

华为推出自研搜索引擎Petal Search,欲取代谷歌搜索?

华为推出自研搜索引擎Petal Search,支持从AppGallery应用商城以外的第三方平台下载应用。

华为推出自研搜索引擎Petal Search

在美国禁令的“步步紧逼”之下,华为设备无法再使用谷歌套件为其提供服务。禁令下发之初,华为设备在国外并没有自己的应用生态,这就使得在海外市场购买华为设备的用户无法使用设备中的浏览器、地图、应用市场等服务,这也对华为设备在海外的销售带来了不利的影响。

在这种情况下,华为开始逐渐通过华为移动服务(HMS)完善自身的应用生态。早在今年2月,就有消息传出华为已经开始测试谷歌搜索的替代产品Huawei Search。而近日,根据Huawei Central报道,华为完成了谷歌搜索替代产品的测试,将其更名为“Petal Search”后正式发布,该软件已经在华为应用市场AppGallery上线。值得一提的是,该软件集成了此前的“Search”和“AppSearch”功能,除了页面搜索外,Petal Search可以搜索不同渠道的App,如果AppGallery中未能搜索到需要的App时,软件会自动跳转到第三方平台下载应用。…

Categories
程式開發

RASP研发踩坑之attach失败

1.创建一个简单的 Java Agent

主动发起 attach 代码

import com.sun.tools.attach.*;

import java.io.IOException;…

Categories
程式開發

MySQL慢查询优化(线上案例调优)

文章说明

这篇文章主要是记录自己最近在真实工作中遇到的慢查询的案例,然后进行调优分析的过程,欢迎大家一起讨论调优经验。(以下出现的表名,列名都是化名,实际数据也进行过一点微调。)

一.复杂的深分页问题优化

背景

有一个article表,用于存储文章的基本信息的,有文章id,作者id等一些属性,有一个content表,主要用于存储文章的内容,主键是article_id,需求需要将一些满足条件的作者发布的文章导入到另外一个库,所以我同事就在项目中先查询出了符合条件的作者id,然后开启了多个线程,每个线程每次取一个作者id,执行查询和导入工作。

查询出作者id是1111,名下的所有文章信息,文章内容相关的信息的SQL如下:

SELECT
a.*, c.*
FROM

Categories
程式開發

任务级并发与 Executor 框架

对于多数提供操作系统级别抽象映射的程序设计语言来说,并发程序的基本复用单位是线程。在大多数现代操作系统中,线程是基本的调度单位。在没有明确的协同机制的情况下,线程将彼此独立执行。同时,同一线程同一时刻只能执行一个动作,这意味着同一线程内代码的串行执行是可以得到保障的。

然而,由线程倒逼出应用程序的逻辑拆分是不合实际的。通常,应用程序都是围绕【任务执行】来构造的。任务是抽象的、离散的工作单元。通过把应用程序的工作拆分到多个任务中,可以简化程序的组织结构,并在可能的情况下提升应用程序的性能。

Java 为任务执行抽象出 Executor 接口,其定义如下。

public interface Executor {

Categories
程式開發

聘用迪士尼高管,字节跳动“海外安全”屏障增加?

原迪士尼高管入职

抖音(海外版名为TikTok)可能是”出海”战略最成功的中国本土科技企业之一。

过去几年来,TikTok成功打开了以欧美为首的全球短视频社交网络市场,在几十个国家的应用商店长期盘踞前几名的位置。据SensorTower数据,TikTok在美国地区的累积下载量达到了1.23亿次,印度地区更是接近5亿次之多。TikTok的全球活跃用户数已超过8亿,超过了Twitter、领英、Pinterest和SnapChat等老牌社交平台。

TikTok如此骄人的成绩吸引了美国互联网文化的关注。在美国,成千上万的”Z世代”用户沉迷TikTok无法自拔,甚至成年用户数量也在一路飞涨。Facebook这样的社交网络绝对霸主也意识到了TikTok带来的威胁,开始制定应对策略。

几天前,TikTok迈出了迄今为止公司全球化发展道路上最大胆的一步:招聘原迪士尼公司的最高执行官凯文·梅耶,担任公司新一任的首席执行官。据悉,梅耶将在6月1日上任。

对于像Jacob Pace这样的TikTok网红来说,这一消息无疑是激动人心的。Pace运营着近2500万粉丝的账号“flighthouse“,被人称为”21世纪MTV”的典型代表。行业分析师告诉Pace,新任CEO梅耶将带领TikTok掀起新的内容创作高潮,并可能凭借他在迪士尼积累的长年收购经验,向flighthouse这样的头部流量大户伸出橄榄枝。

聘用迪士尼高管,字节跳动“海外安全”屏障增加? 5

正如其他著名社交网络企业(Facebook、Twitter、Instagram等)的发展轨迹揭示的那样,我们可以预见抖音将进一步颠覆,乃至从根本上重塑飞速进化的媒体业务。

据SensorTower数据,今年第一季度,TikTok在苹果和Android手机上的下载量为3.15亿次,是有史以来应用安装次数最多的季度。随着全世界因疫情爆发而陷入停滞状态,TikTok的使用量也在激增。令竞争对手更加坐立难安的是,40%的TikTok用户年龄在16至24岁之间,并且平均每天花费在该应用上的时间将近一个小时。

梅耶的三大职责

Categories
程式開發

Fish-Lottie:纯Dart如何实现一个高性能动画框架?

背景

Lottie是一个由Airbnb开源的横跨Android,iOS,Web等多端的一个动画方案,它以JSON的方式解决了开发者对复杂动画实现的开发成本问题。

Fish-Lottie:纯Dart如何实现一个高性能动画框架? 7

众所周知,闲鱼团队是比较早在客户端侧选择Flutter方案的技术团队,当前的闲鱼工程里也包含很多的Flutter界面。 而官方却一直没有提供Lottie-Flutter方案,当前也有一些第三方开发者提供了相关实现方案,基本上分为两种:

  • 在Native端进行数据解析和渲染,再使用桥接的方式把渲染数据传输到Flutter端进行显示。
  • 在Flutter直接进行数据解析和使用Flutter绘图能力进行渲染显示。

不过当前已经开源的方案都存在一些问题,前者会在性能和显示存在一些问题,例如显示闪烁白屏。后者在一些能力支持上存在一些功能缺陷,例如不支持文本动画等。所以这一直是闲鱼团队乃至整个Flutter开发者团体的一个痛点。

项目架构

闲鱼团队在调研了官方开源的lottie-android库之后,发现不管是数据解析能力,还是图形绘制能力。Flutter都提供了媲美Android的实现方案。所以参考lottie-android库实现了一个功能完备,性能优异的纯Dart Package来提供Flutter上的Lottie动画支持。…

Categories
程式開發

基于Ceph对象存储构建实践

一、存储发展

数据存储是人类永恒的话题和不断探索的主题

  • 绳结记事

    原始社会,文字未发明之前 ,人们所使用的一种记事方法,在绳子上打结记事。

  • 穿孔卡

    穿孔卡片是始于20世纪的主要存储方法,也是最早的机械化信息存储形式,进入20世纪60年代后,逐渐被其他存储手段取代。目前穿孔卡片已经极少使用,除非用于读出当年存储的历史数据。

  • 磁鼓存储器

    20世纪50年代,磁鼓作为内存储器应用于IBM 650。在后续的IBM

Categories
程式開發

在 Go 中使用并发编程 – 第一部分

如果我必须选择 Go 的一个伟大特性,那么它必须是内置的并发模型。Go 不仅支持并发性,而且使其更好,更易于使用。Go 并发模型 (goroutine) 对并发编程的作用,就类似于 docker 之于虚拟化的作用。

什么是并发

Categories
程式開發

全栈工程师为什么越混越困难,看这篇就够了

最近跟朋友聊天,经常聊到全栈工程师,我就问他们为什么要成为全栈工程师?技术派的回答:“全栈工程师,前后端技术都会,感觉很牛!”,职业派的回答:“全栈工程师很多公司都需要,不担心工作找不到,工资也比普通的工程师高。”,跟风派的回答:“我好多朋友都想当全栈工程师,都说全栈工程师很好。” 有时候,我就贱贱的问他好在哪里?他当场傻了,回答不上来。

各位小伙伴能看这篇文章,相信要么是全栈工程师,要么对全栈工程师有兴趣,这个问题也问下你:“全栈工程师,好在哪里?”你可以花几秒钟想一下,这样你从这篇文章中收获的价值会更高。

1. 什么是全栈工程师

全栈工程师为什么越混越困难,看这篇就够了 31

百度百科上对全栈工程师的定义:

全栈工程师是指掌握多种技能,胜任前端与后端,能利用多种技能独立完成产品的人。

这个定义是正确的吗?请你花几秒种想一下,这个非常重要!

这个定义是错误的!

这个定义是错误的!…

Categories
程式開發

云原生数据网关:Kubernetes时代面临的挑战与对策

本文要点:

  • 应用架构的演化已经将前端和后端进行了分离,而且进一步将后端分解成了独立的微服务。
  • 现代的分布式架构带来了对API网关的需求,并且帮助普及了API管理和服务网格技术。
  • 微服务给了我们根据服务需求使用最合适的数据库类型的自由。这种持久层多样化的现象引发了在数据层引入类似API网关功能的需求。
  • 数据网关的行为类似于API网关,但是只关注数据方面。数据网关提供了抽象、安全性、可扩展性、联邦以及契约驱动开发的特性。
  • 有很多类型的数据网关,从传统的数据虚拟化技术,到轻量级的GraphQL转换器、云托管的服务、连接池以及全开源的替代方案。

如今,围绕12要素(12-factor)应用程序、微服务以及微服网格有很多令人兴奋的事情,但是在云原生数据方面,这样的事情却不太多。关于云原生数据访问的会议演讲、博客文章、最佳实践以及专门构建的工具都比较少。出现这种现象的一个主要原因在于,大多数数据访问技术都是在一个偏爱静态环境的栈中架构和创建的,而不是具有动态特性的云原生和Kubernetes环境。

在本文中,我们将会探索不同类型的数据网关,从更加单体化的方案到专门为云和Kubernetes设计的方案。我们将会看到微服务架构所引入的挑战是什么,数据网关如何补充完善API网关,从而解决这些Kubernetes时代所面临的挑战。

应用架构的演化

我们首先看一下,在过去的十多年间管理代码和数据的方式发生了什么变化。我依然记得我刚刚开始职业生涯的时候,我们使用Servlet、JSP和JSF创建前端。在后端,EJB、SOAP、服务器端会话管理是当时最先进的技术。但是随着REST的引入和Javascript的普及,事情发生了很大的变化。REST通过统一的接口和面向资源的请求帮助我们解耦前端和后端。它通过将所有客户端会话状态转移至客户端,普及了无状态服务并使响应缓存成为可能。这种新的架构为现代业务的大规模可伸缩性需求提供了解决方案。…