首页 文章 精选 留言 我的

精选列表

搜索[语聊社交],共5964篇文章
优秀的个人博客,低调大师

社交关系查询还用单独建图库?关系型数据库原生图查询实测

关系型数据库开始原生支持查图了。今年6月,PostgreSQL 19 Beta1实现了SQL/PGQ标准。图查询能力被写进了SQL标准,数据库内核开始原生支持。不只是PG,国产数据库也在走这条路。KingbaseES V9已经内置了原生图存储引擎,支持属性图模型和Cypher风格图查询,图遍历性能达到行业平均水平的3倍。关系型数据库的图能力,正在从‘能不能’变成‘好不好’。

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

Manus 清空国内社交平台账号内容,前员工透露“不会继续推进”中文版

网友发现,通用AI智能体公司“Manus”的官方微博和小红书账号的内容今日均已清空。 与此同时,打开Manus的官网发现,其官网首页显示“Manus在你所在的地区不可用”,而此前为“Manus中文版本正在开发中”。 Manus近期因大规模裁员的传闻而再度引发外界关注。据澎湃新闻7月8日报道,Manus方面对此回应记者表示:“基于公司自身经营效率考量,我们决定对部分业务团队进行调整。公司将继续专注核心业务发展,提升整体运营效率。” 另据蓝鲸新闻7月10日报道,Manus将与阿里通义千问合作开发中文版一事,Manus一员工称“不会继续推进”。

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

美国宇航局局长社交账户被希腊陆军集团黑客入侵

军集团黑客入侵语音播报缩小字体放大字体微博微信分享0据悉,美国宇航局局长兼航空运输系统高级技术专家 Parimal Kopardekar先生 ( @nasapk )的 Twitter 帐户被强大的希腊集团军黑了。 在该组织征求意见后,一位发言人告知,他们针对美国宇航局局长是为了好玩,这次袭击不是出于政治动机。他们选择 Kopardekar 是因为他们正在寻找在 NASA 工作的人。 至于他们是如何入侵帐户的,他们声称有一个漏洞可以让他们接管 Twitter 帐户,但至今无法验证它。 该组织告诉说,他们进行黑客攻击是为了好玩,以证明“没有人在网上是安全的”。 2020 年 4 月,强大的希腊陆军集团破坏了希腊议会副议长和KINAL议员Odysseas Konstantinopoulosening 的 Twitter 帐户。 “政府我们已经警告过你。不要再对自己的人撒谎”,其中一条消息是被盗账户发布的,而在他发布的另一条消息中,他说:“澄清一些事情,我们对这个没有问题,与我们有大问题的是政府及其行动。” 该组织的受害者名单很长,包括尼日利亚外交部和财政部、尼日利亚银行、北马其顿国家银行和阿塞拜疆国防部。 鸿蒙官方战略合作共建――HarmonyOS技术社区 【责任编辑:赵宁宁 TEL:(010)68476606】

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

音频社交有风险,Clubhouse聊天室内容泄露被上传至三方平台

2月初,音频聊天软件Clubhouse被Elon Musk一条推特带火,注册邀请码一时重金难求。还不到一个月,一盆冷水就泼向了这款骤火的软件,Clubhouse被指存在音频数据泄露。 据彭博社2月21日报道,Clubhouse发言人Reema Bahnasy证实,一位身份不明的用户从“多个聊天室”将音频录音并传输到自己的第三方网站中。 上周末,多位网络专家观测到,Clubhouse的音频和元数据转移到了另一个第三方站点。 澳大利亚网络安全公司Internet2.0首席执行官Robert Potter介绍,“一位用户设置了一条通道,能远程与世界其他地方共享其登陆信息。然而问题是,平台上聊天的人以为他们的对话是私密进行的。” 对于Clubhouse的音频数据安全问题,早在2月13日,斯坦福互联网观察实验室(Stanford Internet Observatory,SIO)就曾公开提出。该机构指出,使用这款只有受邀才能使用的iOS应用程序的用户,应该假定所有对话都会被录音。 Facebook 公司前安全主管、SIO 现任主管Alex Stamos表示,“Clubhouse 不能为发生在世界各地的任何一场谈话提供任何隐私承诺。”他表示,音频盗窃者利用打造Clubhouse应用的JavaScript工具包构建了自己的系统,成功从该平台抽取了数据。 斯坦福互联网观察实验室表示,他们无法确定攻击者的来源和身份。 Clubhouse回应称公司已经“永久封禁”该用户,并安装了新的“保障措施”以阻止类似事件发生。 据SIO研究人员分析,Clubhouse采取的“保障措施”可能包括:防止使用第三方应用程序访问音频聊天室、限制用户可以同时进入的聊天室数量,但这些举措并不能从根本上解决用户隐私数据泄露问题。 Alex Stamos和他的团队还证实,Clubhouse的底层语音技术服务商声网(Agora)是一家总部位于上海的初创公司。Clubhouse主要负责用户体验部分,例如添加新朋友和寻找聊天室;平台的数据流量处理和音频制作服务则依赖于声网。Alex Stamos认为,Clubhouse对声网的依赖引发了广泛的隐私担忧。 声网则对此表示,公司不能对Clubhouse的安全或隐私协议发表评论,不会为任何客户“存储或共享个人身份信息。” 根据Crunchbase信息,Clubhouse刚刚获得1亿美元融资,市场估值达10亿美元。目前,平台还没有正式开放对外注册,只上线了iOS版App,并且只有老用户提供邀请码才能注册使用。

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

