bilinear form
Think of a machine with two input slots. Feed it a vector in each slot and it returns a scalar. The defining feature is that if you freeze one slot, the machine behaves like an ordinary linear map in the other: doubling that input doubles the output, and a sum of inputs gives a sum of outputs. Because this holds separately in each slot — hence ‘bi’-linear — the form is the natural two-argument analogue of a linear functional.
Precisely, given a vector space V over a field K, a bilinear form is a map B from V × V to K such that for each fixed second argument the map u ↦ B(u, v) is K-linear, and for each fixed first argument the map v ↦ B(u, v) is K-linear. Equivalently, B(au + bu', v) = aB(u, v) + bB(u', v) and B(u, av + bv') = aB(u, v) + bB(u, v') for all scalars a, b. Once a basis of V is chosen, B is encoded by its Gram matrix G with entries G_ij = B(e_i, e_j), and then B(u, v) = x^T G y where x, y are the coordinate columns of u, v.
A bilinear form need not be symmetric: B(u, v) and B(v, u) can differ. Any B splits into a symmetric part and an alternating part when the characteristic of K is not 2, and the symmetric part is what gives rise to a quadratic form. The dot product on R^n, the form x^T A y for any fixed matrix A, and the pairing of a space with its dual are the prototypical examples.
On R^2 take B(x, y) = x_1 y_1 + 2 x_1 y_2 - x_2 y_2, with Gram matrix [1, 2; 0, -1]. Then B((1,1),(1,1)) = 1 + 2 - 1 = 2, while B((1,1) in second slot fixed) is linear in the first slot.
A non-symmetric bilinear form and its Gram matrix.
Bilinearity is over a single field. A map linear in each of two arguments but conjugate-linear in one (as on a complex inner product space) is a sesquilinear form, not a bilinear form; the distinction matters greatly over C.