我们看到谷歌,Firefox,一些AJAX页面显示可能的项目列表,而用户键入字符.
有人能给出一个好的算法,数据结构来实现自动完成吗?
我正在尝试在我正在建立的网站上实施Google建议的内容,并且很好奇如何在非常大的数据集上进行操作.当然,如果您有1000个项目,则缓存项目并循环浏览它们.但是当你有一百万件商品时,你怎么做呢?此外,假设项目不是一个单词.具体来说,我对Pandora.com印象非常深刻.例如,如果您搜索"湿",它会带回"湿沙",但它也会带回Toad The Wet Sprocket.他们的自动完成功能很快.我的第一个想法是按前两个字母对项目进行分组,所以你会有类似的东西:
Dictionary<string,List<string>>
Run Code Online (Sandbox Code Playgroud)
其中键是前两个字母.那没关系,但是如果我想做类似Pandora的事情并允许用户看到与字符串中间匹配的结果呢?根据我的想法:Wet永远不会匹配Toad the Wet Sprocket,因为它将在"TO"桶而不是"WE"桶中.那么也许你可以把弦分开,"Toad the Wet Sprocket"进入"TO","WE"和"SP"桶(去掉"THE"这个词),但当你谈到一百万可能不得不说几句话的条目,似乎你很快就开始耗费大量的记忆.好的,这是一个很长的问题.思考?
祝你圣诞快乐.
我的Angular 4应用程序不会等待.
我希望在我调用API之前放慢速度.
但我只是继续撞墙.
我在我的代码中使用了HttpInterceptor.
但是这些Observable只会爆炸.
不要太鄙视.
下面你会发现我的尝试.
export class ApiUrlInterceptor implements HttpInterceptor {
constructor(private http: Http) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return Observable.create(observer => {
setTimeout(() => {
observer.next(true); //Not sure why I do this
const start = Date.now();
console.log(`Request for ${req.url}`);
return next.handle(req).do(event => {
if (event.type == HttpEventType.Response) {
const elapsed = Date.now() - start;
console.log(`Request for ${req.urlWithParams} took ${elapsed} ms.`);
}
});
}, 1000);
});
}
}
Run Code Online (Sandbox Code Playgroud)
结果是调用了API.
但没有安装调用者的结果
我的Observable似乎陷入困境.
我运气不好
我很清楚这是Angular中的反模式"不要等待随机数",而是构建你的应用程序,这样你就不需要了.我的实际用例是, …
wait rxjs angular-http-interceptors angular angular-httpclient
我正在研究LRU缓存实现的这个问题,其中在缓存大小已满之后,弹出最近最少使用的项目并将其替换为新项目.
我有两个实现:
1).创建两个看起来像这样的地图
std::map<timestamp, k> time_to_key
std::map<key, std::pair<timestamp, V>> LRUCache
Run Code Online (Sandbox Code Playgroud)
要插入新元素,我们可以将当前时间戳和值放在LRUCache中.当缓存的大小已满时,我们可以通过查找time _to_ key中存在的最小时间戳并从LRUCache中删除相应的键来逐出最近的元素.插入一个新项是O(1),更新时间戳是O(n)(因为我们需要在时间 _to_ 键中搜索对应于时间戳的k.
2).有一个链表,其中最近最少使用的缓存出现在头部,新项目在尾部添加.当项目到达时已经存在于高速缓存中,与该项目的键对应的节点被移动到列表的尾部.插入一个新项是O(1),更新时间戳再次是O(n)(因为我们需要移动到列表的尾部),删除一个元素是O(1).
现在我有以下问题:
对于LRUCache,这些实现中哪一个更好.
有没有其他方法来实现LRU Cache.
在Java中,我应该使用HashMap来实现LRUCache
我已经看到了诸如实现通用LRU缓存之类的问题,并且还遇到了诸如实现LRU缓存之类的问题.通用LRU缓存是否与LRU缓存不同?
提前致谢!!!
编辑:
在Java中实现LRUCache的另一种方法(最简单的方法)是使用LinkedHashMap并重写boolean removeEldestEntry(Map.entry eldest)函数.
我在反序列化包含0到多个子对象的对象时遇到了一些麻烦,这些对象可以包含字符串或特定值的字符串数组.
这是一个JSON示例
{
"name": "process name",
"tasks": [{
"name": "task 1",
"fields": [{
"name": "field 1",
"value": "123abc"
},
{
"name": "field 2",
"value": ["value 1", "value 2"]
}
]
},
{
"name": "task 2",
"fields": []
}]
}
Run Code Online (Sandbox Code Playgroud)
我有一个Java实体设置来匹配这个结构,如下所示:
public class Process {
public Process() {}
public String name;
public Task[] tasks;
}
public class Task {
public Task() {}
public String name;
public Field[] fields;
}
public class Field {
public Field() field;
public String name;
public String …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用这样的映射结构更新集合:
List<Passenger> updatePassengers(@MappingTarget List<Passenger> passengers, List<Passenger> sourcePassenger);
Passenger updatePassenger(@MappingTarget Passenger passenger, Passenger sourcePassenger);
Run Code Online (Sandbox Code Playgroud)
现在在生成的源中 updatePassenger 方法生成如下:
public List<Passenger> updatePassengers(List<Passenger> passengers, List<Passenger> sourcePassenger) {
if ( sourcePassenger == null ) {
return null;
}
passengers.clear();
for ( Passenger passenger : sourcePassenger ) {
passengers.add( passenger );
}
return passengers;
}
Run Code Online (Sandbox Code Playgroud)
这里是将乘客从目的地移走,并将乘客从源地设置。我想更新个别乘客对象。
我浏览了 mapstruct 文档,它说它在更新之前清除集合。
有没有一种方法可以为每个乘客调用 updatePassenger 方法?
我将Axios与NodeJs结合使用,并尝试在axios.get()方法中传递路径参数。例如,如果URL是url = '/fetch/{date}',我想{date}在调用时用实际日期替换axios.get(url)。
我遍历了Github和StackOverflow上的源代码,但是找不到任何方法。
是否可以保留带有参数的URL作为占位符并在实际调用Axios的get方法时替换它们?
我有一个这样的请求
{
"varA" : "A",
"varB" : "TCFNhbiBKb3NlMRgwFgYDVQQK"
}
Run Code Online (Sandbox Code Playgroud)
其中 keyvarB是一个 base64 编码的 JSON 字符串。像这样的东西:
{
"nestedVarB1": "some value here",
"nestedVarB2" : "some other value here"
}
Run Code Online (Sandbox Code Playgroud)
我想将它转换成一些 POJO,如下所示:
@Data
public class MyRequest {
private String varA;
private B varB;
}
@Data
public class B {
private String nestedVarB1;
private String nestedVarB2;
}
Run Code Online (Sandbox Code Playgroud)
我经历了几个关于堆栈溢出的解决方案,例如this和thisMyRequest ,但我想通过编写某种 Jackson 反序列化器将 JSON 直接转换为类型的对象。
如何直接将 JSON 转换为MyRequest使用 Jackson 和 Spring Boot?
笔记:
MyRequest和B非常大, …我需要你的帮助.我对C有一个平均的知识,这就是问题所在.我将使用一些基准来测试新处理器上的一些计算机体系结构(分支未命中,缓存未命中).关于它的事情是基准测试在C中,但我不能包含任何库调用.例如,我不能使用malloc因为我收到了错误
"undefined reference to malloc"
Run Code Online (Sandbox Code Playgroud)
即使我已经包括了图书馆.所以我必须编写自己的malloc.我不希望它超级高效 - 只需要做基础知识.正如我在想的那样,我必须在内存中有一个地址,并且每当malloc发生时,我都会返回一个指向该地址的指针并按该大小递增计数器.Malloc在我的程序中发生了两次,所以我甚至不需要大内存.
你能帮帮我吗?我设计了一个Verilog并且在C中没有那么多经验.
我见过以前的答案但对我来说似乎都太复杂了.此外,我无法访问KR书.
干杯!
编辑:也许这可以帮助你更多:我不是使用gcc而是使用sde-gcc编译器.它有什么不同吗?也许这就是为什么我得到一个未定义的malloc引用?
EDIT2:我正在测试MIPS架构:
我包括:
#include <stdlib.h>
Run Code Online (Sandbox Code Playgroud)
而错误是:
undefined reference to malloc
relocation truncated to fit: R_MIPS_26 against malloc
Run Code Online (Sandbox Code Playgroud)
和编译器命令id:
test.o: test.c cap.h
sde-gcc -c -o test.s test.c -EB -march=mips64 -mabi=64 -G -O -ggdb -O2 -S
sde-as -o test.o test.s EB -march=mips64 -mabi=64 -G -O -ggdb
as_objects:=test.o init.o
Run Code Online (Sandbox Code Playgroud)
编辑3:好的,我使用上面的实现,它运行没有任何问题.问题是,在进行嵌入式编程时,您只需定义所使用的所有内容,因此我定义了自己的malloc.sde-gcc无法识别malloc函数.
java ×4
autocomplete ×2
c ×2
c++ ×2
json ×2
algorithm ×1
angular ×1
axios ×1
caching ×1
collections ×1
gson ×1
jackson ×1
java-8 ×1
malloc ×1
mapstruct ×1
node.js ×1
optimization ×1
rxjs ×1
search ×1
spring-boot ×1
spring-mvc ×1
wait ×1