java版spring cloud+spring boot 社交电子商务平台-Ribbon设计原理

一. Spring集成下的Ribbon工作结构 先贴一张总览图,说明一下Spring如何集成Ribbon的,如下所示: Spring Cloud集成模式下的Ribbon有以下几个特征: 1.Ribbon 服务配置方式 每一个服务配置都有一个Spring ApplicationContext上下文,用于加载各自服务的实例。 和Feign的集成模式 在使用Feign作为客户端时,最终请求会转发成 http://<服务名称>/的格式,通过LoadBalancerFeignClient, 提取出服务标识<服务名称>,然后根据服务名称在上下文中查找对应服务的负载均衡器FeignLoadBalancer,负载均衡器负责根据既有的服务实例的统计信息,挑选出最合适的服务实例。 二、Spring Cloud模式下和Feign的集成实现方式 和Feign结合的场景下,Feign的调用会被包装成调用请求LoadBalancerCommand,然后底层通过Rxjava基于事件的编码风格,发送请求;Spring Cloud框架通过 Feigin 请求的URL,提取出服务名称,然后在上下文中找到对应服务的的负载均衡器实现FeignLoadBalancer,然后通过负载均衡器中挑选一个合适的Server实例,然后将调用请求转发到该Server实例上,完成调用,在此过程中,记录对应Server实例的调用统计信息。 /** * Create an {@link Observable} that once subscribed execute network call asynchronously with a server chosen by load balancer. * If there are any errors that are indicated as retriable by the {@link RetryHandler}, they will be consumed internally by the * function and will not be observed by the {@link Observer} subscribed to the returned {@link Observable}. If number of retries has * exceeds the maximal allowed, a final error will be emitted by the returned {@link Observable}. Otherwise, the first successful * result during execution and retries will be emitted. */ public Observable<T> submit(final ServerOperation<T> operation) { final ExecutionInfoContext context = new ExecutionInfoContext(); if (listenerInvoker != null) { try { listenerInvoker.onExecutionStart(); } catch (AbortExecutionException e) { return Observable.error(e); } } // 同一Server最大尝试次数 final int maxRetrysSame = retryHandler.getMaxRetriesOnSameServer(); //下一Server最大尝试次数 final int maxRetrysNext = retryHandler.getMaxRetriesOnNextServer(); // Use the load balancer // 使用负载均衡器,挑选出合适的Server,然后执行Server请求,将请求的数据和行为整合到ServerStats中 Observable<T> o = (server == null ? selectServer() : Observable.just(server)) .concatMap(new Func1<Server, Observable<T>>() { @Override // Called for each server being selected public Observable<T> call(Server server) { // 获取Server的统计值 context.setServer(server); final ServerStats stats = loadBalancerContext.getServerStats(server); // Called for each attempt and retry 服务调用 Observable<T> o = Observable .just(server) .concatMap(new Func1<Server, Observable<T>>() { @Override public Observable<T> call(final Server server) { context.incAttemptCount();//重试计数 loadBalancerContext.noteOpenConnection(stats);//链接统计 if (listenerInvoker != null) { try { listenerInvoker.onStartWithServer(context.toExecutionInfo()); } catch (AbortExecutionException e) { return Observable.error(e); } } //执行监控器,记录执行时间 final Stopwatch tracer = loadBalancerContext.getExecuteTracer().start(); //找到合适的server后,开始执行请求 //底层调用有结果后,做消息处理 return operation.call(server).doOnEach(new Observer<T>() { private T entity; @Override public void onCompleted() { recordStats(tracer, stats, entity, null); // 记录统计信息 } @Override public void onError(Throwable e) { recordStats(tracer, stats, null, e);//记录异常信息 logger.debug("Got error {} when executed on server {}", e, server); if (listenerInvoker != null) { listenerInvoker.onExceptionWithServer(e, context.toExecutionInfo()); } } @Override public void onNext(T entity) { this.entity = entity;//返回结果值 if (listenerInvoker != null) { listenerInvoker.onExecutionSuccess(entity, context.toExecutionInfo()); } } private void recordStats(Stopwatch tracer, ServerStats stats, Object entity, Throwable exception) { tracer.stop();//结束计时 //标记请求结束,更新统计信息 loadBalancerContext.noteRequestCompletion(stats, entity, exception, tracer.getDuration(TimeUnit.MILLISECONDS), retryHandler); } }); } }); //如果失败,根据重试策略触发重试逻辑 // 使用observable 做重试逻辑,根据predicate 做逻辑判断,这里做 if (maxRetrysSame > 0) o = o.retry(retryPolicy(maxRetrysSame, true)); return o; } }); // next请求处理,基于重试器操作 if (maxRetrysNext > 0 && server == null) o = o.retry(retryPolicy(maxRetrysNext, false)); return o.onErrorResumeNext(new Func1<Throwable, Observable<T>>() { @Override public Observable<T> call(Throwable e) { if (context.getAttemptCount() > 0) { if (maxRetrysNext > 0 && context.getServerAttemptCount() == (maxRetrysNext + 1)) { e = new ClientException(ClientException.ErrorType.NUMBEROF_RETRIES_NEXTSERVER_EXCEEDED, "Number of retries on next server exceeded max " + maxRetrysNext + " retries, while making a call for: " + context.getServer(), e); } else if (maxRetrysSame > 0 && context.getAttemptCount() == (maxRetrysSame + 1)) { e = new ClientException(ClientException.ErrorType.NUMBEROF_RETRIES_EXEEDED, "Number of retries exceeded max " + maxRetrysSame + " retries, while making a call for: " + context.getServer(), e); } } if (listenerInvoker != null) { listenerInvoker.onExecutionFailed(e, context.toFinalExecutionInfo()); } return Observable.error(e); } }); } 从一组ServerList 列表中挑选合适的Server /** * Compute the final URI from a partial URI in the request. The following steps are performed: * <ul> * <li> 如果host尚未指定,则从负载均衡器中选定 host/port * <li> 如果host 尚未指定并且尚未找到负载均衡器,则尝试从 虚拟地址中确定host/port * <li> 如果指定了HOST,并且URI的授权部分通过虚拟地址设置,并且存在负载均衡器,则通过负载就均衡器中确定host/port(指定的HOST将会被忽略) * <li> 如果host已指定,但是尚未指定负载均衡器和虚拟地址配置,则使用真实地址作为host * <li> if host is missing but none of the above applies, throws ClientException * </ul> * * @param original Original URI passed from caller */ public Server getServerFromLoadBalancer(@Nullable URI original, @Nullable Object loadBalancerKey) throws ClientException { String host = null; int port = -1; if (original != null) { host = original.getHost(); } if (original != null) { Pair<String, Integer> schemeAndPort = deriveSchemeAndPortFromPartialUri(original); port = schemeAndPort.second(); } // Various Supported Cases // The loadbalancer to use and the instances it has is based on how it was registered // In each of these cases, the client might come in using Full Url or Partial URL ILoadBalancer lb = getLoadBalancer(); if (host == null) { // 提供部分URI,缺少HOST情况下 // well we have to just get the right instances from lb - or we fall back if (lb != null){ Server svc = lb.chooseServer(loadBalancerKey);// 使用负载均衡器选择Server if (svc == null){ throw new ClientException(ClientException.ErrorType.GENERAL, "Load balancer does not have available server for client: " + clientName); } //通过负载均衡器选择的结果中选择host host = svc.getHost(); if (host == null){ throw new ClientException(ClientException.ErrorType.GENERAL, "Invalid Server for :" + svc); } logger.debug("{} using LB returned Server: {} for request {}", new Object[]{clientName, svc, original}); return svc; } else { // No Full URL - and we dont have a LoadBalancer registered to // obtain a server // if we have a vipAddress that came with the registration, we // can use that else we // bail out // 通过虚拟地址配置解析出host配置返回 if (vipAddresses != null && vipAddresses.contains(",")) { throw new ClientException( ClientException.ErrorType.GENERAL, "Method is invoked for client " + clientName + " with partial URI of (" + original + ") with no load balancer configured." + " Also, there are multiple vipAddresses and hence no vip address can be chosen" + " to complete this partial uri"); } else if (vipAddresses != null) { try { Pair<String,Integer> hostAndPort = deriveHostAndPortFromVipAddress(vipAddresses); host = hostAndPort.first(); port = hostAndPort.second(); } catch (URISyntaxException e) { throw new ClientException( ClientException.ErrorType.GENERAL, "Method is invoked for client " + clientName + " with partial URI of (" + original + ") with no load balancer configured. " + " Also, the configured/registered vipAddress is unparseable (to determine host and port)"); } } else { throw new ClientException( ClientException.ErrorType.GENERAL, this.clientName + " has no LoadBalancer registered and passed in a partial URL request (with no host:port)." + " Also has no vipAddress registered"); } } } else { // Full URL Case URL中指定了全地址,可能是虚拟地址或者是hostAndPort // This could either be a vipAddress or a hostAndPort or a real DNS // if vipAddress or hostAndPort, we just have to consult the loadbalancer // but if it does not return a server, we should just proceed anyways // and assume its a DNS // For restClients registered using a vipAddress AND executing a request // by passing in the full URL (including host and port), we should only // consult lb IFF the URL passed is registered as vipAddress in Discovery boolean shouldInterpretAsVip = false; if (lb != null) { shouldInterpretAsVip = isVipRecognized(original.getAuthority()); } if (shouldInterpretAsVip) { Server svc = lb.chooseServer(loadBalancerKey); if (svc != null){ host = svc.getHost(); if (host == null){ throw new ClientException(ClientException.ErrorType.GENERAL, "Invalid Server for :" + svc); } logger.debug("using LB returned Server: {} for request: {}", svc, original); return svc; } else { // just fall back as real DNS logger.debug("{}:{} assumed to be a valid VIP address or exists in the DNS", host, port); } } else { // consult LB to obtain vipAddress backed instance given full URL //Full URL execute request - where url!=vipAddress logger.debug("Using full URL passed in by caller (not using load balancer): {}", original); } } // end of creating final URL if (host == null){ throw new ClientException(ClientException.ErrorType.GENERAL,"Request contains no HOST to talk to"); } // just verify that at this point we have a full URL return new Server(host, port); }

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

