The whole structure in three sentences
Burton Bloom described this in "Space/Time Trade-offs in Hash Coding with Allowable Errors", Communications of the ACM, volume 13, issue 7, 1970, pages 422 to 426. The structure has not needed changing since.
Allocate a bit array of m bits, all zero, and choose k independent hash functions, each mapping an item to a position in the array.
To add an item, hash it k times and set all k bits. To query an item, hash it k times and check whether all k bits are set. If any bit is zero, the item was definitely never added. If all k are set, it probably was.
That is the entire structure. No items are stored, no buckets, no chaining, no resizing. The array holds nothing but evidence that some items landed on some positions.
Both operations are k hash computations and k bit accesses, independent of how many items are in the filter. There is no degradation as it fills, only a rising error rate.