java spring cloud 版b2b2c社交电商-熔断器Hystrix

说起springcloud熔断让我想起了去年股市中的熔断,多次痛的领悟,随意实施的熔断对整个系统的影响是灾难性的,好了接下来我们还是说正事。 熔断器 雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。 如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。 熔断器(CircuitBreaker) 熔断器的原理很简单,如同电力过载保护器。它可以实现快速失败,如果它在一段时间内侦测到许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序不断地尝试执行可能会失败的操作,使得应用程序继续执行而不用等待修正错误,或者浪费CPU时间去等到长时间的超时产生。熔断器也可以使应用程序能够诊断错误是否已经修正,如果已经修正,应用程序会再次尝试调用操作。 熔断器模式就像是那些容易导致错误的操作的一种代理。这种代理能够记录最近调用发生错误的次数,然后决定使用允许操作继续,或者立即返回错误。 熔断器开关相互转换的逻辑如下图: 熔断器就是保护服务高可用的最后一道防线。 Hystrix特性 1.断路器机制 断路器很好理解, 当Hystrix Command请求后端服务失败数量超过一定比例(默认50%), 断路器会切换到开路状态(Open). 这时所有请求会直接失败而不会发送到后端服务. 断路器保持在开路状态一段时间后(默认5秒), 自动切换到半开路状态(HALF-OPEN). 这时会判断下一次请求的返回情况, 如果请求成功, 断路器切回闭路状态(CLOSED), 否则重新切换到开路状态(OPEN). Hystrix的断路器就像我们家庭电路中的保险丝, 一旦后端服务不可用, 断路器会直接切断请求链, 避免发送大量无效请求影响系统吞吐量, 并且断路器有自我检测并恢复的能力. 2.Fallback Fallback相当于是降级操作. 对于查询操作, 我们可以实现一个fallback方法, 当请求后端服务出现异常的时候, 可以使用fallback方法返回的值. fallback方法的返回值一般是设置的默认值或者来自缓存. 3.资源隔离 在Hystrix中, 主要通过线程池来实现资源隔离. 通常在使用的时候我们会根据调用的远程服务划分出多个线程池. 例如调用产品服务的Command放入A线程池, 调用账户服务的Command放入B线程池. 这样做的主要优点是运行环境被隔离开了. 这样就算调用服务的代码存在bug或者由于其他原因导致自己所在线程池被耗尽时, 不会对系统的其他服务造成影响. 但是带来的代价就是维护多个线程池会对系统带来额外的性能开销. 如果是对性能有严格要求而且确信自己调用服务的客户端代码不会出问题的话, 可以使用Hystrix的信号模式(Semaphores)来隔离资源.

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

umeng社交分享最新版5.0的跨进程使用崩溃的问题及解法-Android

先简单介绍下5.0版的变化。5.0最大的特色是调用简单,采用了链式语法,形如: new ShareAction(context).setPlatform(share_media) .withText(content).withTitle(title) .withMedia(icon) .withTargetUrl(url) .share(); 其次,API更加灵活,支持分享按钮的点击回调; 最后,采用了最新的sdk(新浪微博原生体验更好、支持易信)。 但是有一个很大的问题,那就是当分享代码不在默认的进程(以下称main进程)里时,回调会报空指针异常。 比如在AndroidManifest.xml新开了一个进程用来打开h5页面,点了微信分享,然后点取消,从微信返回APP的时候就报空指针异常崩溃了(别和我说你不知道新开进程的好处和意义,看我微信朋友圈1月4日分享的《微信客户端架构演进之路》吧)。AndroidManifest.xml的配置如下,关键是红色代码部分新开了一个叫tools的进程: <activity android:name=".ACWebview" android:process=":tools" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="makai" /> </intent-filter> </activity> 崩溃日志如下: java.lang.RuntimeException:Unable to start activity ComponentInfo{com.xxx/com.xxx.wxapi.WXEntryActivity}: java.lang.NullPointerException android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2189) ...... cause by: java.lang.NullPointerException: com.umeng.socialize.handler.UMWXHandler.onShareCallback(UMWXHandler.java:462) com.umeng.socialize.handler.UMWXHandler$5.onResp(UMWXHandler.java:487) com.umeng.socialize.weixin.view.WXCallbackActivity.onResp(WXCallbackActivity.java:52) com.tencent.mm.sdk.openapi.WXApiImplV10.handleIntent(Unknown Source) com.umeng.socialize.weixin.view.WXCallbackActivity.onCreate(WXCallbackActivity.java:30) android.app.Activity.performCreate(Activity.java:5251) android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153) android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2238) android.app.ActivityThread.access$800(ActivityThread.java:138) android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201) android.os.Handler.dispatchMessage(Handler.java:102) android.os.Looper.loop(Looper.java:136) android.app.ActivityThread.main(ActivityThread.java:5016) java.lang.reflect.Method.invokeNative(Native Method) java.lang.reflect.Method.invoke(Method.java:515) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) dalvik.system.NativeStart.main(Native Method) 根据上面的日志,空指针异常的原因是UMWXHandler.java的回调umShareListener为null(如下图,至于为什么是null,因为sdk不是我们写的,无法从sdk层面去解决故没有去深究,但我们要从应用层面去解决问题): 进一步分析日志,发现入口是 com.umeng.socialize.weixin.view.WXCallbackActivity.onCreate(WXCallbackActivity.java:30) 想起我们工程里有一个叫WXEntryActivity.java的继承了它,既然是onCreate报的异常,那可以try catch捕捉这个异常以防止崩溃。说干就干,代码如下: import android.os.Bundle; import com.umeng.socialize.weixin.view.WXCallbackActivity; public class WXEntryActivity extends WXCallbackActivity { @Override protected void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); }catch (Exception e){ finish(); } } } 由此跨进程调用分享取消时崩溃的问题解决了。 同理微博的那个WBShareActivity.java也类似处理了吧。 本文转自Kai的世界,道法自然博客园博客,原文链接:http://www.cnblogs.com/kaima/p/5135100.html,如需转载请自行联系原作者。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册